Koodista saa pelin jota voi pelailla nuoli näppäimillä vasen ja oikea. palloja putoaa joita pitää väistellä jos osuu peli alkaa alusta
Avaruus luokka käyttää javan graaffisia java.awt luokkia ja java.awt.event luokasta näppäimistön kuuntelijaa perii myös Canvaksen(taulu johon voi piirtää) ja toteuttaa Runnablen (yksi tapa tehdä säie)
Muut luokat ovat vain lisäystä
Avaruus.java
// Avaruus on pää luokka ja säie import java.awt.*; import java.awt.event.*; public class Avaruus extends Canvas implements Runnable{ private Alus alus; private Kivi[] kivet; //kivet ovat taulukossa private int indeksi=0; //indeksi nopeuttaa taulukkoa public Avaruus(){ this.kivet=new Kivi[100]; this.alus=new Alus(); KeyListener kuuntelija=new KeyAdapter(){ //tässä tehdään näppäimistön //kuuntelu public void keyPressed(KeyEvent e){ if (e.getKeyCode()==KeyEvent.VK_RIGHT){ liikuO(true); } if (e.getKeyCode()==KeyEvent.VK_LEFT){ liikuV(true); } } public void keyReleased(KeyEvent e){ liikuO(false); liikuV(false); } }; addKeyListener(kuuntelija);//tässä lisätään } //jos toteuttaa Runnable rajapintaa run on pitää olla run metodi public void run(){ while(1<2){ try{ Thread.currentThread().sleep(100); //odottaa 100 milli sekunttia }catch(InterruptedException e){ //keskeytys poikkeus täytyy kokeilla //näillä säikeillä } this.alus.liiku(); try{ Thread.currentThread().sleep(10); }catch(InterruptedException e){ } this.alus.liiku(); kivi(); alas(); this.requestFocus(); //fookusta kannattaa aina pyytää sille joka //omistaa jonkin kuuntelijan repaint(); //kutsuu paint() ja tyhjää vanhan taulun } } //luo kiven public void kivi(){ this.kivet[this.indeksi] = new Kivi(); this.indeksi++; if (this.indeksi>99){ indeksi=0; } } //liikuttaa kiviä alaspäin public void alas(){ for(int i=0;i<100 &&this.kivet[i]!=null;i++){ this.kivet[i].asetaY(this.kivet[i].y()+2); if(this.kivet[i].y()*4<=400 && this.kivet[i].y()*4>=380 && this.kivet[i].x()<=this.alus.kerroPaikka()+5 && this.kivet[i].x()>=this.alus.kerroPaikka()){ for(int j=0;j<100 &&this.kivet[j]!=null;j++){ this.kivet[j].asetaY(500); } } } } //näppäimistön kuuntelija tarvitsee seuraavia public void liikuO(boolean b){ if(b==true) this.alus.oikea(); else this.alus.stop(); requestFocus(); } public void liikuV(boolean b){ if(b==true) this.alus.vasen(); else this.alus.stop(); requestFocus(); } //Korvaa Canvaksen oman paint metodin public void paint(Graphics g){ g.setColor(Color.red); int[] xCoords = new int[4]; int[] yCoords = new int[4]; xCoords[0] = this.alus.kerroPaikka()*4; //koordinaatit ovat int xCoords[1] = this.alus.kerroPaikka()*4+10; //tauluja xCoords[2] = this.alus.kerroPaikka()*4+10; xCoords[3] = this.alus.kerroPaikka()*4+20; yCoords[0] = 400; yCoords[1] = 380; yCoords[2] = 380; yCoords[3] = 400; for(int i=0;i<100;i++){ if(this.kivet[i]!=null){ g.fillArc(this.kivet[i].x()*4-10,this.kivet[i].y()*4-10,20,20,0,360); } } g.fillPolygon(xCoords, yCoords, 4); //polygoni 4 kulmaa voi olla enemmän } //ja koordinaatit //luo graaffisen käyttöliittymän public static void main(String[] s){ Avaruus avaruus = new Avaruus(); Frame frame=new Frame(); frame.setSize(450,450); frame.add(avaruus); frame.addWindowListener(new WindowAdapter(){ public void windowClosing(WindowEvent we){ System.exit(0); } }); frame.setVisible(true); avaruus.repaint(); avaruus.setSize(500,500); avaruus.requestFocus(); Thread thread = new Thread(avaruus); //säie tehdään avaruudesta thread.start(); //ja startataan kutsuu run() Color vari=new Color(7,200,200); avaruus.setBackground(vari); } }
Alus.java
//Alus on avaruus alus se sisältää koordinaatteja ja sitä voi liikutella public class Alus{ private int paikka=50; private boolean oikea=false; private boolean vasen=false; public Alus(){ } public int kerroPaikka(){ return this.paikka; } public void oikea(){ if(paikka!=100){ this.oikea=true; } } public void vasen(){ if (paikka!=0){ this.vasen=true; } } public void stop(){ this.vasen=false; this.oikea=false; } public void liiku(){ if(this.oikea){ this.paikka++; } else if(this.vasen){ this.paikka--; } } }
Kivi.java
//kivi on kivi sillä on koordinaatteja ja sen konstruktori käyttää satunnais //generaattoria random() x tekemiseen public class Kivi{ private int x; private int y; public Kivi(){ this.x=(int)(Math.random()*100); } public void asetaX(int x){ this.x=x; } public void asetaY(int y){ this.y=y; } public int x(){ return this.x; } public int y(){ return this.y; } }
Korjaus Aluksen liiku metodi pitää olla tälläinen
muuten pääsee yli rajojen
public void liiku(){ if(this.oikea&&paikka<98){ this.paikka++; } else if(this.vasen&&paikka>0){ this.paikka--; } }
Jos vaihtaa nämä koordinaatit näiksi saa polygoniin
enemmän polygonimaisuutta
xCoords[1] = this.alus.kerroPaikka()*4+15; xCoords[2] = this.alus.kerroPaikka()*4+5;
Sitä koodivinkkiä voi myös muokata. Tuo nimi ei kerro itse vinkistä niin mitään, kommentteja ei ole nimeksikään ja kieliopissa on vielä viilaamista. Selvyyden vuoksi lisäksi nuo y() ja x() voisivat olla getX() ja getY()
Aihe on jo aika vanha, joten et voi enää vastata siihen.