Einfaches Konsolen Spiel FÜR ALLE



  • SO 🕶

    nach stundenlanger suche mit der Kollision ist eine FreeWare erschien , für Alle , die jemanls ein Spiel in der C++ Konsole machen wollten
    😉

    PS: ich habe jetzt keine schleifen drin , weil ich so zeigen kann wie alles funktioniert 😉

    Kopieren und Komplieren 😉 ➡

    #include <stdio.h>
    #include <stdlib.h>
    #include <conio.h>
    #include <iostream>
    #include <windows.h>
    
    #define SmileyWeiss 0x1
    
    int Player()
    {
     HANDLE hStdout = GetStdHandle(STD_OUTPUT_HANDLE);   
     SetConsoleTextAttribute(hStdout,FOREGROUND_GREEN | FOREGROUND_RED | FOREGROUND_INTENSITY);   
     putchar ( SmileyWeiss );
     printf("  ");
    }
    
    int Kollison()
    {
     system("cls");
     printf("Kollision Von Rechts");
    
     Beep(1000,100);
     Beep(950,100);
     Beep(900,100);
     Beep(850,100);  
    
     Beep(800,100);
     Beep(750,100);
     Beep(700,100);
     Beep(650,100);
     Beep(600,100);
     Beep(550,100);
     Beep(500,100);
     Beep(100,100);
    
     Beep(450,100);
     Beep(400,100);
     Beep(350,100);
     Beep(300,100);
     Beep(250,100);
     Beep(200,100);
     Beep(150,100);
     Beep(100,100);
     Sleep(500);
     Beep(50,200);
     Sleep(1000);
    }
    
    int main(int argc, char *argv[])
    {
      HANDLE hStdout = GetStdHandle(STD_OUTPUT_HANDLE);  // Handlung der Farbe
      int Feld[10][10];//y/x
    
      int Position[2];//
      int i,x,y;
      char c;
    
      // Spieler steht auf den Koordinaten x=1, y=1
      Position[0]=1;//x
      Position[1]=1;//y
    
      //alles auf Null stellen
      for(y=0;y<10;y++)
      {
                       for(x=0;x<10;x++)
                       {
                                        Feld[y][x]=0;
                       }
      }
      //Wand erstellen
      // Obere Wand
      Feld[0][0]=1;
      Feld[0][1]=1;
      Feld[0][2]=1;
      Feld[0][3]=1;
      Feld[0][4]=1;
      Feld[0][5]=1;
      Feld[0][6]=1;
      Feld[0][7]=1;
      Feld[0][8]=1;
      Feld[0][9]=1;
    
      //Untere Wand
    
      Feld[9][0]=1;
      Feld[9][1]=1;
      Feld[9][2]=1;
      Feld[9][3]=1;
      Feld[9][4]=1;
      Feld[9][5]=1;
      Feld[9][6]=1;
      Feld[9][7]=1;
      Feld[9][8]=1;
      Feld[9][9]=1;
    
       //Linke Wand
    
      Feld[0][0]=2;
      Feld[1][0]=2;
      Feld[2][0]=2;
      Feld[3][0]=2;
      Feld[4][0]=2;
      Feld[5][0]=2;
      Feld[6][0]=2;
      Feld[7][0]=2;
      Feld[8][0]=2;
      Feld[9][0]=2;
    
       //Rechte Wand
    
      Feld[0][9]=2;
      Feld[1][9]=2;
      Feld[2][9]=2;
      Feld[3][9]=2;
      Feld[4][9]=2;
      Feld[5][9]=2;
      Feld[6][9]=2;
      Feld[7][9]=2;
      Feld[8][9]=2;
      Feld[9][9]=2;
    
      Feld[8][8]=3; //X soll auf den Koordinaten y=3,x=3 stehen
    
      //Spielfeldmalen+Bewegung
      while(1)
      {
              for(y=0;y<10;y++)//Spielfeld wird gezeichnet
              {
                               for(x=0;x<10;x++)
                               {
                                               if(Position[0]==x && Position[1]==y) Player();
                                               else
                                               {
    
                                                       if(Feld[y][x]==0) printf("   ");
                                                       SetConsoleTextAttribute(hStdout,FOREGROUND_BLUE | FOREGROUND_INTENSITY);
                                                       if(Feld[y][x]==1) printf("²²²");
                                                       SetConsoleTextAttribute(hStdout,FOREGROUND_BLUE | FOREGROUND_INTENSITY);
                                                       if(Feld[y][x]==2) printf("²");
                                                       SetConsoleTextAttribute(hStdout,FOREGROUND_RED | FOREGROUND_INTENSITY);
                                                       if(Feld[y][x]==3) printf(" X ");
                                               }                                   
                               }
                               printf("\n");
              }
              c=toupper(getch());
              if(c=='W') //wenn w gedrückt wurde
              {
                         if(Feld[Position[1]-1][Position[0]]==0) Position[1]--;//wenn kein Hindernis da ist
                         else if(Feld[Position[1]-1][Position[0]]==3) Beep(200,100);//wenn ein X hindert
                         else Beep(100,100);// wenn die Wand hindert
              }
              if(c=='A') 
              {
                         if(Feld[Position[1]][Position[0]-1]==0) Position[0]--;
                         else if(Feld[Position[1]][Position[0]-1]==3) Beep(200,100);
                         else Beep(100,100);
              }
              if(c=='S') 
              {
                         if(Feld[Position[1]+1][Position[0]]==0) Position[1]++;
                         else if(Feld[Position[1]+1][Position[0]]==3) Beep(200,100);
                         else Beep(100,100);
              }
              if(c=='D')
              {
                         if(Feld[Position[1]][Position[0]+1]==0) Position[0]++;
                         else if(Feld[Position[1]][Position[0]+1]==3) Kollison();
                         else Beep(100,100);
              }
              system("cls");
      } 
    
      system("PAUSE");	
      return 0;
    }
    


  • bei Player und Kollision int durch void ersetzen



  • aber sonst gut oder ?



  • Nein, schlecht! Man kann nämlich nur von links das Teil berühren



  • Weiß ehrlich gesagt nicht, was dich an meinem C++ Code gestört hat. Es wäre vllt. noch gut ne switch-case Abfrage statt diese if-else if-else Abfrage da und ich weiß auch nicht wieso du keine Schleife nimmst bei deinen Initialisierungen?

    //Wand erstellen
      // Obere Wand
      Feld[0][0]=1;
      Feld[0][1]=1;
      Feld[0][2]=1;
      Feld[0][3]=1;
      Feld[0][4]=1;
      Feld[0][5]=1;
      Feld[0][6]=1;
      Feld[0][7]=1;
      Feld[0][8]=1;
      Feld[0][9]=1;
    
      // besser
      for( int i = 0; i < 10; i++ )
           Feld[ 0 ][ i ] = 1;
    

    Oder ist dir das zu easy? Wenn du des ganze noch nen wenig ausweites, kannst du dir auch gleich ne Funktion schreiben die alle Wände für dich initialisert:

    // ***** Draw border *****
    void FieldBorder( int iLeft, int iTop, int iRight, int iBottom, char szSymbol ) {
    
        // ***** Left border *****
        for( int l = iTop; l < iBottom; l++ ) {
    
            gotoxy( iLeft, l );
            putchar( szSymbol );
        }
    
        // ***** Top border *****
        for( int t = iLeft; t < iRight; t++ ) {
    
            gotoxy( t, iTop );
            putchar( szSymbol );
        }
    
        // ***** Right border *****
        for( int r = iTop; r < iBottom; r++ ) {
    
            gotoxy( iRight, r );
            putchar( szSymbol );
        }
    
        // ***** Bottom border *****
        for( int b = iLeft; b < iRight; b++ ) {
    
            gotoxy( b, iBottom );
            putchar( szSymbol );
        }
    
        // ***** Left-top-cornor *****
        gotoxy( iLeft, iTop );
        putchar( szSymbole );
    
        // ***** Right-top-cornor *****
        gotoxy( iRight, iTop );
        putchar( szSymbole );
    
        // ***** Left-bottom-cornor *****
        gotoxy( iLeft, iBottom );
        putchar( szSymbole );
    
        // ***** Right-bottom-cornor *****
        gotoxy( iRight, iBottom );
        putchar( szSymbole );
    }
    

    Die funktion Zeichnet zwar nur aber du könntest damit genau so gut dein Feld-Array initialsieren, jedenfalls die Grenzen.

    Gruß Tobi.



  • B++P schrieb:

    SO 🕶

    ... FreeWare erschien , für Alle , die jemanls ein Spiel in der C++ Konsole machen wollten
    😉

    Freeware ?
    Cool, weitermachen !



  • @ Hi-Bruder: kanste ja unten überall wo Beep(200,100) steht Kollision();
    hinschreiben und oben stadt "kollision rechts" , "Kollision"
    🤡

    und zu T0bi: das ist viel Code für fast die gleiche anwendung , die ich auch hab ist doch egal wie man es schreibt , haupsache es tuts und ich finde "Meins irgentwie übersichlicher"



  • Wenn du meinst, ich meine klar kannst du, bei solchen kleinen Spielzeuganwendungen den ganzen Code ausschreiben und deine Datei mit 100den von Zeilen voll schreiben, wenn du meinst das ist übersichtlich bitte. Aber ich würd gern mal sehen wies bei dir dann ausschaut, wenn du eine etwas größeres Projekt hast, wohl möglich noch ein Team-Projekt, wenn du da dein ganzen Code ohne Schleifen ect. schreibst, werden es dir deine Teamkollegen sicher später danken, für deine Übersichtlichkeit und so.

    Gruß Tobi.


Anmelden zum Antworten