2016-04-12 4 views
0

Ich habe bereits einen beweglichen Korb und eine Kollisionserkennung programmiert, aber es fällt mir schwer, meine Eier einzeln zu drucken. Ich bin neu, objektorientierte Programmierung, und ich finde es schwierig, Klassen im Gegensatz zu normalen Funktionen zu manipulieren. Was ich gerne geschehen würde, ist, dass meine Eier eins nach dem anderen fallen, anstatt sie ganz fallen zu lassen. Side Note: Ich möchte einen Puffer zwischen den Ei-Spawns hinzufügen. Wie mache ich das möglich?Wie erstelle ich fallende Eier für mein Ei-Catcher-Spiel? Neu bei der objektorientierten Programmierung C++

#define RIGHT 0 
#define LEFT 1 
#define number 10 
int isalive = 0; 
int score = 0; 
int lives = 0; 
int direction = 1; 

class GameObject 
{ 

public: 
    int x, y; 
    char symbol; 
    virtual void draw() = 0; 
}; 
class basket : public GameObject 
{ 

public: 
    basket(char symbol, int x, int y) 
    { 
     this->symbol = symbol; 
     this->x = x; 
     this->y = y; 
    } 
    void draw() 
    { 
     for (int z = 0; z < 5; z++) 
     { 
      gotoxy(x + z, y); 
      cout << symbol; 
     } 
    } 
    void movement() 
    { 
     if (_kbhit()) 
     { 
      char ch = _getch(); 
      switch (ch) 
      { 
      case 'a': 
       direction = RIGHT; 
       break; 
      case 'd': 
       direction = LEFT; 
       break; 
      } 
     } 

    } 
    void bounce() 
    { 
     switch (direction) 
     { 
     case RIGHT: x--; 
      break; 
     case LEFT: x++; 
      break; 
     } 
     if (x >= 75) 
     { 
      direction = RIGHT; 
     } 
     if (x <= 0) 
     { 
      direction = LEFT; 
     } 
    } 
}; 

class egg : public GameObject 
{ 
private: 

public:  
    int isalive; 
    egg(char symbol,int y) 
    { 
     this->symbol = symbol; 
     this->y = y; 

    } 
    ~egg(){} 
    void movement() 
    { 
     y++; 
     if (y > 23) 
     { 
     /*y = 0;*/ 
     lives = lives +1; 
     isalive = 0; 
    } 

} 
    void draw() 
    { 

     { 
     gotoxy(x, y); 
     cout << symbol; 
     gotoxy(0,2); 
     cout<<"Broken Eggs:"<<lives; 
     gotoxy(40,2); 
     cout<<"Score:"<<score; 
     } 
    } 
    void checkcollison(basket *basket) 
    { 

    if (x == basket->x && y == basket->y) 
     { 
      y = 0; 
      score += 50; 
      isalive = 0; 

     } 
    } 

}; 


int main() 
{ 

    basket *f[4]; 
    egg *eggs[number]; 
     for (int z = 0; z < 4; z++) 
     { 
     f[z]= new basket('X', 38+z, 23); 

     } 
     for(int y = 0; y<number; y++) 
     { 
      eggs[y] = new egg('0',0); 
     } 

      while (true) 
     { 
      clrscr(); 

      for (int z = 0; z < number;z++) 
      { 
       if (eggs[z]->isalive ==0) 
       { 
        eggs[z]->x = rand() %40+20; 
        eggs[z]->isalive = 1; 
        } 
       if(eggs[z]->isalive !=0) 
       { 
        eggs[z]->draw(); 
        eggs[z]->movement(); 
       } 

      } 

      for (int z = 0; z != 4; z++) 
      { 
       f[z]-> draw(); 
       if(kbhit())f[z]->movement(); 
       f[z]->bounce(); 
      } 

     Sleep(100); 
     } 
     return 0; 
} 

Antwort

0

Sie können Ihre for-Schleife ausbricht, sobald Sie 1 Ei bewegt haben. In diesem Fall, sobald ein Ei bewegt wurde, schlafen Sie für 100ms.

z.

for (int z = 0; z < number;z++) 
{ 
    if (eggs[z]->isalive ==0) 
    { 
     eggs[z]->x = rand() %40+20; 
     eggs[z]->isalive = 1; 
    } 
    if(eggs[z]->isalive !=0) 
    { 
     eggs[z]->draw(); 
     eggs[z]->movement(); 
     break; 
    } 
} 
+0

Vielen Dank, wenn die in Tandem mit dem Code verwendete oben nahtlos funktioniert, aber wenn ich es implementiere in meinem ursprünglichen Code, dh eine, die einen Korb hin und her geht, ein Tor und Leben prallt, es scheint völlig durcheinander zu sein. Ich weiß, dass dies viel verlangt, aber würde es Ihnen helfen, mir zu helfen, wenn ich meinen vollständigen Code gepostet hätte? Ich habe mich davor gescheut, da dies für die erfahreneren Programmierer Kopfschmerzen bereiten könnte. – Clueless

+0

Post es, ich werde es mir ansehen. (wahrscheinlich morgen) –

Verwandte Themen