Ping Pong

yourhope

Mitglied
Hallo Liebe Community,

Also, es geht sich darum. Bin kurz vor dem Abi und habe mir gedacht, vielleicht sollte ich mal was lernen. Im Unterricht programmierten wir mal ein Ping Pong Spiel. Ganz Einfach. Nur ein Spieler und keine großen Funktionen. Leider komme ich nicht mehr weiter.
Das Programm ist leider nicht ganz auskommentiert...

Mein Problem liegt jetzt eigentlich nur darin, dass sich der Ball nicht bewegt.. .
Im Internet fand ich den Timer der unten in der Try Catch Schleife steht. Leider sagt der Compiler mir die ganze zeit das in Zeile 66 der Thread nicht dereferenced werden kann. Wenn ich noch irgendwelche Daten vergessen habe und ihr mir helfen könnt, bitte melden. :)

Danke schonmal.

@Fu3l Tut mir leid. Hoffe du meintest das so:)
Bin neu hier...:)

Java:
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import javax.swing.event.*;
import java.applet.*;

public class pong extends JFrame{
	JSlider m_SPaddel;
	CMeinJPanel m_malfläche;
	boolean richtung = true;
	int xpos,xposb=100,yposb=150,th,Thread;
	
	
	public static void main(String[]args){
		pong fenster= new pong("Pong Beta 1");
		fenster.pack();
		fenster.setSize(450,350);
		fenster.setResizable(false);
		fenster.setVisible(true);
		
	}//Ende main
	
	

	//Slider
	class m_SPaddel implements ChangeListener{
		
		public void stateChanged(ChangeEvent e){
			JSlider source=(JSlider)e.getSource();
			xpos=source.getValue();
			
			repaint();
		}
	}
	
	public class BallApplet extends Applet implements Runnable
{ 
public void start ()
{

    // Schaffen eines neuen Threads, in dem das Spiel läuft
    Thread th = new Thread (this);
    // Starten des Threads
    th.start ();


}
  public void run ()
{

    // Erniedrigen der ThreadPriority
 

    // Solange true ist läuft der Thread weiter
    while (true)
    {
        // Verändern der X - Koordinate des Balles
	xposb ++;
        
        // Neuzeichnen des Applets
        repaint();

        try
        {
            // Stoppen des Threads für in Klammern angegebene Millisekunden
            Thread.sleep(20);
        }
        catch (InterruptedException ex)
        {
            // do nothing
        }

        // Zurücksetzen der ThreadPriority auf Maximalwert
      
    } 
}
} 

			
	pong(String titel){
		super(titel);
		 
		 
		JPanel panel = new JPanel();
		
		setLayout(new FlowLayout());
		panel.setLayout(new GridLayout(1,1,20,20));
		
		m_malfläche = new CMeinJPanel();
		
		
		add(m_malfläche);
		add(panel);
		
		//Den Slider anlegen
		m_SPaddel=new JSlider(JSlider.VERTICAL,-278,0,0);
		
		add("East",m_SPaddel);
		
		m_SPaddel.addChangeListener(new m_SPaddel());
		
		setDefaultCloseOperation(EXIT_ON_CLOSE);
	}//Ende Kostruktor
	
	class CMeinJPanel extends JPanel{
		

		
		public void paintComponent(Graphics g){
			
				//Paddel
				g.setColor(Color.blue);
				g.fillRect(380,xpos*-1,5,20);
				
				//Oben
				g.setColor(Color.black);
				g.fillRect(0,0,390,2);	
				
				//Links
				g.fillRect(0,0,2,300);
				
				//Unten
				g.fillRect(0,298,390,2);
				
				//Rechts
				g.fillRect(388,0,2,298);
		
				//Ball
				g.setColor(Color.red);
				g.drawRect(xposb,yposb,2,2);
		}
					public Dimension getMinimumSize() 
			{
				return new Dimension(400,300);
			}//Ende getMinimumSize
		
		
			public Dimension getPreferredSize() 
			{
				return getMinimumSize();
			}

	}
}
 
Zuletzt bearbeitet:

Fu3L

Top Contributor
Könntest du deinen Beitrag editieren und das ganze nochma aus deiner Entwicklungsumgebung reinkopieren, aber mit Java_Tags? Und wichtig: Nicht einfach die Java Tags einfügen ohne den Code neu einzufügen, dann kommt die Einrückung nämlich nicht wieder ;)

Edit2: Kommando zurück^^ Wegen der fehlenden Einrückung verlesen^^
 
Zuletzt bearbeitet:

Fu3L

Top Contributor
Ich sündige mal mit einem Doppelpost^^

Die Klasse BallApplet wird nie aufgerufen und somit wird auch der Thread darin nicht genutzt. Allerdings ist es auch gut so, dass diese Klasse nicht aufgerufen wird^^

So funktioniert es (vllt nicht alels schön, aber immerhin):
Java:
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import javax.swing.event.*;
import java.applet.*;
 
public class pong extends JFrame implements Runnable {
    JSlider m_SPaddel;
    CMeinJPanel m_malfläche;
    boolean richtung = true;
    int xpos,xposb=100,yposb=150,th;
    
    
    public static void main(String[]args){
        pong fenster= new pong("Pong Beta 1");
        fenster.pack();
        fenster.setSize(450,350);
        fenster.setResizable(false);
        fenster.setVisible(true);
        
    }//Ende main
    
    
 
    //Slider
    class m_SPaddel implements ChangeListener{
        
