小游戏:人生中写的第一个小游戏——贪吃蛇(C语言)

这篇具有很好参考价值的文章主要介绍了小游戏:人生中写的第一个小游戏——贪吃蛇(C语言)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

        小编开了一个关于游戏的专栏,主要是运用easyx图形库进行的。


系列文章的目录:     

       第一章:人生中写的第一个小游戏——贪吃蛇(C语言)


        这个游戏的代码我在gitee上发布了,大家如果不嫌弃,可以进入这个网址进行查看和复制:https://gitee.com/rising-sun-1。

贪吃蛇csdn,简单地利用easyx图形库的C语言小游戏,c语言,开发语言

       今天,我们来用easyx图形库,C语言进行编写代码。首先,我们要进行分析这个小游戏的大致思路,然后将代码编写下来。


目录

分析思路:

窗口:

贪吃蛇:

食物:

其他功能:

代码编写:

编写代码前的准备:

开头准备:

蛇的创建: 

食物的创建:

游戏结束的条件:

游戏初始化:

主函数内部:


分析思路:

窗口:

       首先,要先创建一个像素窗口,利用initgraph函数进行创建(这个函数的基本用法可以进入这个网站进行查看:https://docs.easyx.cn/zh-cn/intro)。

       创建完后开始想这个游戏的基本元素:贪吃蛇食物。下面对贪吃蛇和食物进行分析:

贪吃蛇:

       对于贪吃蛇来说,需要好几个格子,那么这些格子有如何联系在一起呢?因为数组是要求相同类型的数据存放在一起,但对于在二维空间中存放蛇的身体需要坐标来表示,所以用数组相对麻烦,我们可以用结构体进行表示蛇的结点。因为蛇要移动,所以我们可以将头结点进行移动,然后将尾结点删除,这样,蛇就可以进行移动了。蛇在移动过程中,需要进行方向的变换,哪要如何变化方向呢?可以对坐标进行考虑,例如,向下移动,纵坐标就加一等等。

食物:

       食物是需要随机分布的,所以要进行随机数 的选取,利用rand函数(用cplusplus.com进行查看函数的用途),为了使随机数更加随机,我们需要使用time函数进行(需要调用头文件#include <time.h>)。 

其他功能:

       其他功能还有蛇吃掉食物,蛇的身体进行加长,游戏结束的条件,游戏结束后进行重新初始化,在写代码时进行讨论。

大致思路如上,下面进行代码的编写:

代码编写:

编写代码前的准备:

        首先,要先下载easyx图形库(https://easyx.cn/),下载完以后,按图操作,进入vs中创建项目,选择控制台应用,进入编写代码即可。

贪吃蛇csdn,简单地利用easyx图形库的C语言小游戏,c语言,开发语言

开头准备:

       首先,进行编写头文件和宏,屏蔽了scanf函数的不安全性。

(为什么不用scanf_s函数,是因为scanf_s函数是vs的,其他编译器上不兼容,造成了函数的不可移植性。)

贪吃蛇csdn,简单地利用easyx图形库的C语言小游戏,c语言,开发语言

       接下来,创建一个main函数,根据分析思路进行创建一个800像素高,600像素宽的窗口,然后利用line函数进行表格的绘制,大致代码如下:

void printline()   //进行表格的绘画
{
	int x = 0;
	for (x = 0; x <= 800; x += NODE_WIDTH)
	{
		line(x, 0, x, 600);   //line函数是画出直线的函数
	}
	int y = 0;
	for (y = 0; y < 600; y += NODE_WIDTH)
	{
		line(0, y, 800, y);
	}
}
int main()
{
    //创建窗口
	initgraph(800, 600);
	setbkcolor(RGB(164, 225, 202)); //创建一个像素窗口
	cleardevice();
	getchar();
	closegraph();
	return 0;
}

蛇的创建: 

      然后进行蛇的创建,利用结构体进行创建一个结点。

typedef struct {   //贪吃蛇的结点
	int x;
	int y;
}node;

       定义一下蛇的初始位置:

node snack[100] = { {5, 7}, {4, 7}, {3, 7}, {2, 7}, {1, 7} };

       因为蛇的身体是由多个矩形(正方体)构成的,所以需要利用循环进行构建,已知蛇的长度用for循环进行构建。

       循环在C语言中有三个,分别是:for,while,do while。他们有一些区别使得他们适用的场景不太相同,如果已知循环的次数用for循环,如果不知道循环的次数用while循环,如果想要先循环一次则用do while循环。

void printsnack(node* snack, int n)  //进行蛇主题的绘画
{
	int left, right, bottom, top;
	int i = 0;
	for (i = 0; i < n; i++)
	{
		left = snack[i].x * NODE_WIDTH;
		top = snack[i].y * NODE_WIDTH;
		right = (snack[i].x + 1) * NODE_WIDTH;
		bottom = (snack[i].y + 1) * NODE_WIDTH;
		solidrectangle(left, top, right, bottom); 
	}
}

       建立完蛇身后进行蛇的移动,如何使蛇移动呢?利用坐标使蛇进行移动,例如,将前一个结点的值传入后一个结点的值,循环一下,就会使蛇向右前进一个,利用头结点使蛇进行移动,也是利用头结点进行控制方向,例如,向上移动,头结点的纵坐标减一,代码如下:

node snackmove(node* snack, int length, int direction) //蛇移动的函数
{
	node newfinsh = snack[length - 1];  //将蛇结点的最后一个结点保存下来
	for (int i = length - 1; i > 0; i--)
	{
		snack[i] = snack[i - 1];   //将前一个蛇结点移动到后一个蛇结点,进行蛇的移动
	}
	node head;  //定义一个头结点并利用头结点进行方向的移动
	head = snack[0];
	if (direction == eUp)
	{
		head.y--;
	}
	else if (direction == eDown)
	{
		head.y++;
	}
	else if (direction == eLeft)
	{
		head.x--;
	}
	else if (direction == eRight)
	{
		head.x++;
	}
	snack[0] = head;
	return newfinsh;
}

       下面就是如何进行键盘交互,就是在键盘上输入‘w',会使蛇向上运动。首先利用_kbhit函数进行检查输入缓存区中是否有数据,利用getch()函数进行从缓存区中获取输入数据并做相应的数据。在这里要注意蛇不能往正在移动方向的反方向进行移动,所以需要加上条件。

void changedirection(enum direction* pD)   //中间有键盘交互的代码
{ 
	if (_kbhit() != 0)//检查输入缓存区中是否有数据
	{
		char c = _getch();//从缓存区中获取输入数据并做相应的数据
		switch (c)
		{
		case 'w':
			if(*pD != eDown) //要注意蛇不能向正在移动的反方向进行移动
			*pD = eUp;
			break;
		case 's':
			if(*pD != eUp)
			*pD = eDown;
			break;
		case 'a':
			if(*pD != eRight)
			*pD = eLeft;
			break;
		case 'd':
			if(*pD != eLeft)
			*pD = eRight;
			break;
		}
	}
}

食物的创建:

       食物的创建是需要随机分布的,所以利用随机数进行食物位置的随机。随机值是需要在创建的窗口内的,不能超过窗口。食物也不能创建在蛇的身体上,代码如下:

node creatfood(node* snack, int length)  //创建食物
{
	node food;
	while (1)
	{
		food.x = rand() % (800 / NODE_WIDTH); //利用随机数进行食物位置的随机
		food.y = rand() % (600 / NODE_WIDTH);
		int i = 0;
		for (i = 0; i < length; i++) //利用for循环一一遍历,防止食物生成在蛇身上
		{
			if (food.x == snack[i].x && food.y == snack[i].y)
			{
				break;
			}
		}
		if (i < length) //如果i小于蛇的长度,则需要继续遍历,知道i大于蛇的长度
		{
			continue;
		}
		else
			break;
	}
	return food;
}

       在窗体上打印出食物就相对容易,也是利用solidrectangle函数进行绘制的,不过为了区分食物和蛇的颜色,我们可以利用setfillcolor函数进行填充不同的颜色。

游戏结束的条件:

       条件是蛇不能碰到墙壁,蛇不能碰到蛇身,用if判断就可以搞定。要注意这个函数的返回类型是bool类型。

bool isgameover(node* snack, int length)//游戏结束的条件
{
	if (snack[0].x < 0 || snack[0].x>800 / NODE_WIDTH)//当蛇碰到墙壁,游戏结束
		return true;
	if (snack[0].y < 0 || snack[0].y>600 / NODE_WIDTH)
		return true;
	for (int i = 1; i < length; i++)   //当蛇碰到蛇身游戏结束
	{
		if (snack[0].x == snack[i].x && snack[0].y == snack[i].y)
			return true;
	}
	return false;
}

游戏初始化:

        就是让游戏进行重新开始游戏的状态。

主函数内部:

        要用Sleep函数进行调解蛇移动的快慢,蛇如果吃到了食物,则蛇变长。

while (1)
	{
		cleardevice();
		printline();
		printsnack(snack, length);
		printfood(food);
		Sleep(500);
		changedirection(&d);
		node newlist = snackmove(snack, length, d);
		if (snack[0].x == food.x && snack[0].y == food.y)
		{
			if(length < 100)
			{
				snack[length] = newlist;
				length++;
			}
			food = creatfood(snack, length);
		}
		if (isgameover(snack, length) == true)
		{
			reset(snack, &length, &d);
			food = creatfood(snack, length);
		}
	}

          感谢大家的观看,如果有错,希望大佬批评指正。这是个刚刚踏上编程之旅的萌新。文章来源地址https://www.toymoban.com/news/detail-696759.html

到了这里,关于小游戏:人生中写的第一个小游戏——贪吃蛇(C语言)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 使用Java实现一个简单的贪吃蛇小游戏

    基于java实现贪吃蛇小游戏,主要通过绘制不同的图片并以一定速度一帧一帧地在窗体上进行展示。 开发工具:eclipse java工具包:jdk1.8 代码地址:https://gitee.com/jay_musu/games-and-tools.git 创建一个新的项目,并命名。创建一个名为images的文件夹用来存放游戏相关图片。然后再在项

    2024年02月11日
    浏览(31)
  • JavaScript做一个贪吃蛇小游戏,无需网络直接玩。

    用JavaScript做一个贪吃蛇小游戏,无需网络 = 打开即可玩。 直接按上下左右键就可以玩起来了 欢迎关注我的原创文章:小伙伴们!我是一名热衷于前端开发的作者,致力于分享我的知识和经验,帮助其他学习前端的小伙伴们。在我的文章中,你将会找到大量关于前端开发的精

    2024年03月21日
    浏览(38)
  • 用java写一个贪吃蛇小游戏(源码在最后)

    涉及技能: 循环、分支 方法的抽取 数组的使用 面向对象 继承,子类方法的重写 接口,接口的实现 GUI(图像化界面编程) GUI中的组件: 7.1 窗口 7.2 弹窗 7.3 面板 7.4 文本框 7.5 列表框 7.6 按钮 7.7 图片 7.8 交互的事件:监听事件(鼠标事件,键盘事件) GUI技术,不流行了!!

    2024年02月03日
    浏览(29)
  • 你的第一个微信小游戏,教你从0开始制作小游戏(一)

    微信开放文档 Cocos引擎_游戏开发引擎 发布流程就是先在cocos中编写你的游戏,然后生成对应的软件包,再到微信开发者工具上传到微信小程序平台。 Cocos是典型的组件节点式的开发,3.x版本之前的语言是js,ts都可以。3.x版本之后就只能用ts。 Introduction · Cocos Creator使用手册

    2024年02月12日
    浏览(35)
  • 【C语言】做一个贪吃蛇小游戏,完整代码&附带视频演示

    视频演示: https://www.bilibili.com/video/BV1pt421a7Nu/?spm_id_from=333.999.0.0vd_source=82b65865be0947de29bd55efc8cdb40a 编译环境:linux(Vmware16.2.4 + Ubantu20.04.3); 小蛇🐍只能在固定的范围内活动; 可以利用键盘方向键控制小蛇🐍的前进方向; 活动范围内会随机生成食物; 小蛇🐍吃到食物,身

    2024年02月21日
    浏览(32)
  • 如何用MetaGPT帮你写一个贪吃蛇的小游戏项目

    MetaGPT是基于大型语言模型(LLMs)的多智能体写作框架,目前在Github开源,其Start数量也是比较高的,是一款非常不错的开源框架。 下面将带你进入MetaGPT的大门,开启MetaGPT的体验之旅。首先是入门教程,如何安装及使用MetaGPT。 一、环境安装 python 环境安装,MetaGPT所需的Python环

    2024年01月19日
    浏览(31)
  • 10分钟教你用Python写一个贪吃蛇小游戏,适合练手项目

    贪吃蛇,大家应该都玩过。当初第一次接触贪吃蛇的时候 ,还是能砸核桃的诺基亚上,当时玩的不亦乐乎。今天,我们用Python编程一个贪吃蛇游戏,下面我们先看看效果: 所有的游戏最主要的内容都是程序的内循环,这才是保证一个游戏能够正常运行的前提。 以下是编写贪吃

    2024年01月17日
    浏览(35)
  • 一篇文章教会你写一个贪吃蛇小游戏(纯C语言)

    实现基本的功能 : • 贪吃蛇地图绘制 • 蛇吃⻝物的功能(上、下、左、右⽅向键控制蛇的动作) • 蛇撞墙死亡 • 蛇撞⾃⾝死亡 • 计算得分 • 蛇⾝加速、减速 • 暂停游戏 Win32 API是一套由Microsoft提供的应用程序编程接口,用于开发Windows平台上的应用程序。它包括了丰

    2024年01月22日
    浏览(34)
  • 初识Unity(十步做好你的第一个unity小游戏)

    一、unity的整体认识 1、创建项目工程文件以及unity布局介绍 (1)打开unityhub,新建项目工程(Project)选择保存路径。 (2)unity的多种布局(窗口的排列)。 认识了tall布局下各个view的功能,四个开发视图(Scene,Project,Hierarchy,Inspector)以及一个game视图。 Scene(场景)视图

    2024年01月24日
    浏览(37)
  • 【小程序】快来开发你的第一个微信小游戏(详细流程)

    🥳 作者:伯子南 😎 坚信: 好记性不如乱笔头,独乐乐不如众乐乐 💪 个人主页:https://blog.csdn.net/qq_34577234?spm=1010.2135.3001.5421 👬🏻 觉得博主文章不错的话,请三连支持一下!如有需要我的支持,请私信! 本文通过开发一个简单的小游戏,来带领大家实操一下开发小游戏

    2024年02月03日
    浏览(38)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包