Sei sulla pagina 1di 12

Source Code #include <iostream> #include <stdio.h> #include <ncurses.h> #include<time.h> #include <stdlib.

h> #define WIDTH 35 #define HEIGHT 15 #define right 0 #define up 1 #define left 2 #define down 3 //#define RAND_MAX 15 class Csnake { private: int Level; int sn_ln; public: void game2(WINDOW*); void setlevel(int a) { Level=a; } }; int startx = 0; int starty = 0; int a[25],b[25]; char *choices[] = { "Play New", "Continue", "Level", "Controls", "Exit", }; int n_choices = sizeof(choices) / sizeof(char *); void print_menu(WINDOW *menu_win, int highlight); int menu(WINDOW*,int); void print_level(WINDOW *,int);

int main() { WINDOW *any; menu(any,0); return 0; } int menu(WINDOW* snake,int truth)

WINDOW *menu_win,*level_win; int highlight = 1; int choice = 0; int c,i,j,x,y,ch,a=250,ki,kj; Csnake SNAKE; SNAKE.setlevel(250); initscr(); clear(); noecho(); cbreak(); /* Line buffering disabled. pass on everything */ start_color(); startx = (100 - WIDTH) / 2; starty = (44 - HEIGHT) / 2; init_pair(1,COLOR_YELLOW,COLOR_BLUE); menu_win = newwin(HEIGHT, WIDTH, starty, startx); keypad(menu_win, TRUE); level_win = newwin(HEIGHT, WIDTH, starty, startx); keypad(level_win, TRUE); mvprintw(0,10, "Use arrow keys to go up and down!"); refresh(); print_menu(menu_win, highlight); while(1) {

c = wgetch(menu_win); switch(c) { case KEY_UP: if(highlight == 1) highlight = n_choices; else --highlight; break; case KEY_DOWN: if(highlight == n_choices) highlight = 1; else ++highlight; break; case 10: choice = highlight; break; default: mvprintw(24,0,"Charcter pressed is=%3d Hopefully it canbe printed as '%c'",c, c) ; refresh(); break; } print_menu(menu_win, highlight); if(choice != 0) /* User did a choice come out of the infinite lo op */ { switch(choice) { case 1: wborder(menu_win,' ',' ',' ',' ',' ',' ',' ',' '); clear();

wrefresh(menu_win); refresh(); SNAKE.game2(menu_win); break; case 2: if(truth) { init_pair(1,COLOR_GREEN,COLOR_RED); wattron(snake,COLOR_PAIR(1)); box(snake, 0, 0); wattroff(snake, COLOR_PAIR(1)); wrefresh(snake); truth=0; return 0; } else { clrtoeol(); refresh(); endwin(); exit(0); } break; case 3: clear(); wrefresh(menu_win); init_pair(7,COLOR_GREEN,COLOR_BLACK); wattron(level_win,COLOR_PAIR(7)|A_REVERSE); box(level_win, 0, 0); wattroff(level_win,COLOR_PAIR(7)|A_REVERSE); wrefresh(level_win); init_pair(8,COLOR_RED,COLOR_GREEN); print_level(level_win,a); wrefresh(level_win); ch=0; if(truth!=1) { while(1) { ch = wgetch(level_win); switch(ch) { case KEY_RIGHT: if(a>=100) { a=a-50; SNAKE.setlevel(a ); print_level(leve l_win,a); }

break; case KEY_LEFT: if(a<=200) { SNAKE.setlevel(a+50); a=a+50; print_level(level_win,a) ; } break; case 10: ch=1; break; } wrefresh(level_win); if(ch==1) break; } } else { print_level(level_win,a); wrefresh(level_win); } break; case 4: clear(); clrtoeol(); wrefresh(menu_win); init_pair(9,COLOR_GREEN,COLOR_RED); wattron(level_win,COLOR_PAIR(9)|A_BOLD); box(level_win, 0, 0); for(ki=1;ki<WIDTH-1;ki++) for(kj=1;kj<HEIGHT-1;kj++) { mvwaddch(level_win,kj,ki,' '); } wrefresh(level_win); mvwprintw(level_win,2,2," *Task* *Contr ols*"); mvwprintw(level_win,5,2,"Scrolling w Keys"); mvwprintw(level_win,7,2,"Pause e Bar"); mvwprintw(level_win,9,2,"Select Option :- Enter "); mvwprintw(level_win,12,10,"Press Enter! "); wgetch(level_win); wattroff(level_win,COLOR_PAIR(9)|A_BOLD); wrefresh(level_win); break; case 5: clear(); :- Spac :- Arro

clrtoeol(); refresh(); endwin(); exit(0); break; } choice=0; print_menu(menu_win, highlight); } } mvprintw(23, 0, "You chose choice %d with choice string %s\n", choice, c hoices[choice - 1]); clrtoeol(); refresh(); endwin(); return 0; } void print_menu(WINDOW *menu_win, int highlight) { int x,y,i,j,startx,starty; x = 5; y = 3; startx = (100 - WIDTH) / 2; starty = (44 - HEIGHT) / 2; box(menu_win, 0, 0); init_pair(1,COLOR_YELLOW,COLOR_BLUE); init_pair(2,COLOR_BLUE,COLOR_BLUE); init_pair(3,COLOR_RED,COLOR_WHITE); for(i=0;i<startx+2;i++) for(j=0;j<starty+2;j++) { wattron(menu_win,COLOR_PAIR(2)); mvwaddch(menu_win,j,i,' '); wattroff(menu_win,COLOR_PAIR(2)); } wattron(menu_win,COLOR_PAIR(1)|A_BOLD); for(i = 0; i < n_choices; ++i) { if(highlight == i + 1) /* High light the present choice */ { wattron(menu_win,COLOR_PAIR(3)|A_BOLD|A_REVERSE); mvwprintw(menu_win, y, x, " %s", choices[i]); wattroff(menu_win,COLOR_PAIR(3)|A_BOLD|A_REVERSE); wattron(menu_win,COLOR_PAIR(1)|A_BOLD); mvwprintw(menu_win, y, x, ">>"); wattroff(menu_win,COLOR_PAIR(1)|A_BOLD); } else { wattron(menu_win,COLOR_PAIR(1)|A_BOLD); mvwprintw(menu_win, y, x+3, "%s", choices[i]); } y=y+2; } wrefresh(menu_win); } void print_level(WINDOW *level_win,int a) {

int x,y,i,j,maxx,maxy; x = 5; y = 3; startx = (100 - WIDTH) / 2; starty = (44 - HEIGHT) / 2; init_pair(7,COLOR_BLACK,COLOR_GREEN); init_pair(8,COLOR_RED,COLOR_GREEN); maxx=(6-(a/50)); for(i=0;i<=WIDTH;i++) for(j=0;j<=HEIGHT;j++) { wattron(level_win,COLOR_PAIR(7)); mvwaddch(level_win,j,i,' '); wattroff(level_win,COLOR_PAIR(7)); } wrefresh(level_win); wattron(level_win,COLOR_PAIR(8)); mvwprintw(level_win,1,1,"Level:- [Press <= OR => & Enter]"); wattroff(level_win,COLOR_PAIR(8)); for(i=2;i<=2*maxx;i=i+2) for(j=HEIGHT-2;j>=(HEIGHT-i);j--) { wattron(level_win,COLOR_PAIR(8)|A_REVERSE); mvwaddch(level_win,j,i+10,' '); wattroff(level_win,COLOR_PAIR(8)|A_REVERSE); } wrefresh(level_win); } void Csnake::game2(WINDOW *menu_win) { WINDOW *snake,*scorewin; int highlight = 1,i,j,score=0,kx,ky; int choice = 0; int c,x=1,y=1,flag=0,cnt=0,foodx=25,foody=25,meet=0; sn_ln=5; start_color(); clear(); noecho(); cbreak(); /* Line buffering disabled. pass on everything */ startx = (80 - WIDTH) / 2; starty = (24 - HEIGHT) / 2; snake= newwin(2*HEIGHT+1, 2*WIDTH+1, starty, startx); scorewin= newwin(HEIGHT/2, WIDTH/2, 5, 100); keypad(snake, TRUE); init_pair(1,COLOR_RED,COLOR_BLACK); wattron(snake,COLOR_PAIR(1)); box(snake, 0, 0); wattroff(snake, COLOR_PAIR(1)); init_pair(1,COLOR_GREEN,COLOR_GREEN); wattron(scorewin,COLOR_PAIR(1)); box(scorewin, 0, 0);

wattroff(scorewin, COLOR_PAIR(1)); for(kx=1;kx<WIDTH/2-1;kx++) for(ky=1;ky<HEIGHT/2-1;ky++) { init_pair(5,COLOR_RED,COLOR_RED); wattron(scorewin,COLOR_PAIR(5)); mvwaddch(scorewin,ky,kx,' '); wattroff(scorewin,COLOR_PAIR(5)); } wrefresh(scorewin); for(i=0;i<25;i++) a[i]=b[i]=-1; init_pair(2,COLOR_BLUE,COLOR_YELLOW); wattron(snake,COLOR_PAIR(2)); for(i=0;i<sn_ln;i++) { mvwaddch(snake,1,i+1,' '); a[i]=i+1; b[i]=1; } wattroff(snake,COLOR_PAIR(2)); x=1; for(i=0;i<sn_ln;i++) { init_pair(2,COLOR_BLUE,COLOR_YELLOW); wattron(snake,COLOR_PAIR(2)); mvwaddch(snake,1,x++,' '); wattroff(snake,COLOR_PAIR(2)); } for(x=1;x<2*WIDTH;x++) for(y=1;y<2*HEIGHT;y++) { init_pair(3,COLOR_WHITE,COLOR_WHITE); wattron(snake,COLOR_PAIR(3)); mvwaddch(snake,y,x,' '); wattroff(snake,COLOR_PAIR(3)); } x=a[sn_ln]; y=1; i=0; init_pair(1,COLOR_GREEN,COLOR_RED); wattron(snake,COLOR_PAIR(1)); mvwaddch(snake,25,25,'$'); wattroff(snake,COLOR_PAIR(1)); wattron(scorewin,COLOR_PAIR(1)|A_BOLD); mvwprintw(scorewin,1,1,"Score :- "); mvwprintw(scorewin,3,1,"Food Ate:- "); mvwprintw(scorewin,5,1,"Level :- "); wrefresh(scorewin); mvwprintw(scorewin,1,10," %d",10*score); mvwprintw(scorewin,3,10," %d",score); mvwprintw(scorewin,5,10," %d",(6-(Level/50))); wattroff(scorewin,COLOR_PAIR(1)|A_BOLD); wrefresh(scorewin); while(1) {

nodelay(snake,TRUE); wtimeout(snake,Level); c=wgetch(snake); for(kx=1;kx<WIDTH/2-1;kx++) for(ky=1;ky<HEIGHT/2-1;ky++) { init_pair(5,COLOR_RED,COLOR_RED); wattron(scorewin,COLOR_PAIR(5)); mvwaddch(scorewin,ky,kx,' '); wattroff(scorewin,COLOR_PAIR(5)); } if(x<1) x=2*WIDTH-1; if(y<1) y=2*HEIGHT-1; if(meet) { foodx=1+(int) (69.0*rand()/(RAND_MAX+1.0)); foody=1+(int) (29.0*rand()/(RAND_MAX+1.0)); init_pair(4,COLOR_GREEN,COLOR_RED); wattron(snake,COLOR_PAIR(4)); mvwaddch(snake,foody,foodx,'$'); wattroff(snake,COLOR_PAIR(4)); meet=0; } wrefresh(snake); switch(c) { case KEY_RIGHT: if(flag!=left) { flag=right; init_pair(2,COLOR_BLUE,COLOR_YELLOW); wattron(snake,COLOR_PAIR(2)); mvwaddch(snake,y,x,' '); wattroff(snake,COLOR_PAIR(2)); wattron(snake,COLOR_PAIR(3)); mvwaddch(snake,b[i],a[i],' '); wattroff(snake,COLOR_PAIR(3)); a[i]=x++; b[i]=y; } break; case KEY_UP: if(flag!=down) { flag=up; init_pair(2,COLOR_BLUE,COLOR_YELLOW); wattron(snake,COLOR_PAIR(2)); mvwaddch(snake,y,x,' '); wattroff(snake,COLOR_PAIR(2));

wattron(snake,COLOR_PAIR(3)); mvwaddch(snake,b[i],a[i],' '); wattroff(snake,COLOR_PAIR(3)); a[i]=x; b[i]=y--; } break; case KEY_LEFT: if(flag!=right) { flag=left; init_pair(2,COLOR_BLUE,COLOR_YELLOW); wattron(snake,COLOR_PAIR(2)); mvwaddch(snake,y,x,' '); wattroff(snake,COLOR_PAIR(2)); wattron(snake,COLOR_PAIR(3)); mvwaddch(snake,b[i],a[i],' '); wattroff(snake,COLOR_PAIR(3)); a[i]=x--; b[i]=y; } break; case KEY_DOWN: if(flag!=up) { flag=down; init_pair(2,COLOR_BLUE,COLOR_YELLOW); wattron(snake,COLOR_PAIR(2)); mvwaddch(snake,y,x,' '); wattroff(snake,COLOR_PAIR(2)); wattron(snake,COLOR_PAIR(3)); mvwaddch(snake,b[i],a[i],' '); wattroff(snake,COLOR_PAIR(3)); a[i]=x; b[i]=y++; } break; //////////////////////////// PAUSE ////////////////////////// case ' ': menu(snake,1); for(kx=1;kx<WIDTH/2-1;kx++) for(ky=1;ky<HEIGHT/2-1;ky++) { init_pair(5,COLOR_RED,COLOR_RED); wattron(scorewin,COLOR_PAIR(5)|A_REVERSE); mvwaddch(scorewin,ky,kx,' '); wattroff(scorewin,COLOR_PAIR(5)|A_REVERSE); }

wattron(scorewin,COLOR_PAIR(1)|A_BOLD); mvwprintw(scorewin,2,1,"Score"); wrefresh(scorewin); break; default: switch(flag) { case right: init_pair(2,COLOR_BLUE,COLOR_YELLOW); wattron(snake,COLOR_PAIR(2)); mvwaddch(snake,y,x,' '); wattroff(snake,COLOR_PAIR(2)); wattron(snake,COLOR_PAIR(3)); mvwaddch(snake,b[i],a[i],' '); wattroff(snake,COLOR_PAIR(3)); a[i]=x++; b[i]=y; break; case up: init_pair(2,COLOR_BLUE,COLOR_YELLOW); wattron(snake,COLOR_PAIR(2)); mvwaddch(snake,y,x,' '); wattroff(snake,COLOR_PAIR(2)); wattron(snake,COLOR_PAIR(3)); mvwaddch(snake,b[i],a[i],' '); wattroff(snake,COLOR_PAIR(3)); a[i]=x; b[i]=y--; break; case left: init_pair(2,COLOR_BLUE,COLOR_YELLOW); wattron(snake,COLOR_PAIR(2)); mvwaddch(snake,y,x,' '); wattroff(snake,COLOR_PAIR(2)); wattron(snake,COLOR_PAIR(3)); mvwaddch(snake,b[i],a[i],' '); wattroff(snake,COLOR_PAIR(3)); a[i]=x--; b[i]=y; break; case down: init_pair(2,COLOR_BLUE,COLOR_YELLOW); wattron(snake,COLOR_PAIR(2)); mvwaddch(snake,y,x,' '); wattroff(snake,COLOR_PAIR(2)); wattron(snake,COLOR_PAIR(3)); mvwaddch(snake,b[i],a[i],' '); wattroff(snake,COLOR_PAIR(3));

a[i]=x; b[i]=y++; break; } // Inner Switch } i++; if(i>=sn_ln) { i=0; cnt=1; } if(x>=2*WIDTH) x=1; if(y>=2*HEIGHT) y=1; /////////////////////////////////////////// Score / if(a[i]==foodx && b[i]==foody) { meet=1; sn_ln++; score++; wattron(scorewin,COLOR_PAIR(1)|A_BOLD); mvwprintw(scorewin,1,1,"Score :- "); mvwprintw(scorewin,3,1,"Food Ate:- "); mvwprintw(scorewin,5,1,"Level :- "); wrefresh(scorewin); mvwprintw(scorewin,1,10," %d",10*score); mvwprintw(scorewin,3,10," %d",score); mvwprintw(scorewin,5,10," %d",(6-(Level/50))); wattroff(scorewin,COLOR_PAIR(1)|A_BOLD); wrefresh(scorewin); } if(sn_ln>=15) { clear(); wattron(snake,A_BOLD|A_REVERSE); mvwaddstr(snake,2,20,"You Won The Game!" ); wrefresh(snake); sn_ln=5; return; } if(cnt) { for(j=0;j<sn_ln-1;j++) { if(x==a[j] && y==b[j]) { clear(); wattron(snake,A_BOLD|A_REVERSE); mvwaddstr(snake,2,20,"You Lost The Game! ////////////////////////

"); wrefresh(snake); return; } } } } mvprintw(23,0,"You chose choice %d with choice string %s\n",choice,choices[ch oice-1]); clrtoeol(); refresh(); endwin(); }

Potrebbero piacerti anche