2020级C语言大作业 – 喵斯快跑

分享20级同学大一上学期用C语言(及少量C++)实现的喵斯快跑(音游)。由于同学们刚学了三个月的编程,实现还不够完善,工程代码、图片音乐素材可以从百度 盘下载:

链接:pan.baidu.com/s/1j9M04h

提取码:mgim

一、设计思路

本游戏参考了同名手机游戏,游戏的核心玩法是跑酷加音游,玩家需要控制角色攻击上下位置不同的怪物。按下D键击打上方怪物,按下K键击打下方怪物。游戏中的怪物会根据音乐的节奏点出现,玩家需要击打掉怪物,直至音乐结束,若人物血量还有剩余,则游戏通关,若血量为零,则游戏失败。玩家操作的人物若错过了节奏点,则会被怪物攻击,角色也会相应的减少血量。游戏会根据角色击打怪物时的距离给出“perfect”、“great”两种不同的得分判定,根据打击效果的不同,玩家会得到不同的得分奖励,同时,游戏还会记录玩家的连击次数,若未击打到怪物,则连击次数会清零。

二、功能描述

1. 界面的初始化

游戏界面主要分为三个界面,初始化函数为menu1,menu2和startup。menu1的功能为点击任意位置进入初始化界面2,其中插入了三张图片,并利用了变量speed的循环实现了闪动的效果。Menu2的功能有以下几点:1.进入游戏界面 2.有关游戏的玩法介绍 3.退出游戏,使用了EasyX中的鼠标点击的函数,划定了几个不同的区域,鼠标在不同区域内点击就会进入不同的界面或者退出游戏。Startup函数的功能有以下几点:1.导入音乐并播放一次 2.使用clock函数对游戏开始计时(确定游戏的出怪时间)3.初始化角色 4.初始化地面和空中的怪物的坐标和速度 5.初始化游戏判定(great和prefect的坐标) 6.初始化画布。

2. 游戏的显示

首先导入游戏的背景图片并实现显示,后导入怪物的图片以及天空和地面怪物(用数组记录怪物的数量),再绘制出判定是否打击到怪物的判定点,使用EasyX中的绘制圆形的函数实现,接着加入了游戏中玩家的得分,人物的血量,玩家打击到怪物时的加分值和连击数,并批量绘制。

3. 与输入无关的更新

首先对人物的血量判定,再用clock函数记录游戏运行的时间并用变量buration进行怪物出现的判定,buration不断更新,当buration达到特定的值时显示怪物,每一个怪物的值都记录在怪物数组之中。在for循环中用isKillDown表示人物是否打到怪物并进行血量和连击次数的更新。

4. 与输入有关的更新

使用了EasyX中的函数获取了玩家输入的按键,输入‘D‘键’击打天空中的怪物,输入‘K’键击打地面上的怪物。用player.Hit函数使在击打怪物时有一定的延时,再使用for循环语句对具体的情况进行判断,比如当按下‘D’键时根据人物和怪物的距离判断是否击打到怪物,若击打到怪物,再对距离进行更加详细的判断,当md[i].isKillMonsterDown()为2时更新prefect的坐标,并将击打掉的怪物放置到界面外,当md[i].isKillMonsterDown()为1时更新great的坐标,并将击打掉的怪物放置到界面外。

5. 主函数的设置

最后将所有的函数加入到主函数中,menu1函数,menu2函数和startup函数直接加入主函数之中,其他函数则利用while循环语句使其不断运行。

三、分步骤实现方法

1. 人物跑动效果和打击怪物的实现

人物跑动和击打怪物是通过将奔跑和击打的图片分别加入不同的图形序列之中,跑动效果通过for循环语句的切换实现,而击打的效果则根据玩家按下不同的按键改变人物的状态来实现。

2. 击打怪物的判定的实现

击打和被怪物攻击的判定主要靠人物前面的判定点来判定,根据导入的怪物图片和判定点之间的距离来判定人物打击怪物是‘prefect’或‘great’或者是被怪物攻击而血量减少。

3. 加入血量,得分和连击数的判定

设置全局变量血量,得分和连击数,根据玩家操作的人物的状态来改变相应的血量,得分和连击数。

4. 怪物的加入

在与输入无关的函数之中,计算游戏界面开始到现在的时间,并用if语句添加怪物出现的时间点,调用怪物出现的函数,实现根据节奏点出怪。最后进行完善和调试。

四、体会与总结

在本次的游戏制作之中,我了解到了小组合作的重要性,制作游戏是一个复杂的过程,一个人制作的话或许要做很长一段时间,但在两个人的分工合作下就变得轻松许多。虽然在一开始我们两个人都觉得像我们这样的初学者做出一个游戏来是几乎不可能的,但还硬着头皮开始着手做,一开始想先打出游戏的结构再将图片插入进去,后听从其他小组的意见先插入图片再实现图片的移动和变化。小组的两个人分工明确,各自为自己的部分负责,一人负责界面的制作和显示的部分,一人负责音乐节奏,人物击打敌人时的判定以及初始化,后两个人的代码合到一起,最终将游戏调试完成。同时在制作的过程中,我也遇到了许多问题,在导入音乐的节奏时,找出音乐节奏时就 比较麻烦,起初构思想用一个程序自动找出音乐的节奏,但无奈构造不出这样的程序选择用专业的软件解析音乐,再手动记下音乐的节奏点,后来本想用文件导入音乐的节奏点,但没能成功,就只好选择手动打出音乐的节奏点, 虽然是个比较死板的办法,但也解决了这个问题。且在 络上没有找到游戏 的有关的各种贴图,就只好自学PS,自己从游戏之中一张张把图片扣出来,虽然抠图的过程还是有点累的,但我也掌握了PS和AR的使用方法,增加了一些其他的计算机技能。在此次制作游戏的过程中我了解到了课堂之外的学习也是十分重要的,因为这种学习的针对性比较强,能解决许多比较现实的问题,且这些知识和技能大多是不会在课堂之上讲授的只能靠自己学习,同时也开阔了我的眼界,让我了解到了计算机学科的深度和广度。我在此次大作业中切实体会到了合作和自我学习的重要之处,合作可以大大提高工作的效率,而自我学习则可以扩充自己的知识面,在以后的学习之路上我也会牢记这两点,并身体力行。

文章知识点与官方知识档案匹配,可进一步学习相关知识C技能树首页概览115756 人正在系统学习中

声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!

上一篇 2021年2月9日
下一篇 2021年2月9日

相关推荐