Bewegung eines Balkens in eineum JPanel welches als Spielfeld fungiert

pmSave

Mitglied
Hallo zusammen,
ich habe ein Tennis ähnliches spiel programmiert, wo man einen Balken steuern muss, der am rechten Rand des JPanel liegt und gegen den Computer(dieser ist der linke Balken und liegt am linken Rand) spielen kann. Man muss versuchen einen Ball im Spiel zu halten und nicht gegen seine Wand prallen zu lassen, am besten gegen die linke also die des Computergesteuerten.
Hier kommt mein Problem:
Der Computergesteuerte, linke Balken wird auf das Panel gezeichnet und als Y-Koordinate(dem entsprechend die senkrechte Höhe auf der sich der Balken befindet) wird normalerweise immer die Y-Koordinate des Balls(welche sich durchgehen ändert) gesetzt.
Nun kann man so als Spieler natürlich nicht gewinnen, da der Computer den Ball immer trifft. Ich habe mir überlegt, dass es eine zufalls-chance gibt ob der Computergesteuerte linke Balken den Ball trifft oder durchlässt. Ob der Balken den Ball durchlässt wird immer geprüft, wenn der Ball von der Seite des Spielers kommt und sich ungefähr in der Mitte des Feldes befindet. Wenn der Ball durchgelassen werden soll, soll sich die Y-Koordinate des linken Balken so verändern, dass der Balken den Ball nicht mehr trifft.
Das ganze findet in der run-Methode eines laufenden Threads statt, wobei alle Komponenten auf das Panel mit der überschriebenen Methode paintComponent gezeichnet werden.

