C语言:项目——从零编写小游戏(走迷宫)手机h游戏「C语言:项目——从零编写小游戏(走迷宫)」
目录
前言
一、从Hello World开始
二、一个移动的游戏角色
三、交互的实现
四、在迷宫中探索
五、完整代码示例
六、聪明的搬运工
尾声
作为一名游戏玩家,经过一段时间的C语言的学习后,我在想能不能通过编写一些小游戏来使学习过程变得没那么枯燥,同时用实战加深对所学知识的理解。
先写一个所有编程学习者最亲切的程序,打印“Hello World”。
程序运行时我们发现,运行结果总是一闪而过,且每执行程序都会遗留上次运行的痕迹。
让我们通过下述语句来改进一下这个程序:
1、语句:system("cls"); //表示对控制台窗口清屏,该函数包含在头文件stdlib.h中。
2、语句:getch(); //表示按任意键结束,该函数包含在头文件conio.h中。
先声明一个游戏角色的结构体用于将角色属性存储在变量里。
运动的原理是,先传递移动后的坐标给角色,再删除角色原来的痕迹,把光标移动到角色坐标位置,然后打印出角色符号。
光标移动函数CursorJump()是一个自定义函数,其中调用的关键字包含在windows.h头文件内。
游戏角色已经有了,下面就是让他根据我们的按键指令顺着方向移动。
角色不会只执行一次操作,我们再用一个while(1)循环结构语句让程序无限循环起来。当然,也可以使用for(;;)语句,效果相同。
怎么样,是不是有了玩游戏的感觉了?不过这个游戏没有什么目的,也没有什么判断胜负的条件。下面我们就利用这个能控制它移动的游戏角色来做一个更有趣的游戏吧!
还记得小时候再一些小人书和杂志上看见的迷宫游戏吗?好的,现在我们用C语言来编个走迷宫的游戏,重温一下童年吧。
首先,我们定义一个二维数组map,用它来保存迷宫的地图。其中,数组元素的下标是地图上的坐标点,数组元素的数值是地图在该坐标的地形信息。
然后,用双循环结构把地图打印在窗口上。这里我用用' '表示通道,'■'表示墙壁,用' #'表示目的地。
在游戏循环中,我们再增加了一些用来判断移动后结果的语句,遇到通道就移动,遇到墙壁就停止,遇到目的地就游戏胜利。
哇噻!我们真的做出了一个完整的游戏了。当然,你还可以进行一些优化和内容填充,让它更有游戏性,比如:修改游戏地图、增加地形种类、增加关卡数量、优化UI界面等。
不知道大家有没有玩过“推箱子”的游戏,这是在手机和电子字典上较流行的益智游戏,通过在上述走迷宫游戏的基础上稍微改造一下就能实现。
程序依然用数组map来保存地图,数组元素如果为空格则表示什么也没有,'b'表示箱子,'#'表示墙壁,'*'表示目的地,'i '表示箱子在目的地。我们以后每推一下箱子,不但要改变屏幕的显示,也要改变map相应元素的值。游戏的主循环依然是接收按键,移动坐标,判断交互条件。当接收一个方向键,需要判断小人前面一格的状态,如果是空地或目的地,则人物可以直接移动;如果是墙壁,则不可移动;如果是箱子或目的地上的箱子,则需要继续判断箱子前面一格的状态:如果前一格是空地或目的地,则人推箱子前进,否则不可移动。最后,再增加一个判断胜利的条件,用数组Des来记录全部目的地的坐标,我们每执行一步操作后,程序就要通过Des数组判断这些目的地上是否都有箱子了。
真棒啊!我们可以做游戏了,而且是一个趣味十足的游戏呢!当然,我们可以通过修改map数组来设计不同的游戏地图,我们还可以相互分享好的游戏地图呢。
就像学习音乐,不是要等到把全部乐理学完后才演奏一个完整的曲子,而是刚开始学时就有一些简单的曲子进行演奏,让你立刻就有成就感,很快就能卖弄出来在别人面前表现自己。其实,我觉得通过编写游戏来学习编程,把学习变成游戏,不失为学习计算机的一种好方法。
宣威版权声明:本网信息来自于互联网,目的在于传递更多信息,并不代表本网赞同其观点。其原创性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容、文字的真实性、完整性、及时性本站不作任何保证或承诺,并请自行核实相关内容。本站不承担此类作品侵权行为的直接责任及连带责任。如若本网有任何内容侵犯您的权益,请及时联系我们,本站将会在24小时内处理完毕,E-mail:xinmeigg88@163.com