用 c语言编写一个贪吃蛇
时间: 2023-09-11 09:09:30 浏览: 113
好的,我可以为您提供一个简单的贪吃蛇游戏的 C 语言代码,以下是代码:
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
#include <time.h>
#include <windows.h>
#define ROW 20
#define COL 30
#define SPEED 100
int map[ROW][COL] = {0}; // 0 表示空白位置,1 表示蛇身,2 表示食物
int len = 0; // 蛇身长度
int x = 0, y = 0; // 蛇头坐标
int fx = 0, fy = 0; // 食物坐标
int dir = 1; // 蛇头方向,1 上,2 下,3 左,4 右
void initMap(); // 初始化地图
void drawMap(); // 绘制地图
void createFood(); // 产生食物
int move(); // 移动蛇
int check(); // 检查游戏是否结束
int main()
{
initMap();
createFood();
while(1)
{
system("cls"); // 清屏
if(drawMap()) // 绘制地图,如果游戏结束返回 1
break;
if(_kbhit()) // 检测键盘输入
{
int c = _getch();
if(c == 72 && dir != 2) // 上
dir = 1;
else if(c == 80 && dir != 1) // 下
dir = 2;
else if(c == 75 && dir != 4) // 左
dir = 3;
else if(c == 77 && dir != 3) // 右
dir = 4;
}
if(!move()) // 移动蛇,如果游戏结束返回 0
break;
Sleep(SPEED); // 延时
}
printf("Game Over!\n");
return 0;
}
void initMap()
{
int i, j;
for(i = 0; i < ROW; i++)
for(j = 0; j < COL; j++)
if(i == 0 || i == ROW - 1 || j == 0 || j == COL - 1)
map[i][j] = -1; // 边界标记为 -1
}
void drawMap()
{
int i, j;
for(i = 0; i < ROW; i++)
{
for(j = 0; j < COL; j++)
{
if(map[i][j] == 0)
printf(" "); // 空白位置
else if(map[i][j] == -1)
printf("#"); // 边界
else if(map[i][j] == 1)
printf("*"); // 蛇身
else if(map[i][j] == 2)
printf("$"); // 食物
}
printf("\n");
}
return check(); // 检查游戏是否结束
}
void createFood()
{
srand(time(NULL));
do{
fx = rand() % (COL - 2) + 1;
fy = rand() % (ROW - 2) + 1;
}while(map[fy][fx] != 0);
map[fy][fx] = 2;
}
int move()
{
int nx = x, ny = y; // 新的蛇头坐标
switch(dir)
{
case 1: ny--; break; // 上
case 2: ny++; break; // 下
case 3: nx--; break; // 左
case 4: nx++; break; // 右
}
if(map[ny][nx] == -1 || map[ny][nx] == 1) // 撞到边界或自己
return 0;
if(map[ny][nx] == 2) // 吃到食物
{
len++; // 长度加 1
createFood(); // 产生新的食物
}
map[y][x] = 1; // 旧蛇头变为蛇身
x = nx; y = ny; // 更新蛇头坐标
map[y][x] = -1; // 新蛇头坐标标记为 -1
int i, j, k = 0;
for(i = 0; i < ROW; i++)
for(j = 0; j < COL; j++)
if(map[i][j] == 1)
{
if(k >= len) // 蛇尾
map[i][j] = 0; // 变为空白位置
else
k++; // 计算蛇身长度
}
return 1;
}
int check()
{
if(len >= ROW * COL - 2) // 蛇身长度达到最大值
return 1;
return 0;
}
说明:
该贪吃蛇游戏使用 map
数组表示地图,其中 0 表示空白位置,1 表示蛇身,-1 表示边界,2 表示食物。
游戏有四个方向:上、下、左、右,通过 dir
变量表示。
游戏初始化地图、产生食物、移动蛇等操作都在相应的函数中实现。
游戏结束条件为蛇身长度达到最大值或者撞到边界或自己。
游戏采用延时实现动画效果,通过 SPEED
宏定义控制速度。
相关推荐







