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.


  • Mod

    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.


Anmelden zum Antworten