C++通过类实现控制台贪吃蛇
本文实例为大家分享了C++实现控制台贪吃蛇的具体代码,供大家参考,具体内容如下
初学c++,算刚学完类吧,写个贪吃蛇来玩玩。
现是头文件
#pragmaonce #ifndefSNACK_H #defineSNACK_H #defineFrame_X5//边框起点横坐标 #defineFrame_Y5//边框起点纵坐标 #defineFrame_width50//边框长度 #defineFrame_height25//边框高度 structpoint//蛇个点坐标 { intx[100];//蛇的横坐标,其中x[0]表示蛇尾的横坐标,x[N-1]表示蛇头的横坐标 inty[100];//蛇的竖坐标,其中y[0]表示蛇尾的竖坐标,y[N-1]表示蛇头的竖坐标 }; structFood//食物坐标 { intx; inty; }; classsnack { public: snack(); voidinit_snack(point*snake);//初始化蛇 voidgotoxy(intx,inty);//光标移动 voidbegin_view();//封面 voidframe();//打印边界与游戏说明 voidmenu(point*snake,Food*food);//打实时印信息 voidprint_snack(point*snake);//打印蛇 voidmove(point*snake);//移动蛇 voidget_food(point*snake,Food*food);//随机产生食物 voideating(point*snake,Food*food);//吃食物 booldie(point*snake);//判断蛇是否死亡 voidstart_game();//主函数 voidend_game();//结束界面 private: intlength;//蛇长度 intscore;//得分 intaccount;//已吃的食物数量 intdifficulty;//难度 intstage;//关卡 intlife;//生命值 }; #endif
主要的cpp
#include"stdafx.h" #include"snack.h" #include#include #include #include #include usingstd::cout; usingstd::cin; usingstd::endl; HANDLEhOut=GetStdHandle(STD_OUTPUT_HANDLE); /*************获取按键************/ #definekey_number11//虚拟键数 #defineKEYDOWN(vk_code)((GetAsyncKeyState(vk_code)&0x8000)?1:0) enumkeyboard{up_,down_,left_,right_,w_,s_,a_,d_,y_,n_,esc_,other_}; intkeyboard_list[]={VK_UP,VK_DOWN,VK_LEFT,VK_RIGHT,'W','S','A','D','Y','N',VK_ESCAPE}; keyboardkeyboardarray[]={up_,down_,left_,right_,w_,s_,a_,d_,y_,n_,esc_,other_}; keyboardget_the_key() { for(inti=0;i x[0]=Frame_X+2;//初始化蛇的横坐标 snake->y[0]=Frame_Y+Frame_height/2;//初始化蛇的竖坐标 for(inti=1;i x[i]=snake->x[i-1]+2; snake->y[i]=snake->y[i-1]; } } voidsnack::gotoxy(intx,inty) { COORDpos; pos.X=x; pos.Y=y; SetConsoleCursorPosition(hOut,pos); } voidsnack::begin_view() { SetConsoleTextAttribute(hOut,FOREGROUND_GREEN|FOREGROUND_INTENSITY); cout<<"\n\n\n\n"; cout<<"*************\n"; cout<<"**********\n"; cout<<"**********\n"; cout<<"***********\n"; cout<<"*********\n"; cout<<"************\n"; cout<<"***********\n"; cout<<"****************\n"; SetConsoleTextAttribute(hOut,FOREGROUND_BLUE|FOREGROUND_GREEN|FOREGROUND_INTENSITY); cout<<"\n\n\n\n"; cout<<"/^\\/^\\"< x; gotoxy(Frame_X+Frame_width+3,Frame_Y+7); cout<<"纵坐标:"< y; gotoxy(Frame_X+Frame_width+3,Frame_Y+9); cout<<"X:"< x[length-1]; gotoxy(Frame_X+Frame_width+3,Frame_Y+11); cout<<"Y:"< y[length-1];*/ } voidsnack::print_snack(point*snake) { for(inti=0;i x[i],snake->y[i]); if(i==0) cout<<"○";//打印蛇尾 elseif(i==length-1) cout<<"¤";//打印蛇头 else cout<<"◎";//打印蛇身 } } voidsnack::move(point*snake) { gotoxy(snake->x[0],snake->y[0]); cout<<"";//清除蛇尾 for(inti=1;i x[i-1]=snake->x[i]; snake->y[i-1]=snake->y[i]; } } voidsnack::get_food(point*snake,Food*food) { inti,j; srand(static_cast (time(0))); SetConsoleTextAttribute(hOut,FOREGROUND_RED|FOREGROUND_INTENSITY); /*产生食物的条件:1.在游戏窗口内2.不在蛇的身上*/ while(1) { j=0; food->x=Frame_X+2*(rand()%(Frame_width/2-2))+2;//得到食物的横坐标 food->y=Frame_Y+rand()%(Frame_height-2)+1;//得到食物的纵坐标 for(i=0;i x==snake->x[i]&&food->y==snake->y[i]) { j=1; break; } } if(i==length) { gotoxy(food->x,food->y); cout<<"⊙"; break; } else continue; } SetConsoleTextAttribute(hOut,FOREGROUND_BLUE|FOREGROUND_GREEN|FOREGROUND_INTENSITY);//设置蛇颜色 } voidsnack::eating(point*snake,Food*food) { if(snake->x[length-1]==food->x&&snake->y[length-1]==food->y) { length++; for(inti=length-1;i>0;i--)/*蛇后节坐标依次赋值给蛇前一节的坐标,依次得到蛇身及蛇头的坐标*/ { snake->x[i]=snake->x[i-1]; snake->y[i]=snake->y[i-1]; } snake->x[0]=a[0];//得到蛇尾移动前的横坐标 snake->y[0]=a[1];//得到蛇尾移动前的纵坐标 get_food(snake,food); account++; score+=difficulty*10;//分数增加 if(account%5==0) { difficulty++; stage++; } } } boolsnack::die(point*snake) { for(inti=0;i x[length-1]==snake->x[i]&&snake->y[length-1]==snake->y[i]) returntrue; } if(snake->x[length-1]==Frame_X||snake->y[length-1]==Frame_Y||snake->x[length-1]==Frame_X+Frame_width-2||snake->y[length-1]==Frame_Y+Frame_height-1) returntrue; returnfalse; } voidsnack::start_game() { //光标隐藏 CONSOLE_CURSOR_INFOCursorlnfo; GetConsoleCursorInfo(hOut,&Cursorlnfo);//获取控制台光标信息 Cursorlnfo.bVisible=false;//隐藏控制台光标信息 SetConsoleCursorInfo(hOut,&Cursorlnfo);//设置控制台光标信息 system("modeconcols=100lines=40");//设置窗口大小 points,*snake=&s;//定义蛇的结构体指针并指向蛇的结构体 Foodf,*food=&f;//定义食物的结构体指针并指向食物的结构体 keyboardkey_state,Key; keyboardtemp=right_; intj=0; charch=77; begin_view(); gotoxy(12,34); cout<<"按任意键继续......"; while(!_kbhit()) {} system("cls"); frame(); init_snack(snake); get_food(snake,food); while(1) { j=0; menu(snake,food); a[0]=snake->x[0]; a[1]=snake->y[0]; key_state=get_the_key(); if(key_state==temp)//长按加速 { j=1; Sleep(20); } if(key_state!=other_) temp=key_state; switch(temp) { caseup_: casew_: move(snake); snake->y[length-1]-=1; break; casedown_: cases_: move(snake); snake->y[length-1]+=1; break; caseleft_: casea_: move(snake); snake->x[length-1]-=2; break; caseright_: cased_: move(snake); snake->x[length-1]+=2; break; caseesc_: end_game(); break; } eating(snake,food); print_snack(snake); if(die(snake)) { life--; if(life==0) end_game(); else { length=3; start_game(); } } if(j==0) { if(difficulty<10) Sleep(200-difficulty*20); else Sleep(10); } else Sleep(10); } } voidsnack::end_game() { system("CLS"); system("color0D"); cout<<"\n*****************"; cout<<"\n********"; cout<<"\n*********"; cout<<"\n***************"; cout<<"\n**********"; cout<<"\n***********"; cout<<"\n********"; cout<<"\n******************"; cout<<"\n\n\n\n\n\n"; cout<<"\n***********************"; cout<<"\n*******"; cout<<"\n*******"; cout<<"\n******************"; cout<<"\n*******"; cout<<"\n*******"; cout<<"\n*********"; cout<<"\n*****************"; SetConsoleTextAttribute(hOut,FOREGROUND_BLUE|BACKGROUND_GREEN|BACKGROUND_INTENSITY); gotoxy(Frame_X+Frame_width/2,27); cout<<"总得分:"< 然后是main函数
#include"stdafx.h" #include"snack.h" intmain() { snacka; a.start_game(); return0; }关于C++小游戏的更多精彩内容请点击专题:《C++经典小游戏》学习了解
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。