Hier die entsprechenden Auszüge aus dem Quellcode, ich entschuldige mich für event. schlechte Variablen bezeichnungen, da ich jetzt etwas länger an dem Verhalten des Balkens gearbeitet habe und leider der Balken ab einer x-Position des Balls von weniger als 300 entweder stehen bleibt oder die komischsten sachen macht.
Java:
public class JMyPanel extends JPanel implements Runnable{
...
private boolean win;        //variable zum festlegen, ob der linke Balken trifft oder nicht
    private int posBl = 0;  //gemeint ist die richtung des linken balkens wenn die variable win = true ist
    private int richtungBlzaehler = 2; //variable um die verschiebung des linken balkens auf zeit zu kontrollieren

...
public void run() {
...
    if (win == true && vor == false && ball.getX() <= 300) {
               if (ball.getX() <= 300 && ball.getX() >= 298) {
                   posBl = (int)ball.getY();
               }
               if (ball.getX() < 300) {
               if (oben) {
                   rechteckL.setY(posBl - zufall);
                   posBl-=zufall;
               } else {
                   rechteckL.setY(posBl + zufall);
                   posBl+=zufall;
               }
               abstand=0;
                   richtungBlzaehler += 1;
    }
...
}

...
/* Methode die aufgerufen werden soll um zu Prüfen, ob der linke Balken den Ball trifft
 * oder nicht*/
public void winPruefen() { 
   if((int)(Math.random()*60) > 15 || zaehler == 1) {
       win = false; //spiel geht weiter
   } else {
       win = true;   //runde gewonnen, da ball gegen die linke wand trifft
   }
   if(zaehler == 1) {
       zaehler = 2;
   }
}
}

Ich bin mir nicht ganz sicher, ob ich das lieber in einem anderen Forum posten sollte, aber da es hier lediglich um ein denk-Problem im Bezug auf das Zeichnen auf einem JPanel - was ja bekanntlich eine SWING - Komponente ist, geht.
Ich hoffe mein Code ist nachvollziehbar. Ich habe immer direkte Zahlenwerte benutzt, da die Methoden getWidth() bzw. getHeight() meist nicht gut funktioniert haben.
 

MoxxiManagarm

Top Contributor
Das "tennisartige Spiel" was du beschreibst ist auch allgemein als Ping Pong bekannt.

Aus meiner Sicht ist es auch keine Lösung per Zufall zu entscheiden ob der Computer durchlässt oder nicht.
Du hast ja sicher eine Geschwindigkeit (Velocity) für den Schläger des Spielers. Eine solche Geschwindigkeit sollte der Computerschläger auch haben. Der Ball sollte eine höhere Velocity als der Schläger haben. Dann taktest du das "Denken" vom Computer (für möglichen Richtungswechsel) noch mit einem eigenen Timer. Diese Werte (Taktung, Velocity etc.) kannst du dann bissl ändern und rumprobieren. Eventuell gestaltest du die Velocity vom Computer auch etwas niedriger als deine eigene. Auf diese Weise kann, zumindest theoretisch, der Computer auch verlieren.

Noch ein kleiner Hinweis:
Es wird grundsätzlich davon abgeraten solche Runnables bei Swing-Applikationen zu haben.
Swing hat dafür https://docs.oracle.com/javase/7/docs/api/javax/swing/Timer.html
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
R Swing Bewegung eines Graphics Objektes innerhalb eines JPanels funktioniert nicht richtig AWT, Swing, JavaFX & SWT 2
H Bewegung funktioniert nicht AWT, Swing, JavaFX & SWT 3
J Bewegung rauf und ab AWT, Swing, JavaFX & SWT 5
R Fließende Bewegung von Graphics AWT, Swing, JavaFX & SWT 6
F Swing Jump and Run Bewegung!? AWT, Swing, JavaFX & SWT 11
B bewegung mit Pfeiltasten? AWT, Swing, JavaFX & SWT 2
M 3D-Grafik Bewegung mit der Maus ohne Klicken AWT, Swing, JavaFX & SWT 10
S Problem mit JLabel (Bewegung in Schleife) AWT, Swing, JavaFX & SWT 7
W Kein MouseKlick-Event bei Bewegung AWT, Swing, JavaFX & SWT 2
G Cursor Bewegung tracken AWT, Swing, JavaFX & SWT 2
B kein MouseEvent bei zu schneller Bewegung der Maus AWT, Swing, JavaFX & SWT 7
jojoge wie kann ich in eine Benennung eines JButtons eine Variable einbauen? AWT, Swing, JavaFX & SWT 6
L paintComponent in Panel eines Borderlayouts hinzufügen AWT, Swing, JavaFX & SWT 3
I Einbindung eines jpg/png/icons in eine GUI AWT, Swing, JavaFX & SWT 1
Splayfer Umrandung eines AttributedStrings AWT, Swing, JavaFX & SWT 2
Guybrush Threepwood Einfachste Möglichkeit zum Abspielen eines Videos in Swing AWT, Swing, JavaFX & SWT 4
Jose05 NullPointerException bei Beschreiben eines Labels aus einem Array AWT, Swing, JavaFX & SWT 12
Jose05 zugreifen auf ein Objekt eines GridPanes AWT, Swing, JavaFX & SWT 0
melaniemueller Verschiebung eines Fensters über Button AWT, Swing, JavaFX & SWT 27
news2swen automatisches erstellen eines Languagefiles AWT, Swing, JavaFX & SWT 1
B Stylen eines JTextPane funktioniert nicht AWT, Swing, JavaFX & SWT 1
MiMa Schliessen eines FXML Fensters? AWT, Swing, JavaFX & SWT 10
B JavaFX Farbe eines Quadrates in einer separaten Klasse ändern AWT, Swing, JavaFX & SWT 4
L AWT Ändern der Farbe eines BufferedImage mit Farbähnlichkeit AWT, Swing, JavaFX & SWT 5
B veränderte Größe eines Panels im Vorhinein wissen? AWT, Swing, JavaFX & SWT 1
L Komponenten eines Panels werden erst nach Klick darauf angezeigt AWT, Swing, JavaFX & SWT 13
L JavaFX Validierung eines Spinner AWT, Swing, JavaFX & SWT 1
M Builden eines lauffähigen JAR Files AWT, Swing, JavaFX & SWT 3
K Swing Text eines Lables in einer Methode ändern AWT, Swing, JavaFX & SWT 13
M JavaFX rotieren eines Kreises mit konstanter Geschwindigkeit AWT, Swing, JavaFX & SWT 1
K JavaFX Allgemeine Fragen zu dem Aufbau eines Programms hinsichtlich der Klassen AWT, Swing, JavaFX & SWT 1
M JavaFX Auf ein UI Elemement eines anderen Controllers zugreifen AWT, Swing, JavaFX & SWT 0
Tronert JavaFX Linienstärke eines Separators ändern? AWT, Swing, JavaFX & SWT 3
N JavaFX Group: Gezieltes entfernen eines Objects (Rectangle) AWT, Swing, JavaFX & SWT 0
J Ziehen eines Buttons im JPanel AWT, Swing, JavaFX & SWT 2
J Drag and Drop eines Buttons AWT, Swing, JavaFX & SWT 0
M NullPointerException bei Übergabe eines RadioButtons AWT, Swing, JavaFX & SWT 11
DaCrazyJavaExpert Swing Extern den Text eines nicht fetsgelegten Buttons bekommen. AWT, Swing, JavaFX & SWT 12
J JavaFX Rectangle innerhalb eines Rectangle oder Panes positionieren? AWT, Swing, JavaFX & SWT 1
C JavaFX Inhalt eines SplitPane's durch Menü-Auswahl ändern? AWT, Swing, JavaFX & SWT 13
J linken Bildausschnitt eines BufferedImage abschneiden AWT, Swing, JavaFX & SWT 4
J bestimmten Bereich eines JPanels drucken AWT, Swing, JavaFX & SWT 2
D LookAndFeel Überschreiben eines UIDelegate AWT, Swing, JavaFX & SWT 0
T Java FX Probleme beim befüllen eines Tableviews AWT, Swing, JavaFX & SWT 5
C Zeichen eines 6 -Eckes AWT, Swing, JavaFX & SWT 1
U JavaFX Wechsel der Scene nach betätigen eines Button AWT, Swing, JavaFX & SWT 2
F Screenshot eines JPanel AWT, Swing, JavaFX & SWT 3
S JavaFX TreeItem: Icon am Ende eines Eintrags anhängen AWT, Swing, JavaFX & SWT 2
D TAB Taste innerhalb eines JSpinner AWT, Swing, JavaFX & SWT 2
R Update eines Labels bei Methodenaufruf einer anderen Klasse AWT, Swing, JavaFX & SWT 9
F Swing Spaltenbreite einer Column eines JTable auslesen AWT, Swing, JavaFX & SWT 5
D Swing Komponenten Anordnung eines Panels in Verbindung eines weiteren Panels AWT, Swing, JavaFX & SWT 9
F Swing Rotation eines Bildes mit beliebigen Koordinaten um den Mittelpunkt AWT, Swing, JavaFX & SWT 3
Cromewell JavaFX Nur bestimmten Teil eines Canvas rendern und anzeigen AWT, Swing, JavaFX & SWT 2
Z Swing Variable eines Objekt aus Hashmap in JList anzeigen AWT, Swing, JavaFX & SWT 1
D Frame beim starten eines anderen Frames schließen AWT, Swing, JavaFX & SWT 2
R Hilfe beim ändern des Hintergrundes eines JFrames AWT, Swing, JavaFX & SWT 9
T Durch klicken eines Buttons Klasse wechseln AWT, Swing, JavaFX & SWT 2
E Swing Copy und Paste eines einzelnen Knoten aus einem JTree AWT, Swing, JavaFX & SWT 1
J Swing Vertikales Zeichnen eines Strings mit Java2D AWT, Swing, JavaFX & SWT 1
7 JavaFX Problem beim Zeichnen eines Dreiecks in einem GUI AWT, Swing, JavaFX & SWT 6
V JavaFX Teile eines Images Transparent machen AWT, Swing, JavaFX & SWT 4
I JavaFX Langes drücken eines Buttons AWT, Swing, JavaFX & SWT 4
B Swing Wie Witdh und Height eines GuiElements bekommen AWT, Swing, JavaFX & SWT 5
L Swing Teile eines JPanel in eigene Klasse auslagern AWT, Swing, JavaFX & SWT 3
M Swing JPanel innerhalb eines Frames verschieben AWT, Swing, JavaFX & SWT 3
J JavaFX Zugriff auf FXML-Variablen eines anderen Controllers AWT, Swing, JavaFX & SWT 2
K Swing Inhalt eines JPanels lesen AWT, Swing, JavaFX & SWT 3
T Nur bestimmte Bereiche eines Fotos bearbeiten AWT, Swing, JavaFX & SWT 0
J Swing Erstellung eines User Interface AWT, Swing, JavaFX & SWT 2
S JavaFX Teil eines Bildes ausschneiden / als neues Bild nutzen AWT, Swing, JavaFX & SWT 8
O Swing Aufbau eines JFrames AWT, Swing, JavaFX & SWT 2
A JavaFX Hilfe beim Design eines Quiz AWT, Swing, JavaFX & SWT 2
F Instanzierung einer inneren Klasse in Klasse eines anderen Packets AWT, Swing, JavaFX & SWT 3
A befüllen eines JTables mittels Methode AWT, Swing, JavaFX & SWT 10
javampir Swing Wanderung eines JFrames AWT, Swing, JavaFX & SWT 7
J Anfänger GUI Problem bei der Ausführung eines sehr einfachen Programms AWT, Swing, JavaFX & SWT 2
G Swing ComboBox: Auswahl eines Items der Liste durch Eingabe eines Buchstabens AWT, Swing, JavaFX & SWT 3
S Swing Nur den sichtbaren Bereich eines TextPane mit Inhalt darstellem AWT, Swing, JavaFX & SWT 0
I Erstellung eines kleinen Programmes AWT, Swing, JavaFX & SWT 8
H Position eines JLabel in einem JPanel AWT, Swing, JavaFX & SWT 2
J 2D-Grafik Windows Blue-Screen nach anzeigen eines Bildes in Java AWT, Swing, JavaFX & SWT 10
T Swing Einzelne Teile eines Textes färben? AWT, Swing, JavaFX & SWT 10
H Swing Probleme beim erstellen eines neuen Objektes durch einen Button AWT, Swing, JavaFX & SWT 10
HaukeG JavaFX JavaFX Resize und DragAndDrop eines Pane AWT, Swing, JavaFX & SWT 4
D 2D-Grafik Inhalt eines Graphics in anderes Graphics zeichnen.... AWT, Swing, JavaFX & SWT 3
J Denkfehler bei Aktualisierung eines GUI AWT, Swing, JavaFX & SWT 4
J Logikfehler im erstellen eines GUI AWT, Swing, JavaFX & SWT 3
F JTabbedPane mit Button zum Hinzufügen eines neuen Tabs AWT, Swing, JavaFX & SWT 6
B Event Handling Mausbewegung auch außerhalb eines JFrames registrieren AWT, Swing, JavaFX & SWT 2
U Swing Beim Bedienen eines Buttons JFrame schließen AWT, Swing, JavaFX & SWT 2
A Fehler bei erstellen eines JTextFields AWT, Swing, JavaFX & SWT 2
S Bestimmten Bereich eines Bildes im JFrame mit Scrollpane anzeigen AWT, Swing, JavaFX & SWT 0
C AWT die X koordinate eines Rectangles herrausfinden AWT, Swing, JavaFX & SWT 14
G 2D-Grafik Umrandung eines Winkels (drawArc(..)) AWT, Swing, JavaFX & SWT 4
V Ende eines Frames abwarten AWT, Swing, JavaFX & SWT 7
T hallo, habe ein Problem mit dem pro. eines Threads AWT, Swing, JavaFX & SWT 4
S Swing Auf Änderungen eines Models in der View einer JTable reagieren AWT, Swing, JavaFX & SWT 1
U Größe eines Button im Menü ändern AWT, Swing, JavaFX & SWT 1
B Größer-/Kleinerziehen eines JFrames/JPanels erkennen AWT, Swing, JavaFX & SWT 2

Ähnliche Java Themen

Neue Themen


Oben