Brauche mal Hilfe bei meinem Source
-
Hallo,
also ich hab für nen Lehrgang die Aufgabe einen Pongklon in C zu entwickeln. Und ich komm grad nicht so richtig weiter.
Hier mal das was ich bisher gemacht habe:
#include <graphics.h> /*Nullpunkt des Fensters befindet sich in der linken oberen Ecke*/ const int WIDTH = 800; //Fensterbreite const int HEIGHT= 600; //Fensterhöhe const int PWIDTH =5; //Schlägerbreite const int PHEIGHT=100; //Schlägerhöhe int xp = 0; //Startpunkt des Schlägers (in x Richtung) int yp = (HEIGHT) /2; //Startpunkt des Schlägers in y-Richtung (untere Kante) int close = 0; //Variable für das Beenden des Programms int key =0; //Variable für die Steuerung int xradius = 5; //Radius des Balles in x-Richtung int yradius = xradius; //Radius des Balles in y-Richtung int x=(PWIDTH+xradius); //Startpunkt des Balles int y = (HEIGHT-PHEIGHT) /2; //Startpunkt des Balles int vx=7; //Bewegungsvektor in x-Richtung int vy=3; //Bewegungsvektor in y-Richtung int i=0; //für die Endlosschleife int yp2= (HEIGHT)/2; //Startpunkt des Computerschlägers in y-Richtung int out =0; void game();//Prototyp von game /*Funktion zum Zeichnen der einzelnen Objekte*/ void draw() { cleardevice(); line(WIDTH/2,0,WIDTH/2,HEIGHT); fillellipse(x,y,xradius,yradius); bar(xp,yp-PHEIGHT,xp+PWIDTH,yp); bar(WIDTH,yp2-PHEIGHT,WIDTH-PWIDTH,yp2); //bar(WIDTH,y-(PHEIGHT/2),WIDTH-PWIDTH,y); //bar(WIDTH,y,WIDTH-PWIDTH,y+(PHEIGHT/2)); delay(10); // line(WIDTH/2,0,WIDTH/2,HEIGHT); //delay(50); } /*Funktion für die Steuerung des Computergegners*/ void enemy() { if ( yp2 < (HEIGHT)) //oberer Spielfeldrand { if ( y > (((yp2-PHEIGHT/2)))) { yp2+=20; } } if (yp2 > PHEIGHT) //unterer Spielfeldrand { if ( y < (((yp2-PHEIGHT)/2 ))) { yp2-=20; } } } /*Funktion für die Steuerung des Spielers*/ void player() { key = getch(); switch(key) { case 'w': if (yp>PHEIGHT) {yp-=20;} break; case 's': if (yp<(HEIGHT)) {yp+=20;} break; case 'q': close = 1; break; } } /*Ballsteuerung*/ void ball() { while(!kbhit()&&out!=1) { /*Treffer des eigenen Paddels*/ if((x<=(PWIDTH/*-xradius*/)) && (y<=yp)&&(y>=(yp-PHEIGHT))) {vx= -vx;}//Umdrehen des Bewegungsvektors in die jeweilige Richtung else if(x<0) { out=1; //game(); //break; /*Hier soll rein, dass er das Spiel nochmal startet*/ } //else {printf("GAME OVER");} /*Treffer des gegnerischen Paddels*/ if(x>=(WIDTH-PWIDTH/*-xradius*/) && (y<=yp2)&&(y>=(yp2-PHEIGHT))) {vx= -vx;} else if (x>WIDTH) { out=1; //game(); //break; /*Hier soll auch rein, dass das Spiel nochmal neugestartet wird*/ } /*Treffer oben oder unten am Rand*/ if(y<=(xradius)) {vy=-vy;} if (y >= (HEIGHT-xradius)) {vy=-vy;} /*Definition der Bewegung*/ x+=vx; y+=vy; draw(); enemy(); } if (out==1) {getch(); game();} } /*Funktion zum Aufruf der Unterfunktionen*/ void game() { draw(); getch(); while (close ==0) { ball(); player(); } if (close==1) closegraph(); } int main(int argc, char *argv[]) { initwindow(WIDTH,HEIGHT,"PONG- The Clone"); line(WIDTH/2,0,WIDTH/2,HEIGHT); //Mittellinie game();//Aufruf von game und damit der Unterfunktionen return EXIT_SUCCESS; }
So nun mein Problem: wenn der Ball ins aus geht, dann soll das Spiel neu gestartet werden, bloß irgendwie fehlen mir dazu die Ideen, wie man das realisieren kann.
-
versteh ich richtig, das problem ist wenn der ball auf einer spielerseiten im tor ist?
deine werte hast du oben hardgecoded, z.b.
int xp = 0; //Startpunkt des Schlägers (in x Richtung)
du darfst weiterhin die declaration von xp oben lassen, aber die initialisierung all dieser werte kannst du in eine funktion stecken (z.b. Reset()).
von game aus, fragst du nun immer den returnvalue deiner "ball" funktion ab, die sollte dann 1 zurueckliefern wenn der ball getroffen hat und dann rufst du einfach dein reset auf.