Hi.
Ich als Java-Einsteiger hab mir gleich n großes Projekt vorgenommen, an dem ich etwas tüfteln kann, um mich in die Programmiersprache Java einzuarbeiten.
Mein Ziel ist ein Ping-Pong-Spiel.
Wenns fertig is, solls nen Start-Button, nen Punktezähler und natürlich das Ping-Pong an sich haben.
Im Moment bin ich erst soweit, dass eine Spielfläche geschaffen wird (fillRect ) und darin einer der 'Blocker' ist.
Dieser lässt sich leider nich bewegen
Zwischenziel ist also, den einen Blocker mit den Pfeiltasten bewegen zu können!
Hier ein Foto vom aktuellen Stand:
Erklärung des Listings:
Zuerst werden Variablen und der Hintergrund erstellt und mit der Funktion "blocker()" der erste Blocker, welcher leider anscheinend wegen einem Fehler nicht bewegbar ist, eingefügt.
Darauf folgt der KeyListener, der die Pfeiltasten hoch und runter überwacht und bei Drücken einen Thread startet, der zur bewegung führen soll, bei Loslassen diesen Thread wieder beendet.
Im Thread wird jeweils mit der blocker(); -Funktion das schwarze Rechteck, welches den Blocker darstellt erst mit gelb überzeichnet(Farbe des Hintergrundes) und dann an neuer Position mit schwarz neu gezeichnet.
Im folgenden das Listing:
import java.applet.Applet;
import java.awt.*;
import java.awt.event.*;
public class Mehrere extends Applet implements KeyListener, Runnable{
Label L1=new Label("Position");
Thread move_ball=new Thread();
Thread move_blocker=new Thread();
Thread moveup=null;
Thread movedown=null;
int a=1;
public void init(){
add(L1);//L1.setLocation(50, 50);
L1.setBackground(Color.yellow);
this.setSize(500, 350);
this.addKeyListener(this);
}
public void paint(Graphics s){
s.setColor(Color.yellow);
s.fillRect(25, 25, 450, 300);
blocker(Color.black, 150);
}
void blocker(Color col, int pos){
Graphics s1;
s1=getGraphics();
s1.setColor(col);
s1.fillRect(450, pos, 10, 50);
}
public void KeyPressed(KeyEvent e){
if(e.getKeyCode()==KeyEvent.VK_UP){
if (moveup==null){L1.setText("Up");
moveup=new Thread(); a=-1; moveup.start();
}
}
if(e.getKeyCode()==KeyEvent.VK_DOWN){
if (movedown==null){L1.setText("Down");
movedown=new Thread(); a=1; movedown.start();
}
}
}
public void KeyReleased(KeyEvent ex){
if(ex.getKeyCode()==KeyEvent.VK_UP){L1.setText("xUp");
moveup.stop();
moveup=null;
}
if(ex.getKeyCode()==KeyEvent.VK_DOWN){L1.setText("xDown");
movedown.stop();
movedown=null;
}
}
public void run(){
int posblocker;
while ((moveup!=null) ^ (movedown!=null)){
try{
if((posblocker>25)&(posblocker<275)){
blocker(Color.yellow, posblocker);
posblocker=posblocker+a;
Thread.sleep(10);
blocker(Color.black, posblocker);
L1.setText(""+posblocker);
}
} catch(Exception e){}
}
}
}
Ich weiß, dass es Zeitaufwendig ist, das nun alles durchzuschauen. Es wäre aber trotzdem sehr nett, wenn sich jemand die Mühe machen könnte.
Nützlich für mich wäre, wenn mir jemand erklärt, was der Fehler ist, dass nichts passiert bei Tastendruck sowie evtl. Hinweise an manchen Stellen um meinen Stil zu verbessern.
Zudem möchte ich gern den Thread noch ausgliedern, also in eine eigene Klasse setzen, da ich ja noch mehr brauchen werde (für den Ball und die KI). Ich weiß jedoch nicht genau, wie ich das anstelle.
Vielen Dank an alle, die sich die Zeit genommen haben dies alles zu lesen!
Ich freue mich auf eure Antworten.
Fragen dazu nehm ich gern entgegen. Wenn ihr wollt kann ich das Listing auch in anderer Form irgendwie online stellen..oder die *.java und *.class Dateien hochladen.
LG
Tobi