| Uutiset | Koodikirjasto | Wiki | Keskustelut | FAQ | Info |
Avaruuspeliolotila 30.01.05 18:31 Väistellään putoilevia palloja avaruusaluksen näköisellä polygonilla
// ***Avaruusalus peli javalla /*Peli on aika simppeli nuolinäppäimillä toimiva juttu *Tässä käytetään nuolinäppäimiä ohjaamiseen niin, että *kun näppäin on pohjassa avaruus alus liikkuu *Säie liikuttaa alusta. Jos sen tekisi niin, että keyPressissä olisi *suoraan käsky liikuttaa alusta alus liikkuisi kerran ja odottaisi *hetken sitten alkaisi liikkua kunnolla. * *Peli piirtyy Canvakselle. Hienoutena piirtämisessä on polygoni jossa on *12 kulmaa. * *Pelin muut luokat Kivi ja Alus ovat vain apuluokkia. Pelin olisi voinut *ilmankin niitä, taulukoilla ja muuttujilla, mutta näin se on simppelimpi *ymmärtää. * */ import java.awt.*; import java.awt.event.*; // Avaruus on pää luokka ja säie 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[50]; 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>49){ indeksi=0; } } //liikuttaa kiviä alaspäin public void alas(){ for(int i=0;i<50 &&this.kivet[i]!=null;i++){ this.kivet[i].asetaY(this.kivet[i].getY()+2); if(this.kivet[i].getY()*4<=400 && this.kivet[i].getY()*4>=380 && this.kivet[i].getX()<=this.alus.kerroPaikka()+5 && this.kivet[i].getX()>=this.alus.kerroPaikka()){ for(int j=0;j<50 &&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[12]; int[] yCoords = new int[12]; xCoords[0] = this.alus.kerroPaikka()*4+2; //koordinaatit ovat int xCoords[1] = this.alus.kerroPaikka()*4+6; //tauluja xCoords[2] = this.alus.kerroPaikka()*4+8; xCoords[3] = this.alus.kerroPaikka()*4+12; xCoords[4] = this.alus.kerroPaikka()*4+14; xCoords[5] = this.alus.kerroPaikka()*4+18; xCoords[6] = this.alus.kerroPaikka()*4+18; xCoords[7] = this.alus.kerroPaikka()*4+14; xCoords[8] = this.alus.kerroPaikka()*4+12; xCoords[9] = this.alus.kerroPaikka()*4+10; xCoords[10] = this.alus.kerroPaikka()*4+6; xCoords[11] = this.alus.kerroPaikka()*4+2; yCoords[0] = 380; yCoords[1] = 386; yCoords[2] = 380; yCoords[3] = 380; yCoords[4] = 386; yCoords[5] = 380; yCoords[6] = 400; yCoords[7] = 400; yCoords[8] = 396; yCoords[9] = 396; yCoords[10] = 400; yCoords[11] = 400; for(int i=0;i<50;i++){ if(this.kivet[i]!=null){ g.fillArc(this.kivet[i].getX()*4-10,this.kivet[i].getY()*4-10,20,20,0,360); } } g.setColor(Color.blue); g.fillPolygon(xCoords, yCoords, 12); //polygoni 12 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 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&&paikka<98){ this.paikka++; } else if(this.vasen&&paikka>0){ this.paikka--; } } } //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 getX(){ return this.x; } public int getY(){ return this.y; } } Ztane 10:58 1.2.05 Piirtokoodi on *ruma* editoitu: 12:11 1.2.05 olotila 12:11 1.2.05 mutta teknisesti hieno. Ainakin polygoni. :) sysrq868 17:57 5.2.05 Ei olis demoa missään? editoitu: 16:05 6.3.05 olotila 19:01 6.2.05 editoitu: 19:41 14.2.05 Ethisc 19:39 14.2.05 aika hieno olotila 22:40 2.3.05 Olisi muuten pelattava appletti tällä sivulla Vähän muutin koodia tähän http://koti.mbnet.fi/nordto/ |
![]() Haku
|