Simple Games using ncurses
Menu
/* "Snake_1.2" Edited by: Wilson Questions?...Email me at: [email protected]*/ #include <iostream> #include <ncurses.h> #include <list> #include <stdlib.h> #include <time.h> using namespace std; class snake { private: int x; int y; public: snake(int a, int b) { x = a; y = b; } int getX() { return x; } int getY() { return y; } }; int main() { start: bool quit = false; int rotate_right=0; int rotate_left=0; int clock_1 = 0; int clock_2 = 0; int clock_energy=0; int energy = 100; int points = 0; int background; int bird_column = 14+ rand() % 8+ 1; int bird_row= 3 + rand() % 2 + 1; int Player_direction = 2; int bird_direction=0; int food_x = 8+rand() % 12 + 1; int food_y =4+ rand() % 5+ 1; int ch; srand(time(NULL)); initscr(); noecho(); curs_set(0); keypad(stdscr, TRUE); timeout(200); attron(A_BOLD); start_color(); bkgd(COLOR_PAIR(5)); //initializing multiple color pairs:-)...Just for more options init_pair(1,COLOR_WHITE,COLOR_BLACK); init_pair(2,COLOR_BLACK,COLOR_WHITE); init_pair(3,COLOR_GREEN,COLOR_GREEN);//food init_pair(4,COLOR_BLACK,COLOR_MAGENTA); init_pair(5,COLOR_BLACK,COLOR_WHITE); init_pair(6,COLOR_RED,COLOR_CYAN); std::list < snake > snakes; std::list < snake >::iterator it; Location_1: for (int i = 0; i < 3; i++) // generate start snake //snakes location snakes.push_front(snake(5 + i, 6)); // ___________________________ while (!quit) { // input from keys pressed ch = getch(); switch (ch) { case KEY_LEFT: Player_direction = 1; break; case KEY_RIGHT: Player_direction = 2; break; case KEY_UP: Player_direction = 3; break; case KEY_DOWN: Player_direction = 4; break; case ' ': rotate_right++; break; //Pause case 'p': timeout(555555); break; //unpause (resume game) case 'o': timeout(200); break; } //timers clock_1++; clock_2++; if (rotate_right>1) rotate_right=0; if (rotate_left>1) rotate_left=0; if (Player_direction==1 && rotate_right==1) {Player_direction=3; rotate_right=0;} if (Player_direction==3 && rotate_right==1) {Player_direction=2; rotate_right=0;} if (Player_direction==2 && rotate_right==1) {Player_direction=4; rotate_right=0;} if (Player_direction==4 && rotate_right==1) {Player_direction=1; rotate_right=0;} if (Player_direction==1 && rotate_left==1) {Player_direction=4; rotate_left=0;} if (Player_direction==4 && rotate_left==1) {Player_direction=2; rotate_left=0;} if (Player_direction==2 && rotate_left==1) {Player_direction=3; rotate_left=0;} if (Player_direction==3 && rotate_left==1) {Player_direction=1; rotate_left=0;} snake logic = snakes.front(); int x = logic.getX(); int y = logic.getY(); switch (Player_direction){ case 1: x--; break; case 2: x++; break; case 3: y--; break; case 4: y++; break; } attron(A_BOLD); snakes.push_front(snake(x, y)); // _____________________ if (clock_1 >= 18 + rand() % 10 + 1) { food_x = rand() % 29 + 1; food_y =1+ rand() % 10 + 1; energy = energy - 10; clock_1 = 0; } // _______________________ // Below: food disappears and goes to random location on screen if (x == food_x && y == food_y) { food_x = rand() % 29 + 1; food_y = 1+rand() % 10 + 1; energy = energy + 10; points = points + 50; clock_1 = 0; } else snakes.pop_back(); erase();// keeps characters from leaving trace on screen // crash into walls if (x<=-1) {x=0; Player_direction=2; } if (x>=29){x=21; Player_direction=1; } if (y<=-1) {Player_direction=4; y=1; } if (y>=12) {Player_direction=3; y=10; } attrset(COLOR_PAIR(2)); mvprintw(0, 0, "@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@"); mvprintw(11, 0, "@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@"); attrset(COLOR_PAIR(3)); mvaddch(food_y, food_x, '¢'); attrset(COLOR_PAIR(1)); mvprintw(bird_row, bird_column, "("); if (clock_2>=7 && clock_2<=15){ mvprintw(1,11,"Level 1"); mvprintw(food_y,food_x-8,"(food->)");} if (clock_2>=30) bird_direction=1; // ______________________ switch (bird_direction){ case 1: bird_column--; break; case 2: bird_column++; break; case 3: bird_row--; break; case 4: bird_row++; break; } // _______________________ if (bird_column<= -1 && x<=12) { bird_column=4+rand()%12+1; bird_row = y; } if (bird_column<= -1 && x>=13) { bird_column=17+rand()%11+1; bird_row = y; } if (x == bird_column && y == bird_row || y<1 || y>10) { mvprintw(0,0,":-("); energy = energy - 5; } for (it = snakes.begin(); it != snakes.end(); it++) { if (energy <= 75) { mvprintw(1,7," LOW ENERGY!"); mvaddch((*it).getY(), (*it).getX(), 'o'); attrset(COLOR_PAIR(5)); } if (energy > 76 && energy <= 499) { mvaddch((*it).getY(), (*it).getX(), 'O'); attrset(COLOR_PAIR(6)); attron(A_BOLD); } if (energy >= 500 ) { mvaddch((*it).getY(), (*it).getX(), 'Q'); } } // Snake collide if ((*it).getY() == y && (*it).getX() == x && it != snakes.begin()) { mvprintw(0,1,":-("); energy = energy - 5; } if (energy <= 0) quit = true; // game over :-( }//<--while (!quit) closing bracket. Important. Do not delete this bracket. timeout(-1); erase(); mvprintw(4, 9, "GAME OVER"); mvprintw(6,9,"SCORE:"); mvprintw(6,15,"%i", points); attron(A_BOLD); bkgd(COLOR_PAIR(5)); refresh(); getch(); endwin(); goto start; }//end of main
0 Comments
Leave a Reply. |
Archives
March 2016
Categories |