php脚本贪吃蛇,C++_贪吃蛇游戏C++命令行版实例代码,本文实例讲述了贪吃蛇游戏C++ - phpStudy...

贪吃蛇游戏C++命令行版实例代码

本文实例讲述了贪吃蛇游戏C++命令行版的实现代码,是非常经典的游戏。分享给大家供大家参考。具体实现方法如下:

众所周知,贪吃蛇游戏是经典的计算机游戏。

游戏描述如下:

1. 贪吃蛇可以自动直线前进,或者玩家可以通过方向键操纵贪吃蛇上下左右前进,每次前进一格。

2. 贪吃蛇在规定的区域内活动,当:

①贪吃蛇触碰到墙壁时;

②贪吃蛇的蛇头触碰到蛇身或者蛇尾时;

③玩家的键盘输入不是方向键时;

命令行显示“Game Over!”并且退出游戏。

3. 贪吃蛇活动的区域内每次随机产生一颗“豆豆”,当贪吃蛇吃到“豆豆”后蛇身增长一格,自动前进时间缩 短100ms(默认是1000ms,且不能少于100ms)。贪吃蛇长度每为8的倍数Improve a Level。

C++代码如下:

#include

#include

#include

#include

#include

#include

using namespace std;

inline void display(char gsDomain[][22], int level, int moveSpeed)

{

system("cls"); //清屏

cout << endl << endl;

for (int i = 0; i < 22; i++)

{

cout << "\t";

for (int j = 0; j < 22; j++)

cout << gsDomain[i][j] << " ";

if (i == 0)

{

cout << "\tLevel:" << level;

}

else if (i == 3)

{

cout << "\t自动前进时间";

}

else if (i == 5)

{

cout << "\t间隔:" << moveSpeed << " ms";

}

cout << endl;

}

}

int main()

{

char gsDomain[22][22]; //贪吃蛇活动区域(包括墙壁)

//初始化贪吃蛇活动区域(不包括墙壁)

for (int i = 1; i <= 21; i++)

{

for (int j = 1; j <= 21; j++)

gsDomain[i][j] = ' ';

}

//初始化贪吃蛇活动区域的上下墙壁

for (int i = 0; i < 22; i++)

gsDomain[0][i] = gsDomain[21][i] = '-';

//初始化贪吃蛇活动区域的左右墙壁

for (int i = 1; i < 21; i++)

gsDomain[i][0] = gsDomain[i][21] = '|';

//初始化蛇身

for (int i = 1; i <= 3; i++)

gsDomain[1][i] = '*';

//初始化蛇头

gsDomain[1][4] = '#';

int snake[2][100]; //记录贪吃蛇每次出现的位置的坐标

for (int i = 0; i < 4; i++)

{

snake[0][i] = 1; //记录贪吃蛇所在位置的x坐标

snake[1][i] = i + 1; //记录贪吃蛇所在位置的y坐标

}

int head = 3, tail = 0, length = 4;

int beanX, beanY; //豆豆出现的位置

srand(time(0));

do

{

beanX = rand() % 20 + 1;

beanY = rand() % 20 + 1;

} while (gsDomain[beanX][beanY] != ' ');

gsDomain[beanX][beanY] = '*'; //豆豆

cout << "\n\n\t\t贪吃蛇游戏即将开始!\n";

long start;

int level = 1, moveSpeed = 1000;

for (int i = 3; i >= 0; i--)

{

start = clock();

while (clock() - start <= 1000){}

system("cls");

if (i)

{

cout << "\n\n\t\t进入游戏倒计时:" << i << endl;

}

else

display(gsDomain, level, moveSpeed);

}

char direction = 77; //贪吃蛇默认自动向右直线前进

while (true)

{

bool timeFlag = true;

int x, y;

start = clock();

//若时间超过自动前进时间或者键盘上有键按下则终止循环

while ((timeFlag = (clock() - start <= moveSpeed)) && !kbhit()){}

if (timeFlag)

{

//键盘上有键按下时读取键盘输入

getch();

direction = getch();

}

switch (direction)

{

//向上

case 72: x = snake[0][head] - 1, y = snake[1][head];

break;

//向下

case 80: x = snake[0][head] + 1, y = snake[1][head];

break;

//向左

case 75: x = snake[0][head], y = snake[1][head] - 1;

break;

//向右

case 77: x = snake[0][head], y = snake[1][head] + 1;

break;

default: cout << "\tGame Over!\n";

return 0;

}

if (x == 0 || x == 21 || y == 0 || y == 21)

{

//贪吃蛇触碰到墙壁

cout << "\tGame Over!\n";

return 0;

}

if (gsDomain[x][y] != ' ' && !(x == beanX && y == beanY))

{

//贪吃蛇的蛇头触碰到蛇身或者蛇尾

cout << "\tGame Over!\n";

return 0;

}

if (x == beanX && y == beanY)

{

//吃豆豆

length++; //长度加1

if (length >= 8)

{

//游戏升级处理

length -= 8;

level++;

if (moveSpeed > 100)

moveSpeed -= 100;

}

gsDomain[snake[0][head]][snake[1][head]] = '*';

gsDomain[x][y] = '#';

head = (head + 1) % 100;

snake[0][head] = x;

snake[1][head] = y;

do

{

beanX = rand() % 20 + 1;

beanY = rand() % 20 + 1;

} while (gsDomain[beanX][beanY] != ' ');

gsDomain[beanX][beanY] = '*';

display(gsDomain, level, moveSpeed); //屏幕上显示

}

else

{

//不吃豆豆

gsDomain[snake[0][tail]][snake[1][tail]] = ' '; //蛇尾前移一格

tail = (tail + 1) % 100;

gsDomain[snake[0][head]][snake[1][head]] = '*';

head = (head + 1) % 100;

snake[0][head] = x;

snake[1][head] = y;

gsDomain[x][y] = '#'; //蛇头前移一格

display(gsDomain, level, moveSpeed); //屏幕上显示

}

}

return 0;

}

希望本文所述实例对大家C程序设计的学习有所帮助。相关阅读:

Linux系统怎么调整swap分区大小?

Augularjs-起步详解

获取pc电脑和平板物理地址

js处理表格对table进行修饰

Linux系统中如何在PDF中嵌入LaTex中的所有字体

html+js实现动态显示本地时间

Win10系统下IE11浏览器怎么重置? Windows10重置IE11浏览器图文教程

HTML5 新旧语法标记对我们有什么好处

JSP中使用JSTL按不同条件输出内容的方法

oracle关键字作为字段名使用方法

Win7玩游戏提示“显卡器驱动程序已停止响应”问题排查方法

asp.net微信开发(开发者接入)

jquery中EasyUI实现同步树

HTML checkbox 点击说明文字即可选择/取消勾选状态

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值