Simple Games using ncurses
Menu
//"Cave Escape"
//[email protected] #include <string> #include <ncurses.h> #include <stdlib.h> #include <time.h> #include <iostream> using namespace std; int main() { start: srand(time(NULL)); initscr(); noecho(); curs_set(0); keypad(stdscr, TRUE); timeout(175); start_color(); bkgd(COLOR_PAIR(1)); init_pair(1, COLOR_CYAN, COLOR_BLACK); bool quit = false; bool shield=false; int room=0; int c=7; int d=4; int rotate=0; int bird_direct=1;//moving obstacles direction...varies according to room... int bird_y=3+rand()%5; int bird_x=18+rand()%10; int player_direct = 2;//player int player_y=4;//player row int p_x=6;//player column int life=75; int food_x = 15+rand() % 10; int food_y = 5+rand() % 4 ; int clock_food=0; int clock_shield=0; int magic=0; int ch; while (!quit) { ch = getch(); switch (ch) { case KEY_LEFT: player_direct = 1; break; case KEY_RIGHT: player_direct = 2; break; case KEY_UP: player_direct = 3; break; case KEY_DOWN: player_direct = 4; break; case 'g': rotate++; break; case 'q': quit = true; break; case 'p': timeout(555555); break; case 'o': timeout(175); break; } if (rotate>1) rotate=0; if (player_direct==1 && rotate==1) {player_direct=3; rotate=0;} if (player_direct==3 && rotate==1) {player_direct=2; rotate=0;} if (player_direct==2 && rotate==1) {player_direct=4; rotate=0;} if (player_direct==4 && rotate==1) {player_direct=1; rotate=0;} //Player direction: up, down, left, right. switch (player_direct){ case 1: p_x--; break; case 2: p_x++; break; case 3: player_y--; break; case 4: player_y++; break; } // directions of moving obstacles switch (bird_direct){ case 1: bird_x--; break; case 2: bird_x++; break; case 3: bird_y--; break; case 4: bird_y++; break; //extra: 45 degree...down+left case 5: bird_x--; bird_y++; break; //extra: 45 degree...down+right case 6: bird_x++; bird_y++; break; } bool collision_2=false; if (bird_x<0 && p_x<=12) { bird_x=4+rand()%12+1; bird_y= player_y; } if (bird_x<0 && p_x>=13) { bird_x=17+rand()%11+1; bird_y = player_y; } if (bird_x>29 && p_x<=12) { bird_x=4+rand()%12+1; bird_y= player_y; } if (bird_x<0 && p_x>=13) { bird_y=17+rand()%11+1; bird_y = player_y; } if (bird_y<0){bird_y=8+rand()%2; bird_x=p_x;} if (bird_y>10){bird_y=rand()%2; bird_x=p_x;} //clock_food makes the food disappear and re-appear again at random location (and time) on screen. clock_food++; if (clock_food>=26+rand()%10) { clock_food=0; food_x = rand() % 29 + 1; food_y = 1+rand() % 10 + 1; life=life-10; } if (p_x == food_x && player_y== food_y){ food_x = rand() % 29 + 1; food_y = 1+rand() % 10 + 1; life=life+15; collision_2=true; magic++; } //player needs 3 pieces of food to activate shield if (magic>=3){ shield=true;} //when player's life runs out, it's game over:-( if (life<=0) quit=true; erase(); if (life>=50) mvaddch(player_y, p_x,'O'); //changing into smaller body indicates low energy... if (life<50) mvaddch(player_y,p_x,'o'); //Player runs when '.' is pressed:-) bool fast=false; if (ch=='.' ) fast=true; if (fast){ switch (player_direct){ case 1: p_x--; break; case 2: p_x++; break; case 3: player_y--; break; case 4: player_y++; break; } } //general condition for moving for all levels. this will help avoid errors... if (bird_x<0){ bird_x=20+rand()%9; bird_y=player_y;} if (bird_x>29){ bird_x=rand()%9; bird_y=player_y;} if (bird_y<0){ bird_y=10; bird_x=p_x;} if (bird_y>10){ bird_y=0; bird_x=p_x;} bool collision=false; if (bird_y==player_y && bird_x==p_x && shield==false) collision=true; //player knows when hit by obstacles if (collision){ mvprintw(player_y-1,p_x, "x"); mvprintw(player_y+1,p_x, "x"); mvprintw(player_y,p_x-1, "x"); mvprintw(player_y,p_x+1, "x"); life=life-10; } //start screen if (room==0 ){ p_x=30; player_y=0; mvprintw(1,8,"Cave Escape"); mvprintw(4,9,"Start"); mvprintw(5,9,"Exit"); mvprintw(8,3," (Press Space to choose)"); mvprintw(9,3," ( Return key to select)"); mvprintw(d,c,">"); } if (room==0 && ch==' ') { d++; } if (room==0 && d>5 ) d=4; if (room==0 && d==4 && ch==10) { room=1; p_x=4; player_y=4; } if (room==0 && d==5 && ch==10) quit=true; if (magic>=2) shield=true; if (shield){ mvprintw(player_y-1,p_x, "="); mvprintw(player_y+1,p_x, "="); mvprintw(player_y,p_x-1, "("); mvprintw(player_y,p_x+1, ")"); clock_shield++; } if (clock_shield>=20){ clock_shield=0; shield=false; magic=0; } //if (magic==1) collision_2=true; if (collision_2){ mvprintw(player_y-1,p_x, "o"); mvprintw(player_y+1,p_x, "o"); mvprintw(player_y,p_x-1, "o"); mvprintw(player_y,p_x+1, "o"); } if (room==1){ bird_direct=4; mvprintw(food_y, food_x, "e"); mvprintw(bird_y,bird_x,"#"); mvprintw(0,0,"OxxxxxOOxxxOxxxoxooooOxxxOxxxO"); mvprintw(11,0,"xxxxxxOxxxOxxxxxOxxOxxOooxxxxx"); } //room 2 if (room==2){ bird_direct=2; mvprintw(food_y, food_x, "e"); mvprintw(bird_y,bird_x,"ox)"); mvprintw(0,0,"oooxxxOOxxoooOOoxxxoOOxxxOoxxx"); mvprintw(11,10,"OxxxxxxxoxxOxxOxxxxO"); } //room 3 if (room==3){ mvprintw(food_y, food_x, "e"); mvprintw(bird_y,bird_x,"#"); mvprintw(1,11,"xOxxxOoxxxxxOOoxxxx"); mvprintw(11,0,"xxOoxxOOOxxxxxOOxxxxOOxxxxOOxxx"); } //room 4 design if (room==4){ bird_direct=1; mvprintw(food_y, food_x, "e"); mvprintw(bird_y,bird_x,"oxo"); mvprintw(0,0,"OxxxxxOOO OxxxxxOOOOxxxxxOOOO"); mvprintw(11,0,"xxxxxxOxxxOxxxxxOxOxxOoooxxxxx"); } if (room==5){ bird_direct=5; mvprintw(food_y, food_x, "e"); mvprintw(bird_y,bird_x,"@"); for (int a=0; a<12; a++){ mvprintw(a,8,"0");} for (int b=0; b<12; b++){ mvprintw(b,11,"0");} } if (room==6){ bird_direct=1; mvprintw(food_y, food_x, "e"); mvprintw(bird_y,bird_x,"]"); mvprintw(2,8,"xxxOOxxxOxxxxxO"); mvprintw(8,11," OoxxOxxxxxxOxxxOoo"); for (int a_6=2; a_6<12; a_6++){ mvprintw(a_6,8,"0");} for (int b_6=8; b_6<12; b_6++){ mvprintw(b_6,11,"0");} for (int c_6=0; c_6<9; c_6++){ mvprintw(c_6,29,"0");} for (int d_6=0; d_6<3; d_6++){ mvprintw(d_6,22,"0");} } if (room==7){ bird_direct=4; mvprintw(food_y, food_x, "e"); mvprintw(bird_y,bird_x,"#"); for (int a_7=0; a_7<12; a_7++) mvprintw(a_7,22,"0"); for (int b_7=0; b_7<12; b_7++)mvprintw(b_7,29,"0"); } if (room==8){ mvprintw(food_y, food_x, "e"); mvprintw(bird_y,bird_x,"@"); for (int a_8=0; a_8<12; a_8++) mvprintw(a_8,22,"@"); for (int b_8=0; b_8<12; b_8++)mvprintw(b_8,29,"@"); for (int c_8=23; c_8<29; c_8++)mvprintw(5,c_8,":"); for (int c_8=23; c_8<29; c_8++)mvprintw(6,c_8,":"); } if (room==9){ mvprintw(food_y, food_x, "e"); mvprintw(bird_y,bird_x,"#"); for (int a_9=11; a_9>3; a_9--) mvprintw(a_9,22,"@"); for (int b_9=22; b_9<30; b_9++)mvprintw(4,b_9,"@"); for (int c_9=11; c_9>7; c_9--) mvprintw(c_9,29,"@"); } if (room==10){ mvprintw(food_y, food_x, "e"); mvprintw(bird_y,bird_x,"="); for (int a_10=0; a_10<30; a_10++) mvprintw(4,a_10,"@"); for (int b_10=0; b_10<30; b_10++) mvprintw(8,b_10,"@"); for (int c_10=18; c_10<24; c_10++)mvprintw(5,c_10,":"); for (int c_10=18; c_10<24; c_10++)mvprintw(6,c_10,":"); for (int c_10=18; c_10<24; c_10++)mvprintw(6,c_10,":"); for (int c_10=18; c_10<24; c_10++)mvprintw(7,c_10,":"); } if (room==11){ mvprintw(food_y, food_x, "e"); mvprintw(bird_y,bird_x,"@"); for (int a_11=0; a_11<30; a_11++) mvprintw(4,a_11,"/"); for (int b_11=0; b_11<30; b_11++) mvprintw(8,b_11,"/"); } //conditions in room 1 if (room==1 && p_x<-1){ p_x=30; room=2;} if (room==1 && p_x>29) {p_x=-1; room=4;} if (room==1 && player_y>10) player_direct=3; if (room==1 && player_y<2) player_direct=4; //conditions in room 2 if (room==2 && p_x<0) player_direct=2; if (room==2 && p_x>30) {p_x=-1; room=1;} if (room==2 && player_y<1) player_direct=4; if (room==2 && player_y>10 && p_x>=11) player_direct=3; if (room==2 && player_y>10 && p_x<=10 ){player_y=0; room=3;} //conditions in room 3 if (room==3 && player_y<0 && p_x<=10 ) {player_y=10; room=2;} if (room==3 && p_x>=11 ) player_direct=4; if (room==3 && p_x<0) player_direct=2; if (room==3 && p_x>29) player_direct=1; if (room==3 && player_y>10) player_direct=3; //conditions in room 4 if (room==4 && p_x>29 ) player_direct=1; if (room==4 && p_x<-1) {p_x=29; room=1;} if (room==4 && player_y<1 && p_x<=8 || room==4 && player_y<1 && p_x>=11) player_direct=4; if (room==4 && player_y<0 && p_x>=9 && p_x<=10 ){ player_y=10; room =5;} if (player_y>10 && room==4) player_direct=3; //conditions for room 5 if (room==5 && p_x<9) player_direct=2; if (room==5 && p_x>10) player_direct=1; if (room==5 && player_y>10 && p_x>=9 && p_x<=10) {player_y=0; room=4;} if (room==5 && player_y<0) {player_y=10; room=6;} //conditions for room 6 if (room==6 && p_x<9) player_direct=2; if (room==6 && player_y<3 && p_x<23 ) player_direct=4; if (room==6 && p_x>10 && player_y>7) player_direct=1; if (room==6 && p_x>29) player_direct=1; if (room==6 && p_x>=11 && player_y>7) player_direct=3; if (room==6 && p_x>=9 && p_x<=10 && player_y>10){player_y=0; room=5;} if (room==6 && player_y<0) {player_y=10; room=7; bird_y=1+rand()%2; bird_x=23+rand()%5; bird_direct=4;} //condition for room 7 if (room==7 && p_x<23) player_direct=2; if (room==7 && p_x>29) player_direct=1; if (room==7 && player_y>11){player_y=0; room=6;} if (room==7 && player_y<0){ player_y=10; bird_direct=1; bird_y=18+rand()%10;bird_y=4+rand()%3; room=8; } //conditions at room 8 if (room==8 && p_x<23) player_direct=2; if (room==8 && p_x>29) player_direct=1; if (room==8 && player_y>11){player_y=0; room=7;} if (room==8 && player_y<0){player_y=10; room=9;} //conditions at room 9 if (room==9 && p_x<23) player_direct=2; if (room==9 && p_x>28 && player_y>=8) player_direct=1; if (room==9 && p_x>29 && player_y<8){ p_x=0; room=10;} if (room==9 && player_y<5) player_direct=4; if (room==9 && player_y>10){ player_y=0; room=8;} //conditions at room 10 if (room==10 && p_x<0){ p_x=29; room=9;} if (room==10 && p_x>29){ p_x=0; room=11;} if (room==10 && player_y<5) player_direct=4; if (room==10 && player_y>7) player_direct=3; //conditions at room 11 if (room==11 && p_x<0){ p_x=29; room=10;} if (room==11 && player_y<5) player_direct=4; if (room==11 && player_y>7) player_direct=3; }// <-- !quit closing bracket timeout(-1); erase(); if (room>0) mvprintw(5, 9, "GAME OVER"); if (room==0) mvprintw(7,5," (Press back to exit)"); refresh(); getch(); endwin(); goto start; }//Closing bracket of main function
1 Comment
Braden Best
10/16/2015 02:14:11 am
I did a complete rewrite of your game: https://gitlab.com/bradenbest/cave-escape-improved
Reply
Leave a Reply. |
Archives
March 2016
Categories |