C++实现贪吃蛇游戏的详细步骤及实战演示
导读:收集整理的这篇文章主要介绍了C++实现贪吃蛇游戏的详细步骤及实战演示,觉得挺不错的,现在分享给大家,也给大家做个参考。学习C++过程中做的一个小程序,比较简单,只实现了贪吃蛇小游戏最基本的功能。上传代码作为学习的记录,同时也为其他同学提供作...
收集整理的这篇文章主要介绍了C++实现贪吃蛇游戏的详细步骤及实战演示,觉得挺不错的,现在分享给大家,也给大家做个参考。学习C++过程中做的一个小程序,比较简单,只实现了贪吃蛇小游戏最基本的功能。上传代码作为学习的记录,同时也为其他同学提供作为一个小小的参考。实现环境为:Microsoft Visual C++6.0集成开发环境 。#includeiostream>
#includecmath>
#includecstdlib>
#includecstdio>
#includectime>
#includeconio.h>
#includewindows.h>
using namespace std;
/*光标定位*/HANDLE hout = GetStdHandle(STD_OUTPUT_HANDLE);
COORD coord;
void locate(int x, int y){
coord.X = y;
coord.Y = x;
SetConsoleCursorPosITion(hout,coord);
}
;
/*光标隐藏*/void hide(){
CONSOLE_CURSOR_INFO cursor_info = {
1,0}
;
//bVisible=0;隐藏光标 SetConsoleCursorInfo(hout, &
cursor_info);
//获取光标状态}
/*生成随机数*/double random(double start, double end){
return start + (end - start)*rand()/(RAND_MAX+1.0);
//生成一个数,大于等于start,小于end;}
/*定义地图的长和宽*/int m, n;
/*定义蛇 的长度,坐标,方向,食物的位置*/struct node{
int x, y;
}
snake[1000];
//蛇的坐标int snake_length, dir;
//蛇的长度,方向node food;
int direct[4][2] = {
{
-1,0}
, {
1,0}
, {
0,-1}
, {
0,1}
}
;
//食物的位置/*输出围墙:一个矩形框*/void PRint_wall(){
//输出第一行 “----------” cout " ";
for (int i = 1;
i = n;
i++) {
cout "-";
}
cout endl;
//输出第一列“|”,中间输入空格,最后一列输出“|” for (int j = 0;
j = m-1;
j++) {
cout "|";
for (int i = 1;
i = n;
i++) cout " ";
cout "|" endl;
}
cout " ";
//输出最后一行“----------” for (int i = 1;
i = n;
i++) cout "-";
}
/*首次输出蛇,其中snake[0]代表头部*///蛇的外型:“@*****”void print_snake(){
locate(snake[0].x,snake[0].y);
cout "@";
for (int i = 1;
i snake_length - 1;
i++) {
locate(snake[i].x, snake[i].y);
cout "*";
}
}
/*判断是否撞墙或者头部是否碰到身体的任意一个部位,碰到则游戏失败*/bool is_correct(){
if (snake[0].x == 0 || snake[0].y == 0 || snake[0].x == m + 1 || snake[0].y == n + 1) return false;
//头部碰到边缘 for (int i = 1;
i = snake_length - 1;
i++) if (snake[0].x == snake[i].x &
&
snake[0].y == snake[i].y)return false;
//头部碰到身体的任意一个部位 return true;
}
/*随机生成食物的位置*/bool print_food(){
srand((unsigned)time(0));
//随机种子 bool e;
while (1) {
e = true;
int i = (int)random(0,m)+1;
int j = (int)random(0,n)+1;
food.x = i;
food.y = j;
//食物的位置随机 for (int k = 0;
k = snake_length - 1;
k++) //食物不能出现在蛇的身体的任意位置处 {
if (snake[k].x == food.x &
&
snake[k].y == food.y) {
e= false;
break;
}
}
if (e)break;
}
//在食物的位置处标记,食物符号为“$”;
locate(food.x,food.y);
cout "$";
return true;
}
/*蛇的前进*/bool go_ahead(){
node tmp;
bool e = false;
tmp = snake[snake_length-1];
//蛇尾 for (int i = snake_length - 1;
i >
= 1;
i--) {
snake[i] = snake[i - 1];
//后移一位 }
snake[0].x += direct[dir][0];
snake[0].y += direct[dir][1];
locate(snake[1].x, snake[1].y);
//定位到头部的后一位 cout "*";
/*吃到食物*/ if (snake[0].x == food.x&
&
snake[0].y == food.y) {
snake_length++;
e = true;
snake[snake_length - 1] = tmp;
}
/*输出此时蛇状态*/ if (!e) {
locate(tmp.x, tmp.y);
cout " ";
}
else print_food();
locate(snake[0].x, snake[0].y);
cout "@";
/*** 如果自撞 ***/ if (!is_correct()) {
System("cls");
cout "You lose!" endl "Length: " snake_length endl;
return false;
}
return true;
}
int main(){
//游戏提示: cout "--------------------贪吃蛇---------------------" endl;
cout "请先输入两个数,表示地图大小.要求长宽均不小于10." endl;
cout "请注意窗口大小,以免发生错位.建议将窗口调为最大." endl;
cout "再选择难度.请在1-10中输入1个数,1最简单,10则最难" endl;
cout "然后进入游戏画面,以方向键控制方向.祝你游戏愉快!" endl;
cout "-----------------------------------------------" endl;
cin >
>
m >
>
n;
if (m 10 || n 10 || m>
25 || n>
40) {
cout "ERROR" endl;
system("pause");
return 0;
}
//输入难度系数:1-10;
int hard;
cin >
>
hard;
if (hard = 0 || hard >
100) {
cout "ERROR" endl;
system("pause");
return 0;
}
//数据初始化:蛇的位置,长度,方向 snake_length = 5;
//长度 clock_t a, b;
char ch;
double hard_len;
for (int i = 0;
i = 4;
i++)//位置 {
snake[i].x = 1;
snake[i].y = 5 - i;
}
dir = 3;
//方向 //输出原始地图、食物和蛇 system("cls");
hide();
print_wall();
print_food();
print_snake();
//在(0,m+2)出显示长度: locate(m + 2, 0);
cout "Now Length:";
//开始游戏 while (1) {
/*难度随长度的增加而提高*/ hard_len = (double)snake_length / (double)(m*n);
/*调节时间,单位是ms*/ a = clock();
while (1) {
b = clock();
if (b - a >
= (int)(400 - 30 * hard)*(1 - sqrt(hard_len)))break;
}
//接收键盘输入的方向//https://blog.csdn.net/wenweimin/article/details/105561 if (_kbhit()) {
ch = _getch();
if (ch == -32) {
ch = _getch();
switch (ch) {
case 72:if (dir == 2 || dir == 3)dir = 0;
break;
case 80:if (dir == 2 || dir == 3)dir = 1;
break;
case 75:if (dir == 0 || dir == 1)dir = 2;
break;
case 77:if (dir == 0 || dir == 1)dir = 3;
break;
}
}
}
//前进 if (!go_ahead())break;
//输出此时的长度 locate(m + 2, 12);
cout snake_length;
}
system("pause");
return 0;
}
相关推荐:
H5的canvas实现贪吃蛇小游戏
js贪吃蛇游戏实现思路和源码_javascript技巧
Java游戏项目:拼图游戏的开发视频教程
以上就是C++实现贪吃蛇游戏的详细步骤及实战演示的详细内容,更多请关注其它相关文章!
声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!
若转载请注明出处: C++实现贪吃蛇游戏的详细步骤及实战演示
本文地址: https://pptw.com/jishu/593121.html
