用c语言写一个贪吃蛇的小游戏
时间: 2023-11-21 08:05:42 浏览: 56
C语言小游戏源代码_贪吃蛇.rar_c语言 小游戏 贪吃蛇
好的,请稍等,我会为您找到相关的资料。
实现贪吃蛇游戏的基本思路是:绘制游戏窗口,初始化游戏地图,循环更新蛇的坐标和长度,绘制蛇和食物,判断蛇是否撞墙或咬到自己,更新得分等等。
以下是一个简单的贪吃蛇游戏的 C 语言代码示例:
```c
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
#include <windows.h>
#define MAXSIZE 100 // 最大蛇的长度
int map[20][20]; // 游戏地图
int snake[MAXSIZE][2]; // 蛇的坐标数组
int length = 2; // 蛇的初始长度
int score = 0; // 得分
int dir = 1; // 蛇的初始方向
void gotoxy(int x, int y) // 光标移动函数
{
COORD pos;
pos.X = x;
pos.Y = y;
SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), pos);
}
void init() // 初始化地图和蛇
{
int i, j;
for (i = 0; i < 20; i ++) // 初始化地图
{
for (j = 0; j < 20; j ++)
{
if (i == 0 || i == 19 || j == 0 || j == 19)
map[i][j] = -1; // 设置边界为障碍物
else map[i][j] = 0;
}
}
snake[1][0] = 1; // 初始化蛇
snake[1][1] = 1;
snake[0][0] = 1;
snake[0][1] = 2;
map[1][1] = 1;
map[1][2] = 2;
}
void show() // 绘制游戏画面
{
int i, j;
gotoxy(0, 0);
for (i = 0; i < 20; i ++)
{
for (j = 0; j < 20; j ++)
{
if (map[i][j] == -1) printf("■"); // 绘制边界障碍物
else if (map[i][j] == 0) printf(" "); // 绘制空地
else printf("●"); // 绘制蛇和食物
}
printf("\n");
}
printf("score: %d\n", score); // 显示得分
}
void update() // 更新蛇和食物的位置
{
int i, j;
int x = snake[0][0], y = snake[0][1];
if (dir == 1) y ++; // 根据方向更新蛇的坐标
else if (dir == 2) x --;
else if (dir == 3) y --;
else if (dir == 4) x ++;
if (map[x][y] == -1 || map[x][y] > 0) // 判断是否撞墙或咬到自己
{
printf("\nGame Over!\n");
exit(0);
}
if (map[x][y] == -2) // 如果吃到食物
{
length ++; // 增加蛇的长度
score += 10; // 增加得分
int fx, fy;
do // 随机生成新的食物坐标
{
fx = rand() % 18 + 1;
fy = rand() % 18 + 1;
} while (map[fx][fy] != 0);
map[fx][fy] = -2;
}
else // 如果没有吃到食物,则删除蛇的尾部
{
int tx = snake[length - 1][0];
int ty = snake[length - 1][1];
map[tx][ty] = 0;
}
for (i = length - 1; i >= 1; i --) // 更新蛇的坐标数组
{
snake[i][0] = snake[i - 1][0];
snake[i][1] = snake[i - 1][1];
map[snake[i][0]][snake[i][1]] = i;
}
snake[0][0] = x;
snake[0][1] = y;
map[x][y] = 1;
}
void input() // 处理用户输入
{
if (_kbhit()) // 如果有按键按下
{
char ch = _getch(); // 获取按下的键码
if (ch == -32) // 如果是方向键
{
ch = _getch(); // 再次获取键码
if (ch == 72 && dir != 3) dir = 1; // 上
else if (ch == 75 && dir != 4) dir = 2; // 左
else if (ch == 80 && dir != 1) dir = 3; // 下
else if (ch == 77 && dir != 2) dir = 4; // 右
}
}
}
int main()
{
srand((unsigned)time(NULL)); // 初始化随机数种子
init(); // 初始化地图和蛇
map[rand() % 18 + 1][rand() % 18 + 1] = -2; // 随机生成食物坐标
while (1)
{
show(); // 绘制游戏画面
update(); // 更新蛇和食物的位置
input(); // 处理用户输入
Sleep(200); // 暂停一段时间,降低游戏速度
}
return 0;
}
```
请注意,这段代码仅供参考,可能存在一些问题,您需要根据实际情况进行修改和完善。
阅读全文