完整版! 大一新手C语言数据结构实现简单贪吃蛇游戏

贪吃蛇

1.前言简述

学习编程快一年了,偶然看到网上有做贪吃蛇的视频,于是便一时兴起,用两天时间跟着视频做了起来,在制作过程中也遇到不少问题和陌生的知识,因此通过想博客与大家分享,讨论。(游戏虽然做出来了,但笔者自己也有很多问题一知半解,如有解释不当,欢迎各位解答指正!)

2.编写语言及工具

语言:C语言 工具:Visual Studio 2019

3.游戏的头文件代码(.h)

注:整个游戏包含7个头文件(3个.h文件,4个.c文件)

  • .h文件 中一般放的是同名.c文件中定义的变量、数组、函数的声明,声明后.c文件可以直接使用。
  • .c文件一般放的是变量、数组、函数,无需再重复定义。
  • 使用.h文件和.c文件的原因主要是为了解决文件编译时重复声明的问题,相对来说使代码结构更清晰(改bug也更快)。

3.1map.h

#pragma once
//这个pragma相当于编译指示,我是通过vs2019的类导向功能同时创建.h和.c文件自动出现的,不加上面这句也可以
enum
{
   
	row = 26, col = 26
};
//初始化二维数组
void InitWall();
//输出边界墙
void DrawWall();
//设置场景中的字符
void SetWall(int x, int y, char key);
//获取场景中的字符
char GetWall(int x, int y);
//字符二维数组
char GameArray[row][col];
//移动光标打印字符
void PrintChar(int x,int y,char key);

3.2snake.h

#pragma once
//#define _CRT_SECURE_NO_WARRINGS
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
//定义结点结构体
struct Point
{
   
	int x;
	int y;
	struct Point* next;
};
//定义运动方向
enum EDiection
{
   
	up='w',down='s',left='a',right='d'
};
//初始化蛇
void InitSnake();
//销毁蛇
void DestroyPoint();
//添加结点
void AddPoint(int x, int y);

//蛇头指针
struct Point* pHead;

//删除结点
void DelPoint();

enum EDiection direction;

//蛇头的坐标,这个决定了游戏是否继续,非常重要!!!!!
int x;
int y;

3.3Food.h

#pragma once
void SetFood();
int FoodX;
int FoodY;

4.游戏的源文件代码(.c)

4.1.地图模块(map.c)

#include "map.h"
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <Windows.h>

//初始化二维数组
void InitWall()
{
   
	for (int i = 0; i < row; i++)
	{
   
		for (int j = 0; j < col; j++)
		{
   
			if (i == 0 || j == 0 || i == row - 1 || j == col - 1)
			{
   
				GameArray[i][j] = '*';//边界围墙
			}
			else
			{
   
				GameArray[i][j] = ' ';//活动区域
			}
		}
	}
}
//输出边界墙
void DrawWall()
{
   
	for (int i = 0; i < row; i++)
	{
   
		for (int j = 0; j < col; j++)
		{
   
			printf("%c ", GameArray[i][j]);
		}
		switch (i)
		{
   
		case 5:printf("贪吃蛇游戏"); break;
		case 9:printf("操作提示:"); break;
		case 11:printf("上: w"); break;
		case 13:printf("下: s"); break;
		case 15:printf("左: a"); break;
		case 17:printf("右: d"); break;
		default:break;
		}
		printf("\n");
	}
}
//设置场景中的字符
void SetWall(int x, int y, char key)
{
   
	GameArray[x][y] 
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值