EInfaches Komet-spiel



  • Hallo Leute,

    wollte mal ein einfaches game proggen (bin ja noch nich so der pro)

    Sowas wie komet dachte ich, hab mal damit angefangen, und ein problem:

    void Weapon(int x,int y);
    int main(int argc, char* argv[])
    {
     int x=35;
     int y=25;
     gotoxy(x,y);    //Schiff positionieren
     cout<<"_/\\_";
    
    char c;
     while(c=getch())
     {
      switch(c)
      {
       //case 'w': clrscr();--y;gotoxy(x,y);cout<<"_/\\_";break;
       case 'a': clrscr();--x;gotoxy(x,y);cout<<"_/\\_";break;      //nach links
       //case 's': clrscr();++y;gotoxy(x,y);cout<<"_/\\_";break;
       case 'd': clrscr();++x;gotoxy(x,y);cout<<"_/\\_";break;      //nach rechts
       case 'e': Weapon(x,y);break;    //FEUER
       default: break;
      }
     }
    
    getch();       return 0;
    }
    
    void Weapon(int x,int y)
    {
     int tempy = y;
     int tempx = x;
     tempx+=1;
     for(int i=0;i<25;i++)
     {
     --tempy;
     clrscr();
     gotoxy(x,y);
     cout<<"_/\\_";
     gotoxy(tempx,tempy);
    
     if(i==24)
      {
       clrscr();
       gotoxy(x,y);
       cout<<"_/\\_";
       break;
      }
    
     cout<<"|";
     Sleep(100);
     }
    }
    //---------------------------------------------------------------------------
    

    während die waffe feuert, kann ich das schiff ja nich bewegen (wegen Sleep), gibt es da eine andere möglichkeit?



  • Dieser Thread wurde von Moderator/in HumeSikkins aus dem Forum C++ in das Forum DOS und Win32-Konsole verschoben.

    Im Zweifelsfall bitte auch folgende Hinweise beachten:
    C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?

    Dieses Posting wurde automatisch erzeugt.



  • lass das sleep weg und frag am Beginn der Weapon()-Funktion ab, wie lange der letzte Schuß her ist 😉

    #include <ctime>
    
    void Weapon(int x,int y)
    {
      static time_t ftime=0;
      time_t atime=time(NULL);
      if(difftime(atime,ftime)</*Wartezeit in Sekunden*/) return;
    
      //Schießen
    
      ftime=atime;
      return;
    }
    


  • Das ist nicht so einfach...
    Wenn Du immer pollen willst, kannst Du _kbhit verwenden und das feueren via genügend grosse Änderung in GetTickCount machen, oder Du machst alles ereignisgesteuert (overlapped I/O).



  • oh, damit kenn ich mich ja nicht so aus....CStoll, deine variante versteh ich nich ganz!

    Es geht nicht das ich mehrmals schieße, sondern das das "geschoss" sich nach oben bewegt, und ich das schiff trotzdem noch bewegen kann!!!



  • Achso, dann vergiss meine Bemerkung 😉 In dem Fall müßtst du innerhalb der Schleife nochmal abfragen, ob sich das Schiff bewegen soll:

    if(kbhit)
    {
      char c=getch;
      switch(c){...}
    }
    sleep(100);
    

    Alternativ kannst du das Schießen auch zerlegen in zwei Teile - beim Aufruf von Weapon() wird der Schuß nur losgeschickt, beim Neuzeichnen des Spielfelds rückt das Projekil weiter.



  • kannst du mir mal das kbhit erklären?
    soll ich nicht...

    while(c=getch())
    

    ...nehmen??



  • kbhit() prüft, ob du eine Taste gedrückt hast. Wenn ja, kümmerst du dich um deren Verarbeitung, wenn nein, machst du ganz normal weiter.
    "while(c=getch())" würde in jedem Durchlauf auf einen Tastendruck warten, bevor es weiterarbeitet (sprich: Dein Geschoß ruckt erst weiter, WENN du das Schiff bewegst).


Anmelden zum Antworten