Přidat otázku mezi oblíbenéZasílat nové odpovědi e-mailem JAVA - implementace Pongu

Ahoj všichni! Dělám do školy jako projekt jednoduchý Pong. Moje myšlenka byla, že ho naprogramuju tak, aby se nejdřív zobrazilo menu s výběrem rychlosti hry atd. Problém je, že menu se mi nezobrazuje, na panelu mi akorát vyskočí ikona, jakože jo, ale to je všechno :D Hra samotná mi přitom normálně jede. Netušíte, co s tím?

Takhle vypadá moje třída pro menu:

/*
 * Trida pro MENU - Nova hra, rychlost hry, konec...
 */

import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JFrame;

import javax.swing.*;



public class Menu{
	JFrame fr;
	
	public void Menu(){
		fr = new JFrame();
		
		/* Rozmery Frameu */
		int fHeight = 250;
		int fWidth = 250;
		Dimension frameSize = new Dimension(fHeight, fWidth); // rozmery okna - pro set*Size fce
		
		/* Frame - vlastnosti */
		/*
		this.setMinimumSize(frameSize);
		this.(frameSize);
		this.setPreferredSize(frameSize);
		*/
		
		//getContentPane().add(this, BorderLayout.CENTER); // "vlozim" objekt (platno - canvas)
		fr.pack(); // urcim velikost JFrame podle obsazenych objektu
		
		fr.setSize(500, 250);
		fr.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		fr.setResizable(false); // zakazu zmenu velikosti okna - hraci plocha je porad stejne velka, zmena okna by nemela smysl
		fr.setVisible(true); // udelam okno viditelnym
		fr.setTitle("Pong pro dva"); // pridam oknu titulek
		fr.setLocationRelativeTo(null); // aby se okno umistilo do stredu monitoru a ne do LH rohu
		//fr.setFont(new Font("Courier 10 Pitch", Font.BOLD, 16)); // vychozi pismo
		
		/* Tlacitka */
		
		/* Rozmery tlacitek */
		int bHeight = 30;
		int bWidth = 50;
		
		JButton b1, b2; // tlacitka
		b1 = new JButton("New Game");
		b2 = new JButton("Exit");
		
		fr.getContentPane().setLayout(null);
		
		b1.setBounds((fWidth - bWidth) / 2, 10, bWidth, bHeight);
		b2.setBounds((fWidth - bWidth) / 2, 10, bWidth, bHeight);
		
		fr.getContentPane().add(b1);
		fr.getContentPane().add(b2);
		
		/* Pridam tlacitkum funkce */
		b1.addActionListener(new ActionListener(){
				public void actionPerformed(ActionEvent e){
					//RunGame game = new RunGame();
					RunGame game = new RunGame();
					game.begin();
					
					fr.dispose();
				}
			}
		);
		
		b2.addActionListener(new ActionListener(){
				public void actionPerformed(ActionEvent e){
					System.exit(0);
				}
			}
		);
	}
	
}

A takhle Run, která by ji měla spustit:

public class RunAll {
	public RunAll(){
		
	}	
	
	public static void main(String[] args){
		new Menu();
	}
	
}

Moc děkuji za všechny rady, tady vůbec nevím, Java není mojí silnou stránkou :D

Předmět Autor Datum
public void Menu() je metoda triedy Menu, nie jej konstruktor ako bolo asi zamyslane.. Cize cely te…
emem 05.12.2013 10:11
emem
Jéé, moc díky, to jsem přehlédl :D
Katsushiro 07.12.2013 14:55
Katsushiro
Tak mám ohledně pongu ještě jeden dotaz - nefunguje mi tu správně odrážení míčku pomocí příznaků pro… poslední
Katsushiro 07.12.2013 14:58
Katsushiro
public void Menu()

je metoda triedy Menu, nie jej konstruktor ako bolo asi zamyslane..
Cize cely ten kod ohladom JFrame sa ti vobec ani nezavola, jedine ze by si to
v main zavolal new Menu().Menu();

zmen tu metodu na konstruktor (vyhod navratovy type void)

 public Menu()

Tak mám ohledně pongu ještě jeden dotaz - nefunguje mi tu správně odrážení míčku pomocí příznaků pro směr (řeším to teĎ nouzově tak, že natvrdo změním rychlost pohybu *-1)... Nechápu proč, napadá vás něco? Pohyb je ve fci "update"

