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

Jsou zobrazeny jen nové odpovědi. Zobrazit všechny
Předmět Autor Datum
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

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