欢迎光临散文网 会员登陆 & 注册

大一学生能看懂的贪吃蛇

2019-01-13 17:09 作者:Ljice_  | 我要投稿

/*

游戏

  1.实现地图的初始化 (√)

  2.在初始化区域后产生一个能控制的蛇    (√)

  3.随机产生food (√)

  4.蛇吃到food后续及蛇的生长 (√)

  5.蛇咬到自己以及撞墙的判断 (√)

*/


#include<stdio.h>

#include<conio.h>

#include<iostream>                                               

#include<time.h>

#include<stdlib.h>

#include<windows.h>


using namespace std;


#define N 24 //从此修改区域大小


/******************************** 定位光标的函数以及光标处字符的颜色函数 *************************/


void XY(int x,int y)   //定位光标(x,y)位置

{

//HANDLE hout;

COORD pos;         //={0,2};;

pos.X=2*x;       //pos为一个结构体变量

pos.Y=y;        //y=2x;

                //定义hout为句柄,可边定义边赋值,也可先定义再赋值

HANDLE hout=GetStdHandle(STD_OUTPUT_HANDLE);//输出句柄

SetConsoleCursorPosition(hout,pos);//API中定位光标的函数

}

 

void Color(int num)   //设置颜色

{

HANDLE hout;

hout=GetStdHandle(STD_OUTPUT_HANDLE);

SetConsoleTextAttribute(hout,num);

}


/***************************  初始化  **********************  ************/

void Init()

{

int wall[N+2][N+2]={0},i,j;

for(i=1;i<N+1;i++)

for(j=1;j<N+1;j++)

wall[i][j]=1;


for(i=0;i<N+2;i++)

{

{

for(j=0;j<N+2;j++)

if(wall[i][j])

cout<<"  ";//一个□相当于两个space     * y=2x*

else cout<<"■";

}

cout<<endl;

}  


XY(N+3,10);

cout<<"按下任意键暂停"<<endl;

XY(N+3,11);

cout<<"按下w,s,a,d进行移动"<<endl;

XY(N+3,1);

cout<<"******************"<<endl;

XY(N+3,15);

cout<<"******************"<<endl;

XY(N+3,13);

cout<<"当前分数:"<<endl;

}




/*************************  游戏总过程  *****************************************/

void game()

{

int sneak[30][2],food[2],back[2],score=0,len=1;

char ch;

          //sneak[0] 保存坐标x ,  wall[1]保存坐标y

Init();


//菜单

int n,i;

XY(N+3,3);

cout<<"请选择你要挑战的难度:"<<endl;

XY(N+3,4);

cout<<"难度一(10节) -- 1"<<endl;

XY(N+3,5);

cout<<"难度二(20节) -- 2"<<endl;

XY(N+3,6);

cout<<"难度三(30节) -- 3"<<endl;

i=getch();

switch(i)

{

case '1':n=100;break;

case '2':n=200;break;

case '3':n=300;break;

default : break;

}



        //先初始化地图再在地图里画蛇

sneak[0][0]=N/2;    //一维数组只能保存一节蛇,二维数组才能保存多节蛇

sneak[0][1]=N/2+1;   //蛇的初始位置

XY(sneak[0][0],sneak[0][1]);

Color(6);

cout<<"◎";

cout<<endl;

srand((unsigned)time(NULL));                               

food[0]=rand()%N+1; //x的随机坐标

food[1]=rand()%N+1;    //y的随机坐标

XY(food[0],food[1]);

Color(11);

cout<<"¤";

cout<<endl;

int flag=1;

//////////////////////////////////////////////////////  循环区域  ////////////////////////////////////////////////////////////////////////


while(1)

{   

if(flag)

{

back[0]=sneak[len-1][0];

back[1]=sneak[len-1][1];

XY(back[0],back[1]);

cout<<"  "<<endl;

}


for(i=len-1;i>0;i--)

{

sneak[i][0]=sneak[i-1][0];

sneak[i][1]=sneak[i-1][1];

XY(sneak[i][0],sneak[i][1]);

Color(6);

cout<<"◎"<<endl;

}

flag=1;

if(kbhit())     //让蛇按下键后自己动

{

XY(N+3,12);   //按下其他键停止(ch始终为该值,在switch处没有位移,循环止于下次循环的kbhit处)

ch=getche();

}//除去"Press any key to continue"



switch(ch)

{      

case 'W':

case 'w':sneak[0][1]--;break; 

case 'S':

case 's':sneak[0][1]++;break;

case 'A':

case 'a':sneak[0][0]--;break;

case 'D':

case 'd':sneak[0][0]++;break;

default:break;

}

XY(sneak[0][0],sneak[0][1]);

Color(6);

cout<<"◎";

cout<<endl;





Sleep(200-(score/2));


////////////////////////////////////////////////////吃到食物

if(sneak[0][0]==food[0]&&sneak[0][1]==food[1])

{

score+=10,len++,flag=0;

srand((unsigned)time(NULL));                               

food[0]=rand()%N+1; //x的随机坐标

food[1]=rand()%N+1;

XY(food[0],food[1]);

Color(11);

cout<<"¤";

cout<<endl;

}




////////////////////////////////////////////////////////////////撞墙

if(sneak[0][0]==0||sneak[0][1]==0||sneak[0][0]==N+1||sneak[0][1]==N+1)

{

XY(N+5,8);

Color(5);

cout<<"GAME OVER"<<endl;

exit(0);

}

////////////////////////


////////////////////////////////////撞自己(长度大于1)


for(i=1;i<len;i++)

{

if(sneak[0][0]==sneak[i][0]&&sneak[0][1]==sneak[i][1])

{

XY(N+5,8);

Color(5);

cout<<"GAME OVER"<<endl;

exit(0);

}

}



XY(N+8,13);

Color(6);

cout<< score <<endl;

/////////////////////游戏成功

if(score==n)

{

    XY(N+5,8);

Color(5);

cout<<"YOU WIN"<<endl;

exit(0);

}

}

//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

}




/**************************** 主函数  ********************************/

int main()

{   

game();

return 0;

}


大一学生能看懂的贪吃蛇的评论 (共 条)

分享到微博请遵守国家法律