请帮我用c++语言,二维数组的形式写出贪吃蛇小游戏,不能使用方向枚举,包括函数void gotoxy(int x, int y)//光标移动到(x,y)位置 { HANDLE handle = GetStdHandle(STD_OUTPUT_HANDLE); COORD pos; pos.X = x; pos.Y = y; SetConsoleCursorPosition(handle, pos); },在主函数里面
时间: 2024-03-14 15:45:50 浏览: 69
好的,这是一个比较基础的贪吃蛇游戏,代码如下:
```cpp
#include <iostream>
#include <conio.h>
#include <windows.h>
using namespace std;
const int WIDTH = 30;
const int HEIGHT = 20;
int map[HEIGHT][WIDTH] = {0}; // 0表示空白,1表示蛇身,2表示食物
struct Snake
{
int x, y;
} snake[WIDTH * HEIGHT];
int len = 3;
int fx, fy; // 食物的位置
void init() // 初始化地图
{
for (int i = 0; i < HEIGHT; i++)
{
for (int j = 0; j < WIDTH; j++)
{
if (i == 0 || i == HEIGHT - 1 || j == 0 || j == WIDTH - 1)
{
map[i][j] = -1; // 地图边缘用-1表示,不可通过
}
}
}
// 初始化蛇
for (int i = 0; i < len; i++)
{
snake[i].x = WIDTH / 2 - i;
snake[i].y = HEIGHT / 2;
map[snake[i].y][snake[i].x] = 1;
}
// 初始化食物
fx = rand() % (WIDTH - 2) + 1;
fy = rand() % (HEIGHT - 2) + 1;
map[fy][fx] = 2;
}
void update() // 更新地图
{
// 判断蛇是否吃到食物
if (snake[0].x == fx && snake[0].y == fy)
{
len++;
fx = rand() % (WIDTH - 2) + 1;
fy = rand() % (HEIGHT - 2) + 1;
map[fy][fx] = 2;
}
// 更新蛇
for (int i = len - 1; i > 0; i--)
{
snake[i].x = snake[i - 1].x;
snake[i].y = snake[i - 1].y;
}
// 根据移动方向改变蛇头位置
if (GetAsyncKeyState(VK_UP) && map[snake[0].y - 1][snake[0].x] != -1)
{
snake[0].y--;
}
if (GetAsyncKeyState(VK_DOWN) && map[snake[0].y + 1][snake[0].x] != -1)
{
snake[0].y++;
}
if (GetAsyncKeyState(VK_LEFT) && map[snake[0].y][snake[0].x - 1] != -1)
{
snake[0].x--;
}
if (GetAsyncKeyState(VK_RIGHT) && map[snake[0].y][snake[0].x + 1] != -1)
{
snake[0].x++;
}
// 更新地图
for (int i = 0; i < HEIGHT; i++)
{
for (int j = 0; j < WIDTH; j++)
{
if (map[i][j] == 1)
{
gotoxy(j, i);
cout << "■";
}
if (map[i][j] == 2)
{
gotoxy(j, i);
cout << "★";
}
}
}
}
int main()
{
srand(time(NULL));
init();
while (true)
{
update();
Sleep(100);
}
return 0;
}
```
这个游戏使用了 Windows API 函数 `gotoxy`,可以让光标移动到指定位置输出字符,不过这个函数并不是标准 C++ 的一部分,需要调用 Windows API 头文件 `<windows.h>`。
阅读全文