Konsolenspiel mit Threads



  • Man kann den Quelltext zwar kompillieren nur kommen dann CPU-Fehler... 😞
    Ich möchte derzeit nur dass das Schiff "/\" sich bewegen kann während es schießt...

    Habt ihr ein paar Tipps bzw. Vorschläge?

    Hier der Code:

    #include <conio.h>
    #include <iostream.h>
    #include <stdio.h>
    #include <stdlib.h>
    #include <process.h>
    void schuss(void* pParams);
    
    int schus,x,y;
    void main()
    {char steuerung;
     schus=0,x=40,y=25;
     gotoxy(40,25);
     cout<<"/\\";
    	for(;;)
            {
             steuerung=getche();
             if(steuerung=='a') x--;
             if(steuerung=='d') x++;
             if(steuerung=='w') schus=1;
             if(x<=2) x=2;
             if(x>=78) x=78;
             if(schus==1) _beginthread(schuss,0,NULL);
             if(schus==0) _endthread();
             delline();
    	     gotoxy(x,y);
             cout<<"/\\";
            }
    }
    
    void schuss(void* pParams)
        {int horizontal,vertikal;
        horizontal=x;
        vertikal=23;
        for(;vertikal>=0;)
            {Sleep(150);
            delline();
            gotoxy(horizontal,vertikal);
            cout<<"|";
            vertikal--;
            }
            schus=0;
        }
    

    Außerdem kann ich nicht mehr nach links oder rechts.



  • erm..

    Wenn schuss bei Spielbeginn 0 is wird versucht ein thread zu beenden.. ?
    Auch, wenn kein Thread dafür geöffnet is?

    kenne die befehle nich genau aber das erscheint mir bissl seltsam...



  • wie wärs, ein konsolenspiel ohne threads zu machen?

    sowas hier funktioniert im grunde auch... teste mal.. deine applikation läuft weiter, aber du kannst eingreifen.
    für ein spiel ist eine leichte verzögerung sicher interessant.

    #include <conio.h>
    #include <stdio.h>
    #include <windows.h>
    
    int main(){
    	unsigned char chr='e';
    
       do{		   
    	   do{
    			printf("|");
    			Sleep (200);          
    			printf("/");
    			Sleep (200);         
    			printf("-");
    			Sleep (200);        
    			printf("\\");
    			Sleep (200);    				
    	   }while (!kbhit());
    
    	   chr=getch();
    
    	   if ((chr==224) || (chr==0)){
    
    		   chr=getch();
    
               switch(chr){
               case 75:
                    printf("<-GETROFFEN");
                    break;
               case 77:
                    printf("->GETROFFEN");
                    break;
    		   }
    		}
       }while (true);
    }
    


  • Thx ihr habt mir sehr geholfen... 👍 😋



  • ich hab auch eine frage und finde die past hier sehr gut rein
    nämlich

    #include <conio.h>
    #include <stdio.h>
    #include <windows.h>
    #include <iostream.h>
    
    int main()
    {unsigned char chr='e';
     int raumschiffx=40,raumschiffy=25,feind=1,feindx=40,feindy=1,horizontal,vertikal;
    
       do
       {
           do
           {Sleep(150);
                if((feind==0)&&(feindx>1))
                    feindx--;
                if((feind==1)&&(feindx<80))
                    feindx++;
                if(feindx==1)
                    feind=1;
                if(feindx==79)
                    feind=0;
                gotoxy(1,1);
                clreol();
                gotoxy(feindx,feindy);
                cout<<"\\/";
    
           }while (!kbhit());
    
           chr=getch();
    
           if ((chr=='a') || (chr=='d') || (chr=='w'))
           {
    
            switch(chr)
            {case 'a':
                    if(chr=='a')
                    raumschiffx--;
                    if(raumschiffx<=2) raumschiffx=2;
                    gotoxy(1,25);
                    clreol();
    	            gotoxy(raumschiffx,raumschiffy);
                    cout<<"/\\";
                    break;
             case 'd':
                    if(chr=='d') raumschiffx++;
                    if(raumschiffx>=78) raumschiffx=78;
                    gotoxy(1,25);
                    clreol();
    	            gotoxy(raumschiffx,raumschiffy);
                    cout<<"/\\";
                    break;
             case 'w':
                    horizontal=raumschiffx;
                    vertikal=23;
                    for(;vertikal>=0;)
                    {Sleep(150);
                    delline();
                    gotoxy(horizontal,vertikal);
                    cout<<"|";
                    vertikal--;
                    }
             }
            }
        }while (true);
    }
    

    der schuss (wenn man w drückt) geht nicht und ich weiss ned wie ich das machen soll das er das ganze prog. weiter macht und der schuss läuft gleichzeitig



  • also @Pen.. und @seb..
    überlegt mal, wenn der Schuss ausgeloest ist bzw. die Taste 'w' gedrueckt
    wurde und euer Geschoss auf dem Weg ist, wie soll euer Programm während dieser
    Zeit die Tastatur abfragen? Idee: Geschoss eine Zeile weiter -> Tastaturabfrage

    p.s. für Tester mit anderen Compilern Sleep != sleep, wenn ich mich recht
    erinnere bei einem Compiler ms beim anderen s. Beim 2.Fall kann man bei den
    hier gelisteten Sourcen schon mal Kaffee trinken gehen :).

    MfG f.-th.



  • p.s. für Tester mit anderen Compilern Sleep != sleep, wenn ich mich recht
    erinnere bei einem Compiler ms beim anderen s.

    Sollte bei jedem Compiler ein Unterschied sein, siehe dazu auch:
    sleep(): http://www.c-plusplus.net/forum/viewtopic-var-t-is-39314.html [Diese Funktion ist für DOS]
    Sleep(): http://www.c-plusplus.net/forum/viewtopic-var-t-is-86406.html [Diese Funktion ist für Windows]

    MfG SideWinder


Anmelden zum Antworten