        public void stateChanged(ChangeEvent e){
            JSlider source=(JSlider)e.getSource();
            xpos=source.getValue();
            
            repaint();
        }
    }
    
    
  public void run ()
{
 
    // Erniedrigen der ThreadPriority
 
 
    // Solange true ist läuft der Thread weiter
    while (true)
    {
        // Verändern der X - Koordinate des Balles
    xposb ++;
        
        // Neuzeichnen des Applets
        repaint();
 
        try
        {
            // Stoppen des Threads für in Klammern angegebene Millisekunden
            Thread.sleep(20);
        }
        catch (InterruptedException ex)
        {
            // do nothing
        }
 
        // Zurücksetzen der ThreadPriority auf Maximalwert
      
    } 
}
 
            
    pong(String titel){
        super(titel);
         
        
        JPanel panel = new JPanel();
        
        setLayout(new FlowLayout());
        panel.setLayout(new GridLayout(1,1,20,20));
        
        m_malfläche = new CMeinJPanel();
        
        
        add(m_malfläche);
        add(panel);
        
        //Den Slider anlegen
        m_SPaddel=new JSlider(JSlider.VERTICAL,-278,0,0);
        
        add("East",m_SPaddel);
        
        m_SPaddel.addChangeListener(new m_SPaddel());
        
        setDefaultCloseOperation(EXIT_ON_CLOSE);
        
        Thread t = new Thread(this);
        t.start();
    }//Ende Kostruktor
    
    class CMeinJPanel extends JPanel{
        
 
        
        public void paintComponent(Graphics g){
            
                //Paddel
                g.setColor(Color.blue);
                g.fillRect(380,xpos*-1,5,20);
                
                //Oben
                g.setColor(Color.black);
                g.fillRect(0,0,390,2);  
                
                //Links
                g.fillRect(0,0,2,300);
                
                //Unten
                g.fillRect(0,298,390,2);
                
                //Rechts
                g.fillRect(388,0,2,298);
        
                //Ball
                g.setColor(Color.red);
                g.drawRect(xposb,yposb,2,2);
        }
                    public Dimension getMinimumSize() 
            {
                return new Dimension(400,300);
            }//Ende getMinimumSize
        
        
            public Dimension getPreferredSize() 
            {
                return getMinimumSize();
            }
 
    }
}

Was habe ich gemacht? Dieses unselige Konstrukt mit dem Applet entfernt. Einfach die Klassendeklaration sowie eine schließende geschweifte Klammer rausgenommen. Dann die Variable Thread entfernt:

Java:
 int xpos,xposb=100,yposb=150,th,Thread;
So konnte nämlich Thread.sleep nicht aufgerufen werden^^
Dann habe ich in den Konstruktor (den man eigentlich direkt unter der Deklaration der Felder anordnet) den Startbefehl für den Thread hinzugefügt und dafür die Methode start() entfernt.

Eine weitere Anmerkung: Man schreibt Klassennamen groß und den Unterstrich verwendet man in Java eigentlich nur bei Konstanten, wie EXIT_ON_CLOSE (die so genannten Coding Conventions.. Einfach mal Googlen)^^
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
M Einfaches Ping-Pong Spiel Spiele- und Multimedia-Programmierung 3
1 Ping Pong langsam Spiele- und Multimedia-Programmierung 13
J ping pong ball abprallen lassen Spiele- und Multimedia-Programmierung 12
L Java Ping Pong Spiele- und Multimedia-Programmierung 1
S Ping Pong: KeyListener in Paint und while Spiele- und Multimedia-Programmierung 10
G Ping Pong Frage Spiele- und Multimedia-Programmierung 17
B Ping Pong Spiele- und Multimedia-Programmierung 11
R Ping Pong Spiel Fehlermeldung Spiele- und Multimedia-Programmierung 12
R Ping Pong Spiel Spiele- und Multimedia-Programmierung 28
J Probleme bei Pong Spiele- und Multimedia-Programmierung 9
J Pong Programm Spiele- und Multimedia-Programmierung 1
T Pong Hilfe bei einer Website Spiele- und Multimedia-Programmierung 4
S Pong java.lang.StackOverflowError Spiele- und Multimedia-Programmierung 3
R Pong Spiel Problem Spiele- und Multimedia-Programmierung 1
B LWJGL StackOverFlow Problem nach 30sekunden. (Pong) Spiele- und Multimedia-Programmierung 2
T Torquemada´s erstes Game (Pong) Spiele- und Multimedia-Programmierung 5
A Pong Grafikgestaltung Spiele- und Multimedia-Programmierung 10
R Pong -Reruns möglich machen Spiele- und Multimedia-Programmierung 2
Y Pong Spiel Score Zähler! -.- Spiele- und Multimedia-Programmierung 18
U Pong Spiele- und Multimedia-Programmierung 7
BattleMaster246 Pong - JOGL Spiele- und Multimedia-Programmierung 2
J Tips für ein kleines Pong-Applet Spiele- und Multimedia-Programmierung 4
D Java Pong Probleme Spiele- und Multimedia-Programmierung 7
W Hilfe bei Pong mit Bluej Spiele- und Multimedia-Programmierung 4
M Fragen zu meinem Pong-Clone Spiele- und Multimedia-Programmierung 6
L Probleme Bei Pong Programmierung Spiele- und Multimedia-Programmierung 2
G Pong klon mit Steuerungsprobleme Spiele- und Multimedia-Programmierung 8
B Pong-Klon. Denkfehler bei kollisionstest Spiele- und Multimedia-Programmierung 3
N Pong - noch 2 kleinere Probleme Spiele- und Multimedia-Programmierung 16
G Pong-Klon (Applet!) Spiele- und Multimedia-Programmierung 4
H Performance check Pong Spiele- und Multimedia-Programmierung 19

Ähnliche Java Themen

Neue Themen


Oben