Hey Leute, bin gerade dabei Pong zu programmieren.
Ich weiß nicht ob meine Frage hier richtig ist, oder unter "Allgemeine Java-Themen" aber ich denk mal, das geht so
Ich beschäftige mich seid gestern mit openGL sodass ich da kaum Erfahrung habe.
Aber ich finde den Fehler einfach nicht.
Das Programm läuft ca 30sekunden und stürzt danach ab. Ich weiß nicht warum.
Vlt könnt ihr mir ja helfen
Ich hab keine Ahnung, wo der StackOverFlow Error her kommt.
Tipp:
Steuerung mit W A S D und Pause ist p und weiter ist o.
Wenn ihr nur einseitig spielen wollt, dann drückt h.
Um dann wieder beide Seiten zu steuern, einfach j drücken.
Escape ist genauso wie das rote X für's direkte beenden.
Wenn man verloren hat, kann man mit o eine neue Runde beginnen oder halt normal beenden mit Escape bzw. dem roten X
Und es funktioniert die ersten 30 Sekunden eigentlich auch super. Aber danach ist schluss :/
Hoffe ihr findet den Fehler in dem Programmchaos , ich bin solangsam nämlich ratlos :rtfm:
Gruß BK
PS: Die score Anzeige fehlt noch, aber das mache ich noch
Irgendwie ist das Display durch Display.update(); überlastet glaube ich, aber in anderen Programmen funktioniert es ja eigentlich auch ohne Probleme :/
Ich weiß nicht ob meine Frage hier richtig ist, oder unter "Allgemeine Java-Themen" aber ich denk mal, das geht so
Ich beschäftige mich seid gestern mit openGL sodass ich da kaum Erfahrung habe.
Aber ich finde den Fehler einfach nicht.
Das Programm läuft ca 30sekunden und stürzt danach ab. Ich weiß nicht warum.
Vlt könnt ihr mir ja helfen
Ich hab keine Ahnung, wo der StackOverFlow Error her kommt.
Tipp:
Steuerung mit W A S D und Pause ist p und weiter ist o.
Wenn ihr nur einseitig spielen wollt, dann drückt h.
Um dann wieder beide Seiten zu steuern, einfach j drücken.
Escape ist genauso wie das rote X für's direkte beenden.
Wenn man verloren hat, kann man mit o eine neue Runde beginnen oder halt normal beenden mit Escape bzw. dem roten X
Und es funktioniert die ersten 30 Sekunden eigentlich auch super. Aber danach ist schluss :/
Hoffe ihr findet den Fehler in dem Programmchaos , ich bin solangsam nämlich ratlos :rtfm:
Java:
import org.lwjgl.LWJGLException;
import org.lwjgl.input.Keyboard;
import org.lwjgl.opengl.Display;
import org.lwjgl.opengl.DisplayMode;
import static org.lwjgl.opengl.GL11.*;
public class PongKeyboard{
boolean pause = false;
int richtungv = (Math.random()<0.5)?0:1; // 0 = runter // 1 = hoch // 2+ = stop //
int richtungh = (Math.random()<0.5)?0:1; // 0 = rechts // 1 = links // 2+ = stop //
int score = 0;
int posx = 750;
int posy = 400;
double lpos = 400;
int lposAus = 400;
double rpos = 400;
int rposAus = 400;
int pongLaenge;
int pongZwischen = 50; //PongLänge hier einstellen, NICHT bei pongLaenge!!! Sondern hier bei pongZwischen!!!
boolean einseitig = false;
int speed = 3;
//////MAIN
public static void main(String[] args){
new PongKeyboard();
}
//////KONSTRUKTOR
public PongKeyboard(){
try {
Display.setDisplayMode(new DisplayMode(1500, 800));
Display.setTitle("Pong");
Display.create();
Keyboard.create();
}catch(LWJGLException e) {
e.printStackTrace();
Display.destroy();
System.exit(1);
}
glMatrixMode(GL_PROJECTION);
glOrtho(0, 1500, 800, 0, 1, -1);
glMatrixMode(GL_MODELVIEW);
durchführung();
}
//////INIT
public void init(){
pause = false;
richtungv = (Math.random()<0.5)?0:1; // 0 = runter // 1 = hoch // 2+ = stop //
richtungh = (Math.random()<0.5)?0:1; // 0 = rechts // 1 = links // 2+ = stop //
score = 0;
posx = 750;
posy = 400;
pongZwischen = 50;
durchführung();
}
//////DURCHFÜHRUNG
public void durchführung(){
while(!pause){
if(Display.isCloseRequested()){
if(score == 1){
System.err.println("Sie haben " + score + " Punkt erreicht!");
}else{
System.err.println("Sie haben " + score + " Punkte erreicht!");
}
Display.destroy();
System.exit(0);
}
if(Keyboard.isKeyDown(Keyboard.KEY_ESCAPE)){
beenden();
}
if(Keyboard.isKeyDown(Keyboard.KEY_P)){
pause = true;
pause();
}
pongLaenge = pongZwischen;
pongLaenge = pongLaenge - score;
if(pongLaenge < 5){
pongLaenge = 5;
}
if(Keyboard.isKeyDown(Keyboard.KEY_W)){
lpos -= 1 * speed;
}
if(Keyboard.isKeyDown(Keyboard.KEY_S)){
lpos += 1 * speed;
}
if(Keyboard.isKeyDown(Keyboard.KEY_A)){
rpos -= 1 * speed;
}
if(Keyboard.isKeyDown(Keyboard.KEY_D)){
rpos += 1 * speed;
}
lposAus = (int) lpos;
rposAus = (int) rpos;
if(lposAus <= 0){
lpos = 1;
lposAus = 1;
}else if(lposAus >= (795 - pongLaenge)){
lpos = (794 - pongLaenge);
lposAus = (794 - pongLaenge);
}
if(rposAus <= 0){
rpos = 1;
rposAus = 1;
}else if(rposAus >= (795 - pongLaenge)){
rpos = (794 - pongLaenge);
rposAus = (int) rpos;
}
if(richtungv == 0){
posy = posy + 1 * speed;
}else if(richtungv == 1){
posy = posy - 1 * speed;
}
if(richtungh == 0){
posx = posx + 1 * speed;
}else if(richtungh == 1){
posx = posx - 1 * speed;
}
if(Keyboard.isKeyDown(Keyboard.KEY_H)){
einseitig = true;
}if(Keyboard.isKeyDown(Keyboard.KEY_J)){
einseitig = false;
}if(einseitig){
rpos = posy - (0.5 * pongLaenge);
}
richtungAendern();
paint();
}
}
//////RICHTUNG
public void richtungAendern(){
if(posy >= 795){
richtungv = 1;
}else if(posy <= 0){
richtungv = 0;
}
else if(posx <= 10 && ((posy-lposAus) < pongLaenge && (posy-lposAus) > 0)){
richtungh = 0;
score++;
}else if(posx <= 10 && !((posy-lposAus) < pongLaenge && (posy-lposAus) > 0)){
richtungh = 2;
richtungv = 2;
beenden();
}
else if(posx >= 1490 && ((posy-rposAus) < pongLaenge && (posy-rposAus) > 0)){
richtungh = 1;
if(!einseitig){
score++;
}
}else if(posx >= 1490 && !((posy-rposAus) < pongLaenge && (posy-rposAus) > 0)){
richtungh = 2;
richtungv = 2;
beenden();
}
}
//////PAUSE
public void pause(){
richtungv += 2;
richtungh += 2;
while(pause){
Display.update();
pause = !Keyboard.isKeyDown(Keyboard.KEY_O);
if(Keyboard.isKeyDown(Keyboard.KEY_ESCAPE) || Display.isCloseRequested()){
beenden();
}
}
richtungv -= 2;
richtungh -= 2;
pause = false;
return;
}
//////BEENDEN
public void beenden(){
if(score == 1){
System.err.println("Sie haben " + score + " Punkt erreicht!");
}else{
System.err.println("Sie haben " + score + " Punkte erreicht!");
}
pause = true;
while(pause){
Display.update();
if(Keyboard.isKeyDown(Keyboard.KEY_ESCAPE) || Display.isCloseRequested()){
Display.destroy();
System.exit(0);
}
if(Keyboard.isKeyDown(Keyboard.KEY_O)){
pause = false;
init();
}
}
}
//////PAINT
public void paint(){
glClear(GL_COLOR_BUFFER_BIT);
glBegin(GL_QUADS); //LINKER PONG
glColor3d(255, 255, 0);
glVertex2i(5, lposAus);
glVertex2i(10, lposAus);
glVertex2i(10, lposAus+pongLaenge);
glVertex2i(5, lposAus+pongLaenge);
glEnd();
glBegin(GL_QUADS); //RECHTER PONG
glColor3d(255, 255, 0);
glVertex2i(1490, rposAus);
glVertex2i(1495, rposAus);
glVertex2i(1495, rposAus+pongLaenge);
glVertex2i(1490, rposAus+pongLaenge);
glEnd();
glBegin(GL_QUADS); //BALL
glColor3d(255, 255, 255);
glVertex2i(posx, posy);
glVertex2i(posx+5, posy);
glVertex2i(posx+5, posy+5);
glVertex2i(posx, posy+5);
glEnd();
// TODO: SCORE ANZEIGE NOCH NICHT HIER EINGEFÜGT!!!
Display.update();
Display.sync(60);
durchführung();
}
}
Gruß BK
PS: Die score Anzeige fehlt noch, aber das mache ich noch
Irgendwie ist das Display durch Display.update(); überlastet glaube ich, aber in anderen Programmen funktioniert es ja eigentlich auch ohne Probleme :/
Zuletzt bearbeitet: