C++ 之 贪吃蛇
#include<iostream>
#include<windows.h>
#include<conio.h>
#include<time.h>
#include<stdlib.h>
using namespace std;
const int N=21;
void Get_xy(int x,int y) //定位光標位置
{HANDLE hout;COORD pos;pos.X=x*2;pos.Y=y;hout=GetStdHandle(STD_OUTPUT_HANDLE);SetConsoleCursorPosition(hout,pos);
}void Color(int num) //設置顏色
{HANDLE hout;hout=GetStdHandle(STD_OUTPUT_HANDLE);SetConsoleTextAttribute(hout,num);
}void Initial() //初始化
{int i,j;int wall[N+2][N+2]={{0}};for(i=1;i<=N;i++)for(j=1;j<=N;j++)wall[i][j]=1;Color(11);for(i=0;i<N+2;i++){for(j=0;j<N+2;j++){if(wall[i][j])cout<<"■";else cout<<"□";}cout<<endl;}Get_xy(N+3,1); Color(20);cout<<"按'W','S','A','D'進行操作"<<endl;Get_xy(N+3,2); Color(20);cout<<"按任意鍵暫停"<<endl;Get_xy(N+3,3); Color(20);cout<<"得分:"<<endl;
}void game()
{int** snake=NULL;int len=1;int i;int score=0;int apple[2];int tail[2];char ch='p';Initial();srand((unsigned)time(NULL));apple[0]=rand()%N+1;apple[1]=rand()%N+1;Get_xy(apple[0],apple[1]);Color(12);cout<<"●"<<endl;snake=(int**)realloc(snake,sizeof(int*)*len);for(i=0;i<len;i++)snake[i]=(int*)malloc(sizeof(int)*2);snake[0][0]=N/2;snake[0][1]=N/2+1;Get_xy(snake[0][0],snake[0][1]); Color(14);cout<<"⊙"<<endl;int flag=1;while(1){if(flag){tail[0]=snake[len-1][0];tail[1]=snake[len-1][1];Get_xy(tail[0],tail[1]);Color(11);cout<<"■"<<endl;}flag=1;for(i=len-1;i>0;i--){snake[i][0]=snake[i-1][0];snake[i][1]=snake[i-1][1];Get_xy(snake[i][0],snake[i][1]);Color(14);cout<<"★"<<endl;}if(kbhit()){Get_xy(0,N+3);ch=getche();}switch(ch){case 'W':case 'w': snake[0][1]--; break;case 'S':case 's': snake[0][1]++; break;case 'A':case 'a': snake[0][0]--; break;case 'D':case 'd': snake[0][0]++; break;default :break;}for(i=1;i<len;i++){if(snake[0][0]==snake[i][0] && snake[0][1]==snake[i][1]){Get_xy(N/2,N/2); Color(30);cout<<"Game over!"<<endl;exit(0);}}Get_xy(snake[0][0],snake[0][1]);Color(14); cout<<"⊙"<<endl;Sleep(abs(200-0.5*score));if(snake[0][0]==apple[0] && snake[0][1]==apple[1]){flag=0; score++; len++; srand((unsigned)time(NULL));snake=(int**)realloc(snake,sizeof(int*)*len);snake[len-1]=(int*)malloc(sizeof(int)*2);Get_xy(N+6,3); Color(20); cout<<score<<endl;apple[0]=rand()%N+1; apple[1]=rand()%N+1;Get_xy(apple[0],apple[1]);Color(12);cout<<"●"<<endl;}if(snake[0][0]==0 || snake[0][0]==N || snake[0][1]==0 || snake[0][1]==N){Get_xy(N/2,N/2); Color(30);cout<<"Game Over!"<<endl;for(i=0;i<len;i++)free(snake[i]);Sleep(INFINITE);exit(0);}if(len>=N*N/20){Get_xy(N/2,N/2); Color(30);cout<<"Win!"<<endl;for(i=0;i<len;i++)free(snake[i]);Sleep(INFINITE);exit(0);}}
}
int main()
{game();return 0;
}
總結
- 上一篇: 技术人必看:15张图对比高效与瞎忙的区别
- 下一篇: 求a^b前n位和后n位