Kirjautuminen

Haku

Tehtävät

Keskustelu: Koodit: Java: Säie polygoni näppäimisön kuuntelu ja palloja

TJN [22.01.2005 20:20:02]

#

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;
	}
}

TJN [22.01.2005 20:30:58]

#

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--;
		}
	}

TJN [22.01.2005 20:47:10]

#

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;

tsuriga [26.01.2005 22:32:46]

#

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()

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta