首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

贪吃蛇问题的实现

贪吃蛇问题:

小时候我们都玩过贪吃蛇,如今,学习了编程,我们不妨将其实现一下,这对我们的编程学习有很大好处。下文,小编会以讲解程序所使用的函数的方式详解贪吃蛇的编写。

A,定义的全局变量及其功能:

int food[2]; //定义全局变量food,以储存food坐标

int direction; //定义全局变量direction,以储存snake的运动方向

int length=2; //蛇的长度,初始长度为2

int headX=1,headY=2; //蛇的头,初始坐标为(1,2)

int snake[1000][2]; //蛇的坐标

B,定义的函数及其功能:

1.getoxy函数:使用该函数能定点输出字符位置,在往期文章曾经讲过,就不详细叙述了。

2.Direction函数(用w,a,s,d控制蛇的上下左右移动):在这个函数中需要用到_kbhit(),检查当前是否有键盘输入。若有输入,则判断输入的字符ch是不是w,a,s,d或空格中的一种,将w,a,s,d分别对应全局变量direction中的某一整形数值,比如:1,2,3,4,以此标记蛇移动的方向。空格则是暂停键,用system(“pause”)实现。

3.changesnake函数(改变蛇运动后的坐标):首先通过direction的值判断蛇运动方向,改变headX和headY的值,即蛇头坐标,遍历蛇的所有坐标,将当前蛇身坐标赋值为前一位蛇身的坐标,将蛇头坐标用headX和headY的值赋值,以实现蛇向前一步走的功能。

4.其他函数功能比较简单,就不需要讲解了。

C,main函数:

利用死循环,每隔一段时间便将屏幕清空,重新输出新的蛇,边界和食物的位置。

代码如下:

#include

#include

#include

#include

#include

#include

using namespace std;

/*所有需要使用的全局变量 */

int food[2]; //定义全局变量food,以储存food坐标

int direction; //定义全局变量direction,以储存snake的运动方向

int length=2; //蛇的长度

int headX=1,headY=2; //蛇的头

int snake[1000][2];

/*所有需要使用的函数 */

void getoxy(); //定位函数

void Start(); //开始函数

void Boundary(); //边界函数

void Direction(); //方向函数

void changesnake(); //改变蛇坐标的函数

void newFood(); //随机创建新食物的函数

void printfood(); //输出食物

void printsnake(); //输出蛇

void EatorNot(); //判断蛇是否吃到食物

bool judgeLife(); //判断蛇是否存活

void getoxy(SHORT x,SHORT y)

{

COORDposition=; //COORD:字符在控制台屏幕上的坐标

HANDLEhOut=GetStdHandle(STD_OUTPUT_HANDLE); // GetStdHandle:顾名思义,取得一个句柄。

//SetConsoleCursorPosition是API中定位光标位置的函数。

SetConsoleCursorPosition(hOut,position); //参数一个句柄,一个坐标

//STD_OUTPUT_HANDLE:指向标准输出设备

};

void Start()

{

cout

cin.get();

system("cls"); //清屏函数

};

void Boundary() //边界为100,20

{

for(inta=0;a

{

getoxy(100,a);

};

for(inta=0;a

{

getoxy(a,20);

cout

};

};

void Direction()

{

charch;

if(_kbhit())

{

ch=_getch();

if(ch=='w')

{

direction=1;

};

if(ch=='s')

{

direction=2;

};

if(ch=='a')

{

direction=3;

};

if(ch=='d')

{

direction=4;

};

if(ch=='')

{

cout

system("pause");

};

};

};

void changesnake()

{

if(direction==1) headY--;

if(direction==2) headY++;

if(direction==3) headX--;

if(direction==4) headX++;

for(inta=length-1;a>0;a--)

{

snake[a][0]=snake[a-1][0];

snake[a][1]=snake[a-1][1];

};

snake[0][0]=headX;

snake[0][1]=headY;

};

void newFood()

{

srand((unsigned)time(NULL));

food[0]=rand()%100;

food[1]=rand()%20;

for(intx=0;x

{

if(food[0]==snake[x][0]&&food[1]==snake[x][1])

newFood();

break;

};

};

void printfood()

{

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

cout

};

void printsnake()

{

getoxy(snake[0][0],snake[0][1]);

cout

for(inta=1;a

{

getoxy(snake[a][0],snake[a][1]);

cout

};

};

void EatorNot()

{

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

{

length++;

newFood();

};

};

bool judgeLife()

{

for(inti=1;i

{

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

{

returnfalse;

break;

};

};

if(snake[0][0]100snake[0][1]20) return false;

elsereturn true;

}

void Change()

{

Boundary();

EatorNot();

changesnake();

printsnake();

printfood();

}

int main()

{

Start();

food[0]=5;

food[1]=5;

snake[0][0]=1;snake[0][1]=2;

snake[1][0]=1;snake[1][1]=1;

direction=4;

while(true)

{

if(!judgeLife()) break;

Direction();

Change();

Sleep(500);

system("cls");

};

cout

return0;

}

  • 发表于:
  • 原文链接http://kuaibao.qq.com/s/20180209G11G6M00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券