/*
 * Trida pro micek- obsahuje souradnice micku, jejich setter a getter
 * a fci pro restart hry (poloha micku na pocatek po golu)
 */

import java.awt.Color;
import java.awt.Graphics;
import java.lang.Math; // Pro generovani nahodneho cisla

public class Ball {
	private static double x;
	private static double y;
	
	private int speed_red = 6; // redukce rychlosti - jinak micek letal prilis rychles
	
	final private int diameter = 16;
	
	//promenne urcujici rychlost pohybu v souradnicich
	private static double movX;
	private static double movY;
	
	public boolean dirUp; // kdyz se pohybuje micek nahoru
	//public boolean dirDo; // kdyz se pohybuje micek dolu
	public boolean dirLe; // kdyz se pohybuje micek vlevo
	//public boolean dirRi; // kdyz se pohybuje micek vpravo

	
	
	/*
	 * Konstruktor - vyuziva fci restart()
	 */
	public Ball(RunGame game, int speed_red){ //predavam instanci game do konstruktoru proto, abych mohl sahnout na fce restart() u obou palek
		this.speed_red = speed_red;
		restart(game, speed_red);
	}
	
	/**
	 * @param x, y pro nastaveni souradnic
	 */
	public void setX(double x) {
		this.x = x;
	}
	
	public void setY(double y){
		this.y = y;
	}

	/**
	 * @return the x
	 */
	public static double getX() {
		return x;
	}

	/**
	 * @return the y
	 */
	public static double getY() {
		return y;
	}
	
	public static double getMovX(){
		return movX;
	}
	
	public static double getMovY(){
		return movY;
	}
	
	public static void setMovX(double num){
		movX = num;
	}
	
	public static void setMovY(double num){
		movY = num;
	}
	
	public void restart(RunGame game, int speed_red){
		setX( (game.sizeX - diameter) / 2);
		setY( (game.sizeY - diameter) / 2);
		
		int a = (int) (Math.random() * 10 + 2);
		
		if(a > 6){
			//this.dirDo = false;
			this.dirUp = true;
		}else{
			//this.dirDo = true;
			this.dirUp = false;
		}
		
		if(a % 2 == 0){
			//this.dirRi = false;
			this.dirLe = true;
		}else{
			this.dirLe = false;
			//this.dirRi = true;
		}
		

		this.movX =  (Math.ceil(Math.random())) / speed_red;
		this.movY =  (Math.ceil(Math.random())) / speed_red;
		
		game.lPad.restart(game);
		game.rPad.restart(game);
	}

	public void update(RunGame game){
		
		/* Osetreni odrazu od horni a dolni steny hriste */
		if(getY() < 0 && this.dirUp == true){
			this.movY *= -1;
			//this.dirUp = false;
			//this.dirDo = true;
		}else if(getY() > (game.getHeight() - diameter) ){
			this.movY *= -1;
			//this.dirDo = false;
			//this.dirUp = true;
		}
		
		/* Osetreni odrazu od predni hrany palek */
		// JEDNODUCHY ODRAZ - jen predni hrana 
		if( (getX() < (game.lPad.getX() + game.lPad.getWidth())) && (getY() > game.lPad.getY() && (getY() < (game.lPad.getY() + game.lPad.getHeight()) ) ) ){
			//this.dirLe = false;
			//this.dirRi = true;
			
			this.movX *= -1;
		}else if( (getX() > game.rPad.getX() - game.rPad.getWidth()) && (getY() > game.rPad.getY() && (getY() < (game.rPad.getY() + game.lPad.getHeight()) ) ) ) {
			//this.dirRi = false;
			//this.dirLe = true;
			
			this.movX *= -1;
		}
		
		/* Pohyb */
		if(dirUp){
			setY(getY() + movY);
		}else {
			setY(getY() - movY);
		}
		
		if(dirLe){
			setX(getX() - movX);
		}else{
			setX(getX() + movX);
		}
		
		/* Osetreni restartu micku a palek pri golu */
		
		if(getX() < 0){	
			game.rPad.goal();
			restart(game, speed_red);
		}else if(getX() > (game.sizeX + diameter)){	
			game.lPad.goal();
			restart(game, speed_red);
		}
		
	}
	
	public void paint(Graphics g){
		g.setColor(Color.BLUE);
		g.fillOval((int)getX(),(int) getY(), diameter, diameter);
	}
}

Jako obvykle moc děkuji za odpověď, tohle fórum je prima :D

Zpět do poradny Odpovědět na původní otázku Nahoru