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!