用C实现贪吃蛇,看看你的C学得怎样?(一)

写在开始

C语言应该是一个程序员入门的语言,通过C入门比较锻炼初学者对于问题的思考能力,更好地打下编程的基础。

有些学习过C的小伙伴想要一个项目来看看自己的C学的怎么样?没问题,贪吃蛇这个小项目比较大众化,难度适中,同时牵涉到的知识点比较多,作为检验的标准再好不过啦!

没有学完C的小伙伴也不要紧,博主会有源码,并且注释比较详细,你可以码一遍,并且事后思考下其中的原理,对你之后的学习也会大有裨益的!毕竟,编程思想才是精华,语言和代码只是实现的工具而已。

好的,废话不多说,开工!

任务清单

看过博主之前的项目讲解的小伙伴一定会知道,博主做一个完整的项目之前,一定会先把一个项目分解成多个任务点,并列成一个清单,方便自己一步步地去开发,这样也清楚自己的进度。

本次项目的任务清单暂定如下:
1.创建地图和起始界面
2.创建蛇,食物、超级食物投放
3.通过键盘控制蛇的移动
4.基本功能(蛇吃食物,蛇的增长等)
5.判断游戏是否结束
6.计算游戏时长
7.加入最高纪录功能
8.游戏等级进度
9.游戏重新开始

如果有啥新的功能想实现就再加呗,随时修改,一步一步来!

代码实现

//定义头文件
#include<stdio.h> 
#include<conio.h>
#include<stdlib.h>
#include<time.h>
#include<windows.h>

//宏定义声明
#define X 23       //定义地图大小
#define Y 50

char map[X][Y];          //地图数组

//定义主函数
int main() 
{
	init();                 //初始化
	menu();					//生成界面
	system("cls");          //清除屏幕内容
	draw_map();            //画地图//定义函数
void init()         //程序开始时的初始化操作
{
	CONSOLE_CURSOR_INFO cursor_info = { 1, 0 };
	SetConsoleCursorInfo(GetStdHandle(STD_OUTPUT_HANDLE), &cursor_info);    //隐藏关标
	int i, j;
	for (i = 0; i<X; i++)
	{
		map[i][0] = 1;          //让第一列为1
		map[i][Y - 1] = 1;        //让最后一列为1
	}
	for (j = 0; j<Y; j++)
	{
		map[0][j] = 1;      //让第一行为1
		map[X - 1][j] = 1;    //让最后一行为1
	}
}

void gotoxy(int i, int j)        //移动光标
{
	COORD position = { j, i };
	SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), position);
}

void draw_map()   //创建地图   
{
	gotoxy(0, 0);
	int i, j;
	for (i = 0; i<X; i++)    //两重for循环遍历数组
	{
		for (j = 0; j<Y; j++)         
		{
			if (map[i][j] == 0)          //为0输出空格
				printf(" ");
			else if(map[i][j]==1)       //为1输出#
				printf("#");
		}
		printf("\n");               //别忘了换行
	}
}

void menu()         //初始菜单界面
{
	printf("\n\n\n\n\n\n\t\t\t********************贪吃蛇(实验版)******************\t\t\t\n\n");
	printf("\t\t\t********************欢迎参与游戏测试******************\t\t\t\n\n");
	printf("\t\t\t********************按任意键开始游戏******************\t\t\t\n\n");
	printf("\t\t\t\t\t      职业工具人\n\n");
	printf("\t\t\t\t请先确保处于英语输入法,否则无法进行游戏");
	_getch();    //保持界面获取字符
}

总结

我们完成了贪吃蛇的地图和开始界面的搭建,用了一个双重循环赋予特定位置特殊值标记,再根据标记值用对应的特殊符号打印。初始菜单涉及了输出语句和简单的转义符排版以及_getch()的获取字符函数。

很简单,对吧!

博主在地图的创建上没有花里胡哨,只是一个最简单的边框限制,如果你觉得博主的地图构建太简单,可以用随机函数,在地图框内随机生成障碍物,算是一个可以拓展的点,就留给你们自己去思考啦!

结语

如果说这篇文章有让你学到一定的知识的话,不妨点个赞和关注,让博主能够看到,如果讲解中有什么错误和疏忽,也劳烦在评论中指出或提问,博主会第一时间进行更新和答复,谢谢!

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值