零基础的c十十简单小游戏贪吃蛇
时间: 2023-07-03 10:28:24 浏览: 47
好的,我可以为您提供一份简单的C语言贪吃蛇游戏代码,帮助您入门。
```c
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#include <time.h>
#include <windows.h>
#define WIDTH 60 // 定义游戏画面宽度
#define HEIGHT 20 // 定义游戏画面高度
#define INIT_SNAKE_LEN 3 // 定义初始贪吃蛇长度
#define TARGET_NUM 10 // 定义目标数量
typedef enum Direction{UP, DOWN, LEFT, RIGHT} Direction; // 定义方向枚举类型
typedef struct Point{ // 定义坐标结构体
int x;
int y;
} Point;
Point snake[WIDTH * HEIGHT]; // 定义贪吃蛇数组
int target_x, target_y; // 定义目标的坐标
int score = 0; // 初始化得分
Direction dir; // 初始化方向
/* 函数声明 */
void initGame();
void drawGame();
void generateTarget();
void updateSnake();
int checkCollision();
int checkEatTarget();
int main() {
initGame(); // 初始化游戏
while(1) {
drawGame(); // 绘制游戏画面
updateSnake(); // 更新贪吃蛇位置
if(checkCollision()) { // 检查是否碰到边界或贪吃蛇自身
printf("\nGame over!\n");
system("pause");
return 0;
}
if(checkEatTarget()) { // 检查是否吃到目标
score++; // 得分加1
if(score == TARGET_NUM) { // 判断是否达到目标数量
printf("\nYou win!\n");
system("pause");
return 0;
}
generateTarget(); // 生成新的目标
}
Sleep(100); // 延时100毫秒,控制游戏速度
}
return 0;
}
/* 初始化游戏 */
void initGame() {
srand((unsigned)time(NULL)); // 设置随机数种子
int center_x = WIDTH / 2, center_y = HEIGHT / 2; // 计算游戏画面中心点坐标
/* 初始化贪吃蛇 */
for(int i = 0; i < INIT_SNAKE_LEN; i++) {
snake[i].x = center_x + i;
snake[i].y = center_y;
}
/* 初始化目标 */
generateTarget();
/* 初始化方向 */
dir = RIGHT;
}
/* 绘制游戏画面 */
void drawGame() {
system("cls"); // 清空屏幕
/* 绘制游戏边框 */
for(int i = 0; i < WIDTH + 2; i++) {
printf("#");
}
printf("\n");
for(int i = 0; i < HEIGHT; i++) {
printf("#");
for(int j = 0; j < WIDTH; j++) {
int isSnake = 0;
/* 判断当前位置是否为贪吃蛇 */
for(int k = 0; k < INIT_SNAKE_LEN; k++) {
if(snake[k].x == j && snake[k].y == i) {
isSnake = 1;
break;
}
}
/* 判断当前位置是否为目标 */
if(j == target_x && i == target_y) {
printf("O");
} else if(isSnake) {
printf("*");
} else {
printf(" ");
}
}
printf("#\n");
}
for(int i = 0; i < WIDTH + 2; i++) {
printf("#");
}
printf("\n");
/* 输出得分 */
printf("Score: %d\n", score);
}
/* 生成目标 */
void generateTarget() {
int isSnake = 1;
while(isSnake) {
target_x = rand() % WIDTH;
target_y = rand() % HEIGHT;
/* 判断目标是否与贪吃蛇重叠 */
isSnake = 0;
for(int i = 0; i < INIT_SNAKE_LEN; i++) {
if(snake[i].x == target_x && snake[i].y == target_y) {
isSnake = 1;
break;
}
}
}
}
/* 更新贪吃蛇位置 */
void updateSnake() {
Point head = snake[0];
Point tail = snake[INIT_SNAKE_LEN - 1];
/* 根据方向计算新的头部坐标 */
switch(dir) {
case UP:
head.y--;
break;
case DOWN:
head.y++;
break;
case LEFT:
head.x--;
break;
case RIGHT:
head.x++;
break;
}
/* 将新的头部插入贪吃蛇数组 */
for(int i = INIT_SNAKE_LEN - 1; i > 0; i--) {
snake[i] = snake[i - 1];
}
snake[0] = head;
}
/* 检查是否碰到边界或贪吃蛇自身 */
int checkCollision() {
Point head = snake[0];
/* 检查是否碰到边界 */
if(head.x < 0 || head.x >= WIDTH || head.y < 0 || head.y >= HEIGHT) {
return 1;
}
/* 检查是否碰到贪吃蛇自身 */
for(int i = 1; i < INIT_SNAKE_LEN; i++) {
if(head.x == snake[i].x && head.y == snake[i].y) {
return 1;
}
}
return 0;
}
/* 检查是否吃到目标 */
int checkEatTarget() {
Point head = snake[0];
if(head.x == target_x && head.y == target_y) {
/* 将目标插入贪吃蛇数组 */
snake[INIT_SNAKE_LEN].x = target_x;
snake[INIT_SNAKE_LEN].y = target_y;
INIT_SNAKE_LEN++;
return 1;
}
return 0;
}
```
希望这份代码能帮助您入门C语言贪吃蛇游戏开发。