Brauche hilfe bei der umsetzung mit getch und kbhit



  • Hallo ich versuche ein Spiel zu schreiben ähnlich wie Space Invaders hab aber keine ahnung wie ich das umsetzen soll.Bin grad beim ersten Teil,kann mir jemand dabei helfen ,ich muss es hinkriegen das das Raumschiff sich direkt bei Tastendruck bewegt.
    Soll ungefähr so aussehen funktioniert aber nicht.

    danke

    #include<stdio.h>
    #include<conio.h>
    #include<windows.h>
    #include<conio2.h>

    using namespace std;

    void PlayerMdl();

    void gotoxy(int x,int y)
    {
    COORD cur={x,y};
    SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE),cur);
    }

    int main()
    {
    int horizontal,wagerecht;
    char taste;
    wagerecht=30;
    horizontal=21,9;

    if (kbhit())
    taste=getch();

    if(taste=='a')
    wagerecht=wagerecht-1;

    else if(taste=='d')
    wagerecht=wagerecht+1;

    else if(taste=='w')
    horizontal=horizontal-1;

    else if(taste=='s')
    horizontal=horizontal+1;

    void PlayerMdl();
    {
    gotoxy(wagerecht,horizontal);
    printf(" |/\\| ");
    gotoxy(wagerecht,horizontal+1);
    printf(" / \\ ");
    gotoxy(wagerecht,horizontal+2);
    printf("/____\\ ");
    }
    }

    getch();

    }



  • Dieser Thread wurde von Moderator/in Jochen Kalmbach aus dem Forum C++/CLI mit .NET 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.



  • Ich will das auch mal probieren mit einem Space-Invaders. Zu diesem Zweck habe ich jetzt deinen Code übernommen und den deshalb natürlich auch erstmal lauffähig gemacht:

    #include <windows.h>
    #include <iostream>
    #include <conio.h>
    
    void gotoxy(int x,int y){
    	COORD pos={x,y};
    	SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE),pos);
    }
    
    void draw_field(void){
    	gotoxy(0,0);std::cout<<(char)201;
    	for(int cnt=1;cnt<79;++cnt){
    		gotoxy(cnt,0); std::cout<<(char)205;
    	}
    	gotoxy(79,0);std::cout<<(char)187;
    
    	gotoxy(0,24); std::cout<<(char)200;
    	for(int cnt=1;cnt<79;++cnt){
    		gotoxy(cnt,24); std::cout<<(char)205;
    	}
    	gotoxy(79,24);std::cout<<(char)188;
    
    	for(int cnt=1;cnt<24;++cnt){
    		gotoxy(0,cnt); std::cout<<(char)186;
    		gotoxy(79,cnt); std::cout<<(char)186;
    	}
    
    	gotoxy(0,0);
    }
    
    int main(void){
    	int vertical=1,horizontal=1;
    	int key=0;
    
    	draw_field();
    
    	do{
    		if(_kbhit())
    			key=_getch();
    		else
    			key=0;
    
    		switch(key){
    			case 'a': //left
    				if(--horizontal<1)
    					horizontal=1;
    				break;
    			case 'd': //right
    				if(++horizontal>70)
    					horizontal=70;
    				break;
    			case 'w': //up
    				if(--vertical<1)
    					vertical=1;
    				break;
    			case 's': //down
    				if(++vertical>15)
    					vertical=15;
    				break;
    			case ' ': //shoot
    				//???
    				break;
    		}
    
    		gotoxy(horizontal,vertical);	  std::cout<<"         ";
    		gotoxy(horizontal,vertical+1);	std::cout<<"  |   |  ";
    		gotoxy(horizontal,vertical+2);	std::cout<<"  |   |  ";
    		gotoxy(horizontal,vertical+3);	std::cout<<" -+++++- ";
    		gotoxy(horizontal,vertical+4);	std::cout<<"  -+++-  ";
    		gotoxy(horizontal,vertical+5);	std::cout<<"   -+-   ";
    		gotoxy(horizontal,vertical+6);	std::cout<<" --+++-- ";
    		gotoxy(horizontal,vertical+7);	std::cout<<" -+++++- ";
    		gotoxy(horizontal,vertical+8);	std::cout<<"         ";
    	}while(key!=0x1b); //0x1b -> Escape
    }
    


  • Das ja mal ne geile Idee "Space Invader" in ner Konsole xD

    Das muss ich auch mal ausprobieren. Danke fuer die Idee 🙂

    Gruß Tobi.



  • Wird das ein SpaceInvaders Wettbewerb ?
    Ich mach mit.
    Wenn der Termin nicht zu kurzfristig wird.
    So bis ende November fertig sein wäre ok.



  • Jo bin dabei.
    Hab im mom auch noch net soviel Zeit 🙂

    Am besten wer fertig is, posted wieder hier in den Threa, oder macht nen neuen auf *g*

    Na dann gutes Gelingen .

    Gruß Tobi.



  • da bin ich dabei^^



  • @Master-Jimmy

    wie hast du es gschafft das sich das Raumschiff bewegt ohne system("cls") oder clscr() zu benutzen?



  • Slawa schrieb:

    @Master-Jimmy

    wie hast du es gschafft das sich das Raumschiff bewegt ohne system("cls") oder clscr() zu benutzen?

    Einen Rahmen aus Leerzeichen um's Raumschiff herum machen!

    (Master-Jimmy habe ich nur eingegeben, weil ich zu faul war mich anzumelden und ich hier so heisse.)



  • nur ascii zeichen oder ist pixelgrafik erlaubt ?



  • nur ascii 🙂 von 0 - 255 *g*

    Wo bleibt sonst der Spaß.

    P.S.: Bin Dald fertig mit meinem Space Invaders *hehe*

    Gruß Tobi.


Anmelden zum Antworten