帮我用c++面对过程思想,使用二维数组构造贪吃蛇游戏场景,请帮我写出代码,不使用结构体,希望直接给出代码不需要解释,要求贪吃蛇可以在没有输入情况下,保持原方向移动
时间: 2024-03-20 19:39:57 浏览: 48
基于c++的贪吃蛇游戏设计
好的,以下是使用 C++ 面向过程思想,使用二维数组构造贪吃蛇游戏场景的代码,不使用结构体,可以在没有输入情况下,保持原方向移动:
```cpp
#include <iostream>
#include <conio.h>
#include <stdlib.h>
#include <time.h>
using namespace std;
const int ROW = 20; // 场景行数
const int COL = 20; // 场景列数
const int SNAKE_LEN = 3; // 初始蛇身长度
int snake[SNAKE_LEN][2]; // 蛇身坐标
int food[2]; // 食物坐标
int direction = 2; // 初始方向:向右
void initSnake(); // 初始化蛇身
void initFood(); // 初始化食物
void drawScene(); // 绘制游戏场景
void moveSnake(); // 移动蛇身
bool isHitWall(); // 判断是否撞墙
bool isHitSnake(); // 判断是否撞到自身
int main()
{
initSnake();
initFood();
drawScene();
while (true)
{
if (_kbhit()) // 判断是否有键盘输入
{
int key = _getch();
switch (key)
{
case 'w': // 上
if (direction != 4) direction = 1;
break;
case 's': // 下
if (direction != 1) direction = 4;
break;
case 'a': // 左
if (direction != 2) direction = 3;
break;
case 'd': // 右
if (direction != 3) direction = 2;
break;
case 27: // ESC
exit(0);
}
}
moveSnake();
if (isHitWall() || isHitSnake())
{
cout << "游戏结束!" << endl;
break;
}
drawScene();
if (snake[0][0] == food[0] && snake[0][1] == food[1]) // 吃到食物
{
initFood();
SNAKE_LEN++;
}
Sleep(100); // 延时,控制蛇身移动速度
}
return 0;
}
void initSnake()
{
for (int i = 0; i < SNAKE_LEN; i++)
{
snake[i][0] = ROW / 2;
snake[i][1] = COL / 2 - i;
}
}
void initFood()
{
srand((unsigned)time(NULL));
food[0] = rand() % ROW;
food[1] = rand() % COL;
}
void drawScene()
{
system("cls"); // 清屏
for (int i = 0; i < ROW; i++)
{
for (int j = 0; j < COL; j++)
{
bool isSnake = false;
for (int k = 0; k < SNAKE_LEN; k++)
{
if (i == snake[k][0] && j == snake[k][1])
{
cout << "O";
isSnake = true;
break;
}
}
if (!isSnake)
{
if (i == food[0] && j == food[1])
cout << "*";
else
cout << " ";
}
}
cout << endl;
}
}
void moveSnake()
{
for (int i = SNAKE_LEN - 1; i > 0; i--)
{
snake[i][0] = snake[i - 1][0];
snake[i][1] = snake[i - 1][1];
}
switch (direction)
{
case 1: // 上
snake[0][0]--;
break;
case 2: // 右
snake[0][1]++;
break;
case 3: // 左
snake[0][1]--;
break;
case 4: // 下
snake[0][0]++;
break;
}
}
bool isHitWall()
{
if (snake[0][0] < 0 || snake[0][0] >= ROW || snake[0][1] < 0 || snake[0][1] >= COL)
return true;
else
return false;
}
bool isHitSnake()
{
for (int i = 1; i < SNAKE_LEN; i++)
{
if (snake[0][0] == snake[i][0] && snake[0][1] == snake[i][1])
return true;
}
return false;
}
```
希望能够帮到你,如果有任何疑问,可以随时问我哦!
阅读全文