Kirjautuminen

Haku

Tehtävät

Keskustelu: Ohjelmointikysymykset: Java: Miten pelin saa etenemään jatkuvasti?

E1ss [19.04.2016 19:11:15]

#

import javax.swing.SwingUtilities;

public class Luokka {

	public static void main(String[] args) {
		Mato mato = new Mato();
		Omena omena = new Omena();


		Kayttoliittyma kayttoliittyma = new Kayttoliittyma(mato, omena);

		SwingUtilities.invokeLater(kayttoliittyma);
	}

}
import java.awt.Container;
import java.awt.Dimension;
import javax.swing.JFrame;
import javax.swing.WindowConstants;

public class Kayttoliittyma implements Runnable {
	private JFrame frame;
	private Mato mato;
	private Omena omena;

	public Kayttoliittyma(Mato mato, Omena omena) {
		this.mato = mato;
		this.omena = omena;
	}

	@Override
	public void run() {
	    frame = new JFrame("Otsikko");
	    frame.setPreferredSize(new Dimension(500, 500));

	    frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);

	    luoKomponentit(frame.getContentPane());

	    frame.pack();
	    frame.setVisible(true);
	}

	private void luoKomponentit(Container container) {
		Piirtoalusta piirtoalusta = new Piirtoalusta(mato, omena);
		container.add(piirtoalusta);

		frame.addKeyListener(new Nappaimistokuuntelija(mato, piirtoalusta));
	}

	public JFrame getFrame() {
	    return frame;
	}
}
import java.awt.Color;
import java.awt.Graphics;

import javax.swing.JPanel;

public class Piirtoalusta extends JPanel{

	private Mato mato;
	private Omena omena;

	public Piirtoalusta(Mato mato, Omena omena) {
        super.setBackground(Color.GRAY);
        this.mato = mato;
        this.omena = omena;
    }

    @Override
    protected void paintComponent(Graphics graphics) {
        super.paintComponent(graphics);
        mato.piirra(graphics);
        omena.piirra(graphics);
    }
}
import java.awt.Graphics;

public class Mato {
	private Arpoja arpoja;
	private int x;
	private int y;


	public Mato(){
		arpoja = new Arpoja();
		this.x = arpoja.getX();
		this.y = arpoja.getY();
	}


	public int getX(){
		return x;
	}


	public int getY(){
		return y;
	}


	public void siirry(int xMuutos, int yMuutos){
		this.x += xMuutos;
		this.y += yMuutos;
	}


	public void piirra(Graphics graphics){
		graphics.fillRect(x, y, 20, 20);
	}
}
import java.awt.Component;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;

public class Nappaimistokuuntelija implements KeyListener{
	private Component component;
	private Mato mato;

	public Nappaimistokuuntelija(Mato mato, Component component){
		this.mato = mato;
		this.component = component;
	}

	@Override
	public void keyPressed(KeyEvent e) {
		if (e.getKeyCode() == KeyEvent.VK_LEFT) {
			mato.siirry(-10, 0);
        } else if (e.getKeyCode() == KeyEvent.VK_RIGHT) {
            mato.siirry(10, 0);
        } else if(e.getKeyCode() == KeyEvent.VK_UP){
        	mato.siirry(0, -10);
        } else if(e.getKeyCode() == KeyEvent.VK_DOWN){
        	mato.siirry(0, 10);
        }

		component.repaint();
	}

	@Override
	public void keyReleased(KeyEvent e) {
		// TODO Auto-generated method stub

	}

	@Override
	public void keyTyped(KeyEvent e) {
		// TODO Auto-generated method stub

	}
}
import java.util.Random;

public class Arpoja {
	private Random ran = new Random();
	private int x;
	private int y;


	public Arpoja(){
		this.x = ran.nextInt(300) + 101;
		this.y = ran.nextInt(300) + 101;
	}


	public int getX(){
		return this.x;
	}


	public int getY(){
		return this.y;
	}
}

Eli miten saan tähän ohjelmaan sellaisen toiminoon että mato liikkuisi vaikka 5 sekunnissa. Kun painaa jotain näppäintä mato rupeaa liikkumaan sinne 5 sekunnissa.

Lisäys: Älkää sitten välittäkö noista omena jutuista. En laittanut kaikkea koodia tänne sekottamaan päätä.

_Pete_ [21.04.2016 09:51:51]

#

Sinun pitää pääohjelmaasi tehdä silmukka, jossa matoa pelin aikana liikutetaan
pääpiirteittään näin:

while (peli on käynnissä) {

  jos ohjausnäppäimiä painettu, muuta madon suunta

  liikuta madon päätä voimassa olevaan suuntaan

  jos törmäys seinään/itseensä, poistu peli käynnissä silmukasta -> game over

  jos törmäys omenaan, kasvata matoa (häntä ei liiku)

  tähän kohtaan sopiva odotus, jotta silmukka ei pyöri (mato liiku)
  liian lujaa

}

E1ss [21.04.2016 09:53:48]

#

Kiitos tästä pete

Vastaus

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

Tietoa sivustosta