Simple Games using ncurses
Menu
//SpaceBot //By: Wilson // http://programswithc.weebly.com #include <string> #include <ncurses.h> #include <stdlib.h> #include <time.h> #include <iostream> int main() { start: srand(time(NULL)); initscr(); noecho(); curs_set(0); keypad(stdscr, TRUE); timeout(150); int ch; bool quit = false; bool collision=false; bool collision_2=false; int level=0; int keys_need=15; int c=7; int d=4; int player_direct=0; int life=30; int points=0; int x=4; int y=4; int key_x=2+rand()%27; int key_y=2+rand()%6; int food_x=2+rand()%27; int food_y=2+rand()%6; int log_direct=4; int log_x=14+rand()%6; int log_y=3+rand()%3; int clock=0; int clock_1=0; int clock_2=0; //initiate color function start_color(); bkgd(COLOR_PAIR(1)); //multiple color pairs just gives you more options init_pair(1, COLOR_CYAN, COLOR_BLACK); init_pair(2, COLOR_MAGENTA, COLOR_BLACK); init_pair(3, COLOR_YELLOW, COLOR_BLACK); init_pair(4, COLOR_GREEN, COLOR_BLACK); init_pair(5, COLOR_RED, COLOR_BLACK); init_pair(6, COLOR_WHITE, COLOR_BLUE); init_pair(7, COLOR_WHITE, COLOR_MAGENTA); init_pair(8, COLOR_WHITE, COLOR_RED); init_pair(9, COLOR_BLACK, COLOR_GREEN); init_pair(10, COLOR_BLACK, COLOR_WHITE); init_pair(11, COLOR_RED, COLOR_BLUE); while (!quit) { ch = getch(); //keys pressed by player 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 'q': quit = true; break; case 'p': timeout(555555); break; case 'o': timeout(150); break; } //start screen if (level==0 ){ erase(); attrset(COLOR_PAIR(6)); mvprintw(0,0,"oxoxoxoxoxoxoxoxoxoxooxoxoxoxo"); mvprintw(11,0,"oxoxoxooxoxoxoxoxoxoxoxoxoxoxo"); attrset(COLOR_PAIR(1)); mvprintw(0,8,":::SpaceBot:::"); mvprintw(4,9,"START"); mvprintw(5,9,"EXIT"); mvprintw(7,3, "(Press 'g' to select)"); mvprintw(d,c,">"); if ( ch==KEY_DOWN) d++; if (d>5 ) d=4; if (d==4 && ch=='g') { level=1; x=4; y=5; log_x=15+rand()%10; log_y=2+rand()%3;} if (d==5 && ch=='g') quit=1; }//homescreen closing brace int T=0; //level 1 if (level==1){ erase(); clock++; clock_2++; attrset(COLOR_PAIR(1)); if (clock>=3 && clock<=10) mvprintw(1,10,"Level 1"); attrset(COLOR_PAIR(2)); mvprintw(food_y, food_x, "@"); attrset(COLOR_PAIR(1)); for (int a=8; a<22; a++) mvprintw(6,a, "x"); mvprintw(1,1,"%i", keys_need); mvprintw(y,x,"O"); mvprintw(key_y, key_x,"1"); mvprintw(log_y, log_x,"[xxxx]"); attrset(COLOR_PAIR(7)); mvprintw(0,0, " xxxxxxxxxxxxxxxxxxxxxxxxxxxxx"); mvprintw(11,0, " xxxxxxxxxxxxxxxxxxxxxxxxxxxxx"); for (int a=0; a<12; a++) mvprintw(a, 0 ,"x"); for (int b=0; b<12; b++) mvprintw(b, 29, "x"); if ( x>=log_x && x<=log_x+5 && y==log_y){ collision_2=true; life=life-5;} else collision_2=false; if (y<1) { bkgd(COLOR_PAIR(5)); collision_2=1; player_direct=4; life--;} if (y>10) { bkgd(COLOR_PAIR(5)); collision_2=1; player_direct=3; life--;} if (x<1) { bkgd(COLOR_PAIR(5)); collision_2=1; player_direct=2; life--;} if (x>28) { bkgd(COLOR_PAIR(5)); collision_2=1; player_direct=1; life--;} if (x>=8 && x<=22 &&y==6){ collision_2=1; life--;} if (clock_2>=25+rand()%10 ){ log_x=1+rand()%23; food_x=1+rand()%28; food_y=1+rand()%9; clock_2=0; } if (x==food_x && y==food_y){ food_x=1+rand()%28; food_y=1+rand()%9; life=life+5;} if (x==key_x && y==key_y){ collision=1; key_x=2+rand()%27; key_y=2+rand()%5; log_x=1+rand()%23; clock_2=0; points=points+50; keys_need--; } else collision=0; if (log_y>10) log_direct=3; if (log_y<1) log_direct=4; if (keys_need<1){ log_x=30; log_y=0; key_x=30; key_y=0; log_direct=0; clock_2=0; attrset(COLOR_PAIR(6)); mvprintw(1, 14, "_"); } if (keys_need<1 && x==14 && y==1){ level=2; keys_need=25; key_x=5+rand()%20; key_y=3+rand()%3; } }//level 1 closing brace if (level==2){ erase(); clock++; clock_2++; attrset(COLOR_PAIR(1)); if (clock>=3 && clock<=10) mvprintw(1,10,"Level 2"); for (int a=5; a<25; a++) mvprintw(3,a, "x"); for (int b=5; b<25; b++) mvprintw(8,b, "x"); attrset(COLOR_PAIR(2)); mvprintw(food_y, food_x, "@"); attrset(COLOR_PAIR(1)); mvprintw(1,1,"%i", keys_need); mvprintw(y,x,"O"); mvprintw(key_y, key_x,"1"); mvprintw(log_y, log_x,"[==0==]"); attrset(COLOR_PAIR(8)); mvprintw(0,0, "ooooooooooooooooooooooooooooo"); mvprintw(11,0, "ooooooooooooooooooooooooooooo"); for (int a=0; a<12; a++) mvprintw(a, 0 ,"O"); for (int b=0; b<12; b++) mvprintw(b, 29, "O"); if ( x>=log_x && x<=log_x+6 && y==log_y){ collision_2=true; life=life-5;} else collision_2=false; if (x<1) { bkgd(COLOR_PAIR(5)); collision_2=1; player_direct=2; life--;} if (x>28) { bkgd(COLOR_PAIR(5)); collision_2=1; player_direct=1; life--;} if (y<1) { bkgd(COLOR_PAIR(5)); collision_2=1; player_direct=4; life--;} if (y>10) { bkgd(COLOR_PAIR(5)); collision_2=1; player_direct=3; life--;} if (x>=5 && x<=25 && y==3 || x>=5 && x<=25 && y==8){ collision_2=1; life--;} if (clock_2>=25+rand()%10 ){ log_x=1+rand()%22; food_x=1+rand()%28; food_y=1+rand()%9; clock_2=0; } if (x==food_x && y==food_y){ food_x=1+rand()%28; food_y=1+rand()%9; life=life+5;} if (x==key_x && y==key_y){ collision=1; key_x=2+rand()%27; key_y=2+rand()%5; log_x=1+rand()%22; clock_2=0; points=points+50; keys_need--; } else collision=0; if (log_y>10) log_direct=3; if (log_y<1) log_direct=4; if (keys_need<1){ log_x=30; log_y=0; key_x=30; key_y=0; log_direct=0; clock_2=0; attrset(COLOR_PAIR(6)); mvprintw(1, 14, "_"); } if (keys_need<1 && x==14 && y==1){ level=3; keys_need=35; key_x=5+rand()%20; key_y=3+rand()%3; } }//level 2 closing brace if (level==3){ erase(); clock++; clock_2++; attrset(COLOR_PAIR(1)); if (clock>=3 && clock<=10) mvprintw(1,10,"Level 3"); log_direct=4; attrset(COLOR_PAIR(2)); mvprintw(food_y, food_x, "@"); attrset(COLOR_PAIR(1)); mvprintw(1,1,"%i", keys_need); mvprintw(y,x,"O"); mvprintw(key_y, key_x,"1"); mvprintw(log_y, log_x,"[********]"); attrset(COLOR_PAIR(9)); mvprintw(0,0, "0###########################0"); mvprintw(11,0, "0###########################0"); for (int a=0; a<12; a++) mvprintw(a, 0 ,"O"); for (int b=0; b<12; b++) mvprintw(b, 29, "O"); if ( x>=log_x && x<=log_x+9 && y==log_y){ collision_2=true; life=life-10;} else collision_2=false; if (x<1) { attrset(COLOR_PAIR(5)); collision_2=1; player_direct=2; life--;} if (x>28) { attrset(COLOR_PAIR(5)); collision_2=1; player_direct=1; life--;} if (y<1) { attrset(COLOR_PAIR(5)); collision_2=1; player_direct=4; life--;} if (y>10) { attrset(COLOR_PAIR(5)); collision_2=1; player_direct=3; life--;} if (x==food_x && y==food_y){ food_x=1+rand()%28; food_y=1+rand()%9; life=life+5;} if (x==key_x && y==key_y){ collision=1; key_x=2+rand()%27; key_y=2+rand()%5; log_x=1+rand()%22; clock_2=0; points=points+50; keys_need--; } else collision=0; if (log_y>10){ log_y=rand()%2; log_x=1+rand()%18;} if (keys_need<1){ log_x=30; log_y=0; key_x=30; key_y=0; log_direct=0; clock_2=0; attrset(COLOR_PAIR(6)); mvprintw(1, 14, "_"); } if (keys_need<1 && x==14 && y==1){ log_direct=4; level=4; keys_need=50; key_x=5+rand()%20; key_y=3+rand()%3; } }//level 3 closing brace if (level==4){ erase(); clock++; clock_2++; attrset(COLOR_PAIR(1)); if (clock>=3 && clock<=10) mvprintw(1,10,"Level 4"); attrset(COLOR_PAIR(2)); mvprintw(food_y, food_x, "@"); attrset(COLOR_PAIR(1)); mvprintw(1,1,"%i", keys_need); mvprintw(y,x,"O"); mvprintw(key_y, key_x,"1"); mvprintw(log_y, log_x,"[==============]"); mvprintw(0,0, "#::::::::::::::::::::::::::::#"); mvprintw(11,0, "#::::::::::::::::::::::::::::#"); attrset(COLOR_PAIR(10)); for (int a=0; a<12; a++) mvprintw(a, 0 ,"*"); for (int b=0; b<12; b++) mvprintw(b, 29, "*"); if ( x>=log_x && x<=log_x+15 && y==log_y){ collision_2=true; life=life-7;} else collision_2=false; if (x<1) { attrset(COLOR_PAIR(5)); collision_2=1; player_direct=2; life--;} if (x>28) { attrset(COLOR_PAIR(5)); collision_2=1; player_direct=1; life--;} if (y<1) { attrset(COLOR_PAIR(5)); collision_2=1; player_direct=4; life--;} if (y>10) { attrset(COLOR_PAIR(5)); collision_2=1; player_direct=3; life--;} if (clock_2>=15+rand()%10 ){ log_x=1+rand()%13; food_x=1+rand()%28; food_y=1+rand()%9; clock_2=0; } if (x==food_x && y==food_y){ food_x=1+rand()%28; food_y=1+rand()%9; life=life+5;} if (x==key_x && y==key_y){ collision=1; key_x=2+rand()%27; key_y=2+rand()%5; log_x=1+rand()%22; clock_2=0; points=points+50; keys_need--; } else collision=0; if (log_y>10) log_direct=3; if (log_y<1) log_direct=4; if (keys_need<1){ log_x=30; log_y=0; key_x=30; key_y=0; log_direct=0; clock_2=0; attrset(COLOR_PAIR(6)); mvprintw(4, 14, "_"); } if (keys_need<1 && x==14 && y==4){ level=5;//final level key_x=5+rand()%20; key_y=3+rand()%3; } }//level 4 closing brace //final, eternal stage if (level==5){ erase(); log_direct=4; clock++; clock_2++; attrset(COLOR_PAIR(1)); if (clock>=3 && clock<=10) mvprintw(1,10,"Final Level"); attrset(COLOR_PAIR(2)); mvprintw(food_y, food_x, "@"); attrset(COLOR_PAIR(1)); mvprintw(y,x,"O"); mvprintw(key_y, key_x,"$"); mvprintw(log_y, log_x,"0++++++++0"); attrset(COLOR_PAIR(6)); mvprintw(0,0, "((((((((((((((+)))))))))))))))"); mvprintw(11,0, "((((((((((((((+)))))))))))))))"); attrset(COLOR_PAIR(3)); mvprintw(3,8,"*"); mvprintw(3,21,"*"); mvprintw(8,8,"*"); mvprintw(8,21,"*"); if ( x>=log_x && x<=log_x+9 && y==log_y || x==8 && y==3 || x==21 && y==3 || x==8 && y==8 || x==21 && y==8){ collision_2=true; life=life-7;} else collision_2=false; if (y<1) { collision=1; player_direct=4; } if (y>10) { collision=1; player_direct=3; } if (x<0) x=29; if (x>29) x=0; if (x==food_x && y==food_y){ collision=1; food_x=1+rand()%28; food_y=1+rand()%9; life=life+5;} if (x==key_x && y==key_y){ collision=1; key_x=1+rand()%28; key_y=2+rand()%5; clock_2=0; points=points+100; } else collision=0; if (log_y>10){ log_y=1; log_x=rand()%19; points=points+5; } }//level 5 closing brace switch (player_direct){ case 1: x--; break; case 2: x++; break; case 3: y--; break; case 4: y++; break; } switch (log_direct){ case 1: log_x--; break; case 2: log_x++; break; case 3: log_y--; break; case 4: log_y++; break; } if (collision ){ attrset(COLOR_PAIR(1)); mvprintw(y-1,x,"o"); mvprintw(y+1,x,"o"); mvprintw(y,x-1,"o"); mvprintw(y,x+1,"o");} if (collision_2 ){ attrset(COLOR_PAIR(1)); mvprintw(y-1,x,"x"); mvprintw(y+1,x,"x"); mvprintw(y,x-1,"x"); mvprintw(y,x+1,"x");} if (life<=0) quit=true; }//while (!quit) bracket. Do not delete this bracket //The area below here is for when quit is true, which stops the program. timeout(-1); erase();// clears screen attrset(COLOR_PAIR(1)); mvprintw(5, 10,"GAME OVER"); mvprintw(7,10,"SCORE: "); mvprintw(7,16," %i", points); refresh(); getch(); endwin(); //restart when any key is pressed, after game over goto start; }//Closing bracket of main function
0 Comments
|
Archives
March 2016
Categories |