Brauche Ideen für mein C-Projekt



  • Hi!
    Ich muss als Schulprojekt selber ein ASCII/Konsolen- Spiel bauen.
    (Bin mir nicht sicher ob ich im richtigen Forum bin 😃 )
    Bin zwar schon richtig bei der Sache, mir fehlen aber die Ideen jetzt schon... 😕
    Hättet ihr vieleicht Vorschläge, evt. zur Verbesserung des Gameplays..
    Wäre für alles offen! (Der Code ist in C weil es unser Lehrer will 👎 )
    MfG Zero

    #include <conio.h>
    #include <stdio.h>
    #include <dos.h>
    #include <stdlib.h>
    #include <iostream.h>
    #include <windows.h>
    #include <time.h>
    #include <unistd.h>
    #include <clrscr.h>
    
    // Globale Variablen
    int pScore;
    char upChar='a', downChar='d',pauseKey='p';
    
    //Borland Standart
    void gotoxy(int x, int y)
    {
    HANDLE hConsoleOutput;
    COORD dwCursorPosition;
    
    dwCursorPosition.X = x;
    dwCursorPosition.Y = y;
    hConsoleOutput = GetStdHandle(STD_OUTPUT_HANDLE);
    SetConsoleCursorPosition(hConsoleOutput,dwCursorPosition);
    }
    
       void sleep(int nbr_seconds) 
       {
        clock_t goal;
    
        goal = (nbr_seconds * CLOCKS_PER_SEC/15) + clock();
    
        while(goal > clock())
        {
            ;
        }
    } 
    
    void bg(int x) {
         //1=white, 2=grey, 3=green, 4=red, 5=blue;
    
         switch(x) {
            case 1: SetConsoleTextAttribute (GetStdHandle(STD_OUTPUT_HANDLE) ,BACKGROUND_GREEN | BACKGROUND_RED | BACKGROUND_BLUE |BACKGROUND_INTENSITY );
                    break;
            case 2: SetConsoleTextAttribute (GetStdHandle(STD_OUTPUT_HANDLE) ,BACKGROUND_GREEN | BACKGROUND_RED | BACKGROUND_BLUE );
                    break;
            case 3: SetConsoleTextAttribute (GetStdHandle(STD_OUTPUT_HANDLE) ,BACKGROUND_GREEN | BACKGROUND_INTENSITY );
                    break;
            case 4: SetConsoleTextAttribute (GetStdHandle(STD_OUTPUT_HANDLE) ,BACKGROUND_RED |BACKGROUND_INTENSITY );
                    break;
            case 5: SetConsoleTextAttribute (GetStdHandle(STD_OUTPUT_HANDLE) , BACKGROUND_BLUE | BACKGROUND_INTENSITY );
                    break;
            case 6: SetConsoleTextAttribute (GetStdHandle(STD_OUTPUT_HANDLE) ,BACKGROUND_GREEN |BACKGROUND_RED |BACKGROUND_INTENSITY );
                    break;
            }
         }
    
    void fg(int x) {
         //1=white, 2=grey, 3=green, 4=red, 5=blue;
         switch(x) {
            case 1: SetConsoleTextAttribute (GetStdHandle(STD_OUTPUT_HANDLE) ,BACKGROUND_GREEN | BACKGROUND_RED | BACKGROUND_BLUE |BACKGROUND_INTENSITY | FOREGROUND_GREEN | FOREGROUND_RED | FOREGROUND_BLUE |FOREGROUND_INTENSITY );
                    break;
            case 2: SetConsoleTextAttribute (GetStdHandle(STD_OUTPUT_HANDLE) ,BACKGROUND_GREEN | BACKGROUND_RED | BACKGROUND_BLUE |BACKGROUND_INTENSITY |FOREGROUND_GREEN | FOREGROUND_RED | FOREGROUND_BLUE );
                    break;
            case 3: SetConsoleTextAttribute (GetStdHandle(STD_OUTPUT_HANDLE) ,BACKGROUND_GREEN | BACKGROUND_RED | BACKGROUND_BLUE |BACKGROUND_INTENSITY |FOREGROUND_GREEN | FOREGROUND_INTENSITY );
                    break;
            case 4: SetConsoleTextAttribute (GetStdHandle(STD_OUTPUT_HANDLE) ,BACKGROUND_GREEN | BACKGROUND_RED | BACKGROUND_BLUE |BACKGROUND_INTENSITY |FOREGROUND_RED |FOREGROUND_INTENSITY );
                    break;
            case 5: SetConsoleTextAttribute (GetStdHandle(STD_OUTPUT_HANDLE) , BACKGROUND_GREEN | BACKGROUND_RED | BACKGROUND_BLUE |BACKGROUND_INTENSITY |FOREGROUND_BLUE | FOREGROUND_INTENSITY );
                    break;
            case 6: SetConsoleTextAttribute (GetStdHandle(STD_OUTPUT_HANDLE) ,BACKGROUND_GREEN | BACKGROUND_RED | BACKGROUND_BLUE |BACKGROUND_INTENSITY  );
                    break;
         }
         }
    
    int random(int r) {
            int randz=0; 
            srand ( time(NULL) );
            randz= rand() % r;
            return randz;
    }
    
    void sprite(int type,int xpos, int ypos) {
         if(type==1) {
            gotoxy(xpos,ypos);
            printf(" _________");
            gotoxy(xpos,ypos+1);
            printf(" \\________\\___________________");
            gotoxy(xpos,ypos+2);
            printf("   \\      "); fg(4); printf("||"); fg(5); printf(" #0013            "); fg(6); printf("\\");
            gotoxy(xpos,ypos+3);
            printf("  _/______"); fg(4); printf("||"); fg(6); printf("__________________/");
            gotoxy(xpos,ypos+4);
            printf(" /________/");
            }
         }
    
    void flames(int xpos, int ypos, int flameani) {
         if(flameani>=0 && flameani<=3) {
           gotoxy(xpos,ypos);
            bg(6);printf("  ");  bg(6); printf("  ");
           gotoxy(xpos-2,ypos+1);
            bg(6); printf("  "); bg(1);printf("  "); bg(6); printf("  ");
            bg(1);
         }
         if(flameani>=3 && flameani<=6) {
           gotoxy(xpos-2,ypos);
           bg(6); printf("  "); bg(1); printf("  "); bg(6); printf("  ");
           gotoxy(xpos,ypos+1);
           bg(6);printf("    "); 
            bg(1);
         }
    
    }
    
    void wall(int first, int second, int xpos) {
         int n=0, x=0;
    
         for(n=0;first>n;n++) {
             gotoxy(xpos,n);
             printf("|     |");
             }
             gotoxy(xpos,n);
             printf("|_____|");
    
             gotoxy(xpos,24-second);
             printf(" _____ ");
         for(x=0;x<second;x++) {
             gotoxy(xpos,25-second+x);
             printf("|     |");
             }
    
    }
    
    void display(int xspeed, int damage,int score) {
         int n=0,x=0;
         gotoxy(0,0);
         printf("                      /");
         gotoxy(0,1);
         printf("                  __/");
         gotoxy(0,1);
         printf("  SPEED: ");
         for(n=xspeed;n>=0;n--) {
            printf(">");
            }
         gotoxy(0,2);
         printf("_________________/");
    
         gotoxy(56,0);
         printf("\\                       ");
         gotoxy(58,1);
         printf("\\__                  ");
         gotoxy(63,1);
         printf("  DAMAGE: ");
         for(x=damage;x>=1;x--) {
            printf("<");
            }
         gotoxy(61,2);
         printf("\\__________________");
         gotoxy(0,21);
         printf("_____________");
         gotoxy(0,22);
         printf("             \\______");
         gotoxy(0,23);
         printf("                    \\");
         gotoxy(0,24);
         printf("                      \\");
         gotoxy(0,23);
         printf(" SCORE: %i",score);
         }
    
    void cls() {
         sleep(1);
         system("cls");
         }
    
    void pause() {
            gotoxy(20,10);
            printf("+-------------------------------------+");
            gotoxy(20,11);
            printf("|               PAUSE                 |");
            gotoxy(20,12);
            printf("+-------------------------------------+");
            getch();
            }
    
    int updown() {
        int ypos=0;
        char aKey=0;
        if(kbhit()) {
           aKey = getch();
           if(aKey==upChar) {
               ypos++;
           }
           if(aKey==downChar) {
               ypos--;
               }
           }
           if(aKey==pauseKey) {
               pause();
            }
           return ypos;
    }
    
    int speed() {
        int xspeed=1;
        char aKey=0;
        if(kbhit()) {
           aKey = getch();
           switch(aKey) {
                  case 'a':
                  case 'A': xspeed--;
                  break;
    
                  case 'd':
                  case 'D': xspeed++;
                  break;
                  }
           }
           return xspeed;
    }
    
    void gameEngine() {
         int xpos=0,ypos=9, wallUp=0, wallDown=0, flameani=0, hittest=0, score=0;
        float xvel=0, damage=0;
        while(1) {
        bg(1);
           xvel+=0.01;
           xpos+=1+xvel;
           if(xvel>5) {
              xvel=5;
              }
           ypos+=updown();
           sprite(1,20,ypos);
           flames(18,ypos+2, flameani);
           flameani++;
           if(flameani>6) {
              flameani=0;
           }
           if(xpos>80 ) {
               wallUp= random(10)+1;
               wallDown=10-random(10)+1;
               hittest=0;
               xpos=0;
           } else {
               wall(wallUp,wallDown,80-xpos);
               }
           if((ypos<=wallUp-1 || ypos>=21-wallDown) && xpos>=30 && xpos<=60 && hittest==0) {
               damage+=1;
               xvel=0;
               score-=100;
               hittest=1;
           } 
           if(!(ypos<=wallUp-1 || ypos>=21-wallDown) && xpos>=30 && xpos<=30 && hittest==0) {
               score+=10;
               }
           if(score<0) {
               score=0;
               }
           display(xvel,damage,score);
       	   cls(); 
        }
    }     
    
    void option() {
         cls();
         printf("           ___                                 _               _     \n");
         printf("          / __\\  _ __   _   _   ____   /\\/\\   \(_)  ____  ____ | |   ___ \n");
         printf("         / /    | '__| | | | | |_  /  /    \\  | | |_  / |_  / | |  / _ \\\n");
         printf("        / /___  | |    | |_| |  / /  / /\\/\\ \\ | |  / /   / /  | | |  __/\n");
         printf("        \\____/  |_|     \\__,_| /___| \\/    \\/ |_| /___| /___| |_|  \\___|\n");
         printf("\n");
         printf("\n");
         printf("   ++ Optionen ++ Optionen ++ Optionen ++ Optionen ++ Optionen ++ Optionen ++ \n");
         printf("      \n");
         printf("      Taste Rauf:   \n");
         printf("      Taste Runter: \n");
         gotoxy(20,9);
         downChar = getche();
         gotoxy(22,9);
         printf("Okay!");
         gotoxy(20,10);
         upChar = getche();
         gotoxy(22,10);
         printf("Okay!");
         gotoxy(22,11);
         printf("Druecke beliebige Taste um zum Menue zu gelangen!");
         getch();
    
         }
    
    void credits() {
         cls();
         printf("           ___                                 _               _     \n");
         printf("          / __\\  _ __   _   _   ____   /\\/\\   \(_)  ____  ____ | |   ___ \n");
         printf("         / /    | '__| | | | | |_  /  /    \\  | | |_  / |_  / | |  / _ \\\n");
         printf("        / /___  | |    | |_| |  / /  / /\\/\\ \\ | |  / /   / /  | | |  __/\n");
         printf("        \\____/  |_|     \\__,_| /___| \\/    \\/ |_| /___| /___| |_|  \\___|\n");
         printf("\n");
         printf("\n");
         printf("  ++ Credits ++ Credits ++ Credits ++ Credits ++ Credits ++ Credits ++ Credits \n");
         printf("      \n");
         printf("  Dieses Spiel ist urheberrechtlich Geschuetzt!!! (c) 2008 Dominic Hoeglinger! \n");
         printf("\n                    +++  http://www.hoeglinger.com/dominic +++ \n");
         getch();
    }
    void menue() {
         int select=1;
         bool running = true;
         mStart:
         char getchar=0;
         cls();
         printf("           ___                                 _               _     \n");
         printf("          / __\\  _ __   _   _   ____   /\\/\\   \(_)  ____  ____ | |   ___ \n");
         printf("         / /    | '__| | | | | |_  /  /    \\  | | |_  / |_  / | |  / _ \\\n");
         printf("        / /___  | |    | |_| |  / /  / /\\/\\ \\ | |  / /   / /  | | |  __/\n");
         printf("        \\____/  |_|     \\__,_| /___| \\/    \\/ |_| /___| /___| |_|  \\___|\n");
         printf("\n");
         printf("                  NEUES SPIEL          OPTIONEN          CREDITS\n");
         printf("\n");
         printf("                 Drueke A/D um zu navigieren, Space um anzuwaehlen!\n");
         printf("\n");
         if(select==1) {
                       gotoxy(17,7);
                       printf("-------------");
         }
         if(select==2) {
                       gotoxy(38,7);
                       printf("----------");
                       }
         if(select==3) {
                       gotoxy(56,7);
                       printf("---------");
                       }
    
         getchar=getch();
    
         switch(getchar) {
             case 'a':  select--;
                       break;
             case 'd':  select++;
                       break;
             case ' ': if(select==1) {
                          gameEngine();
                          }
                       if(select==2) {
                          option();
                          } 
                       if(select==3) {
                          credits();
                          } 
                       break;
                       }
         if(select==0) {
                        select=3;
                        }
         if(select==4) {
                       select=1;
                       }
         goto mStart;
    
         }
    
    int main() {
        SetConsoleTitle("CruzMizzle - by Dominic Hoeglinger");
    
        menue();
        return 0;
    }
    


  • Ich hab ein paar Tipps für dich was deinen Stil angeht:

    - Benutzte bei den Funktionen bg und fg eine switch Anweisung.
    - srand() sollte nur ein einziges mal am Anfang deines Programms aufgerufen werden!
    - Die Ausgabe des Spieltitels könnte man in eine Funktion auslagern.



  • He danke für die tipps...
    war einfach zu faul und habe die if-anweisung kopiert 🙄 (kein guter Stil, ich weiss), mein Lehrer hätte mir Minuspunkte gegeben 👍 😉



  • void bg(int x) {
         //1=white, 2=grey, 3=green, 4=red, 5=blue;
         int bitmask = 0;
    
         switch(x) {
            case 1: bitmask = BACKGROUND_GREEN | BACKGROUND_RED | BACKGROUND_BLUE |BACKGROUND_INTENSITY ; break;
            case 2: bitmask = BACKGROUND_GREEN | BACKGROUND_RED | BACKGROUND_BLUE; break;
    ...
            }
            SetConsoleTextAttribute (GetStdHandle(STD_OUTPUT_HANDLE) ,bitmask);
         }
    

    So ist es fast noch schöner 😉



  • Storm.Xapek.de schrieb:

    void bg(int x) {
         //1=white, 2=grey, 3=green, 4=red, 5=blue;
         int bitmask = 0;
         
         switch(x) {
            case 1: bitmask = BACKGROUND_GREEN | BACKGROUND_RED | BACKGROUND_BLUE |BACKGROUND_INTENSITY ; break;
            case 2: bitmask = BACKGROUND_GREEN | BACKGROUND_RED | BACKGROUND_BLUE; break;
    ...
            }
            SetConsoleTextAttribute (GetStdHandle(STD_OUTPUT_HANDLE) ,bitmask);
         }
    

    So ist es fast noch schöner 😉

    👍 👍 👍 Well done!


Anmelden zum Antworten