Also nach langem rumspielen und Testen habe auch ich dass Pong Spiel geschafft... Naja, jetzt würde ich gerne, dass der Score hochzählt. Leider habe ich ein Problem damit, dass sich das Label nicht erhöhen lässt. Ich versuche es mit einem repaint(), leider weiß ich nicht wie und wo ich es einsetzen muss, dass er es aktualisiert.
Hier im Konstruktor?
Kollisionsabfrage zwischen Ball und "Schläger"
Hier Nochmal die Gesamte Programmierung wenn es Notwenidig ist:
Danke schonmal im Vorraus
your
Hier im Konstruktor?
Java:
CPongTest(String titel) {
super(titel);
//Label erzeugen
JLabel mylabel = new JLabel();
mylabel.setText("Score " + Score);
//HIER HABE ICH ES SCHON VERSUCHT, mit einem einfachen repaint() und mylabel.repaint();
//Zufallszahlen für Start erstellen
int zufallx = (int) (Math.random()*100);
int zufally = (int) (Math.random()*100);
xposb=zufallx;
yposb=zufally;
//Zeichenfläche erzeugen
m_zeichenfläche = new CMeinJPanel();
//Slider erzeugen
m_Spaddel = new JSlider(JSlider.VERTICAL,-300,0,-40);
// Einen Layout Manager anlegen
setLayout(new BorderLayout());
// Die Zeichenfläche anlegen
add(m_zeichenfläche);
//Schriftzug zur Fläche hinzufügen
m_zeichenfläche.add(mylabel);
// Den Slider anlegen
add("East",m_Spaddel);
//Slider ChangeListener
m_Spaddel.addChangeListener(new Slider());
setDefaultCloseOperation(EXIT_ON_CLOSE);
} // ende Konstruktor
Kollisionsabfrage zwischen Ball und "Schläger"
Java:
//Wenn Ball Paddel berührt
if((yposb>(-PosSlider))&&(yposb<(-PosSlider+20))){
//Ball zurück stoßen
deltax*=-1;
xposb+=deltax;
//Score erhöhen
Score++;
m_zeichenfläche.setVisible(false);//UND WIE MAN HIER SIEHT VERSUCHT DIE MALFLÄCHE NEU ZEICHNEN ZU LASSEN BZW AUCH HIER MIT EINEM REPAINT() VERSUCHT
m_zeichenfläche.setVisible(true);
}
}
Hier Nochmal die Gesamte Programmierung wenn es Notwenidig ist:
Java:
/* CPongVorlage1
Ein vertikaler Slider soll ein blaues Paddel 5x20 in einem Fenster von
400x300 Pixel an X=390 von Y=0..280 bewegen.
Das Spielfeld soll von schwarzern Strichen der Dicke 2 Pixel begrenzt
werden.
Für HI12 SAS von CLA am 11.5.11
*/
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import javax.swing.event.*;
import java.awt.Label.*;
public class CPongTest extends JFrame {
JSlider m_Spaddel; // Schieber Paddel,
CMeinJPanel m_zeichenfläche;
Label hinweis;
int PosSlider=-40;
int xposb=150;
int yposb=200;
int deltax;
int deltay;
int Score=0;
int Scorealt;
int zufallx;
int zufally;
// weitere Klassenvariablen
public static void main(String[] args) {
CPongTest fenster = new CPongTest("Pong1");
fenster.pack();
fenster.setSize(450,400);
fenster.setResizable(false);
fenster.setVisible(true);
fenster.spielen();
} // ende main()
//Konstruktor
CPongTest(String titel) {
super(titel);
//Label erzeugen
JLabel mylabel = new JLabel();
mylabel.setText("Score " + Score);
//Zufallszahlen für Start erstellen
int zufallx = (int) (Math.random()*100);
int zufally = (int) (Math.random()*100);
xposb=zufallx;
yposb=zufally;
//Zeichenfläche erzeugen
m_zeichenfläche = new CMeinJPanel();
//Slider erzeugen
m_Spaddel = new JSlider(JSlider.VERTICAL,-300,0,-40);
// Einen Layout Manager anlegen
setLayout(new BorderLayout());
// Die Zeichenfläche anlegen
add(m_zeichenfläche);
//Schriftzug zur Fläche hinzufügen
m_zeichenfläche.add(mylabel);
// Den Slider anlegen
add("East",m_Spaddel);
//Slider ChangeListener
m_Spaddel.addChangeListener(new Slider());
setDefaultCloseOperation(EXIT_ON_CLOSE);
} // ende Konstruktor
//ChangeListener für Slider
class Slider implements ChangeListener{
public void stateChanged(ChangeEvent e){
//SliderKoordinaten holen
JSlider source = (JSlider)e.getSource();
PosSlider=source.getValue();
repaint();
}
}
//Spiel starten und Ball bewegen lassen
void spielen(){
deltax=1;
deltay=1;
for(;;){
xposb+=deltax;
yposb+=deltay;
//Kollision prüfen
Kollision();
//Programm für 10 ms stoppen
try { Thread.sleep(10); } catch (InterruptedException e) {};
repaint();
}
}
//Kollisions abfrage
void Kollision(){
//SPaddel
if(xposb>=426){
//Neustart des Spiels aufrufen
neustart();
}
//Wenn Ball hinter Paddel
if(xposb>=390)
{
//Wenn Ball Paddel berührt
if((yposb>(-PosSlider))&&(yposb<(-PosSlider+20))){
//Ball zurück stoßen
deltax*=-1;
xposb+=deltax;
//Score erhöhen
Score++;
m_zeichenfläche.setVisible(false);
m_zeichenfläche.setVisible(true);
}
}
//Linke Wand
if(xposb<=0)
{
deltax*=-1;
xposb+=deltax;
}
//Unten / Oben
if ( (yposb <=0) || (yposb >= 320) ) {
deltay *= -1;
yposb += deltay;
}
}
//Neustarten des Spiels
void neustart(){
//Zufallszahlen für jeden Neustart erzeugen
int zufallx = (int) (Math.random()*100);
int zufally = (int) (Math.random()*100);
xposb=zufallx;
yposb=zufally;
}
class CMeinJPanel extends JPanel {
public void paintComponent(Graphics g) {
// Hier wird gezeichnet.
//PosSlider
g.setColor(Color.blue);
g.fillRect(390,-PosSlider,5,20);
//Oben
g.setColor(Color.black);
g.fillRect(0,0,426,2);
//Links
g.fillRect(0,0,2,320);
//Unten
g.fillRect(0,320,426,2);
//Rechts
g.fillRect(425,0,2,322);
//Ball
g.setColor(Color.red);
g.fillOval(xposb,yposb,4,4);
} //Ende paintComponent
public Dimension getMinimumSize(){
return new Dimension(400,300);
}
public Dimension getPreferredSize(){
return getMinimumSize();
}
} // Ende von CMeinJPanel
} // ende class CPongVorlage1
Danke schonmal im Vorraus
your