Avaruuspeli

olotila 30.01.05 18:31

Väistellään putoilevia palloja avaruusaluksen näköisellä polygonilla

 Tekstiversio  Arvo: 4 (6 ääntä)  Äänestä: +  -
// ***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/