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

链接:https://pan.baidu.com/s/1f5ntkw_rlZOie7Nq3nNQzQ

提取码:jmdu

一、设计思路

本游戏以同名手机游戏(小鸡弹跳)为参考对象,通过EasyX插件和C语言编程实现。玩家可通过鼠标交互查看游戏说明或开始游戏,开始游戏后点击鼠标左键实现小鸡身体高度增加,从而绕过随机生成的多种障碍物,小鸡安全跑完全程则游戏胜利,头部撞到障碍物则游戏失败。此外,本游戏还添加了游戏进度条、音效、背景变换等效果,丰富了玩家的游戏体验。

二、功能描述

本游戏的主体功能为点击鼠标实现小鸡身体数量的增加和被撞身体随砖块的移动。次要功能为砖块类型的随机出现以及砖块位置的改变。主要函数功能介绍如下:

2.1 主函数

主函数可体现本游戏的游戏框架。首先初始化游戏数据,之后利用while循环更新绘制、和输入无关的更新、和输入有关的更新这三个函数,从而实现画面的不断更新。

2.2 初始化

初始化函数分为startup()函数以及startupBlock()函数。将砖块的初始化从主体初始化中分离,便于不断初始化砖块数据,以达到在同一次程序运行中随机出现不同类型砖块的效果。

2.2.1 startup()函数

1.导入并循环播放音乐(mciSendString())。

2.导入所有图片、背景(loadimage),设置各个图像的初始坐标。

3.新开一个画面(inigraph())。

2.2.2 startupBlock()函数

1.应用枚举类型和随机函数,随机出现不同形式的砖块:n个砖块横向 组合,阶梯形砖块,悬浮砖块,落地长砖块等。

2.开始批量绘制(BeginBatchDraw())。

2.3 显示

显示函数分为show()函数和showStartGame()函数,show()函数中调用showStartGame()函数:

2.3.1 display

设置全局变量display表示游戏当前状态,display=0表示处于游戏开始界面,display=1表示处于游戏状态,display=2表示处于游戏说明界面。

2.3.2 show()函数

1. 主函数中调用show()函数,该函数可与2.5与输入有关的更新进行交互。开始执行程序时默认display=0,显示游戏开始界面。玩家可通过鼠标交互进行操作,若玩家选择开始游戏(display=1)则调用showStartGame()函数从而显示游戏进行画面。

2.开始按键、游戏说明按键的发光显示。

3. 批量绘制图像(FlushBatchDraw())。

2.3.3 showStartGame()函数

1. 显示小鸡、砖块、背景等图像。

2. 在屏幕上方显示小鸡移动的距离,并根据距离显示进度条。

3. 显示游戏失败界面和游戏胜利界面。

4.接收2.5与输入有关的更新中bodynum(身体数量)的值,从而绘制出相应数量的身体。

2.4 与输入无关的更新

与输入无关的更新使用updateWithoutInput()函数,对游戏中各个类元素的状态进行更新并由此判断游戏是否失败或胜利:

1. 调用背景、云朵、砖块等类中的update()函数,进行图像位置自动更新。

2. 进行砖块和身体碰撞的判断及被碰身体随砖块移动的数据更新。

3. 身体某部位被砖块推走后,进行上方身体和头部下落数据的更新。

4. 通过给全局变量finddd赋值,对所有砖块类型与身体碰撞的结果进行分类讨论。

5. 游戏胜利与游戏失败的判定。

2.5 与输入有关的更新

与输入有关的更新使用updateWithInput()函数,实现鼠标点击与其他各部分(如2.3 显示中show()函数)的交互作用,实现游戏中与输入有关的数据和图片的更新及点击音效的播放。

三、分步骤实现方法

3.1 砖块移动,小鸡出现

绘制窗口,利用"EasyXPng.h"头文件导入素材,运用面向对象(class)设置多个类别并搭建大致框架。定义砖块图像横纵坐标x、y与速度v,并在与输入无关的更新中不断更新图像坐标数据,利用while循环实现砖块的移动。

3.2 每按左键增加一个身体

在与输入有关的更新中加入鼠标交互信息,使chickenhead.n(头部图片纵坐标)和chickenbody.b(身体图片纵坐标)的数据发生相应变化,达到每按左键增加一个身体的效果。

3.3 砖块推走身体,上方头部和身体下落(重点&难点)

这部分的判断条件较为严苛,逻辑稍错一点就会出现很离谱的效果。经过反复修改,我们确定如下实现思路:先在画面固定位置导入全部身体图像但并不显示,引入bodynum变量统计玩家点击屏幕的次数并显示对应数量的身体图片,这样可以更便捷地实现小鸡身体随鼠标输入的增加;将每个砖块和身体看做独立的个体,依次遍历,找出与砖块碰撞的身体使其随砖块向左移动,并引入pushNum变量实现其上方的身体及头部的精准下落。

3.4 随机生成不同类型的砖块(难点)

我们的预期目标是在程序的一次运行中可以随机出现不同类型砖块,但是后来发现程序每次运行只会随机生成一种类型的砖块。究其原因,是程序每次运行只会初始化一种砖块的数据。因此我们想到将砖块数据初始化从主体初始化中分离的方法,当上一组砖块从屏幕中消失后,重新初始化砖块数据并绘制对应类型的砖块图像,从而实现在程序的一次运行中随机出现不同类型砖块的效果。

3.5 游戏的完善

游戏的完善也应用了一些巧妙的方法。例如:

1. 为实现背景图片向左移动的连贯显示,我们将背景图片的左右两端处理为相同图像;

2. 查阅资料,应用“mciSendString(_T("play jpmusic wait"),NULL,0,NULL); ”添加“wait”,播放完歌曲再返回,成功解决音乐播放不良问题。

3. 参考“王国保卫战”的血条制作方法,应用putimage的图片部分显示,制作了游戏进度条。

四、体会与总结

刚开始游戏选题时其实遇到了很多困难,经过重重筛选才选择了小鸡弹跳这一款又好玩看起来又不那么难的游戏。刚开始的时候确实是头脑一片空白,毫无头绪,感觉无从下手,但在参考童老师的火柴人的无尽冒险游戏过后,我们也能从无到有,从简单框架到添加功能,使游戏初具雏形。经过一个多月无数次熬夜苦战,我们组俩人也多次在灵感枯竭时又突然想法乍现,在无数个自己和别组同学发现的bug斗智斗勇中获胜,终于写完了小鸡弹跳。我们还添加了可爱的音效,变幻的背景等让游戏变得更有趣。
在做游戏的过程中,真的是快乐与痛苦并存。看似容易敲的代码实则难以实现,我们甚至花了半个多月死磕其中一个bug,这个过程确实是痛苦的,但是,当我们真正解决了问题的那一刻,是多么的欣喜若狂!是多么的舒畅爽快!那些抓耳挠腮的时光也顿时变得有意义起来。
这次期末大作业真的让我收获很多,不仅仅有编程能力的提升,更有全局观,逻辑思维方面更深入的理解。创作游戏时,框架思维贯穿始终,每一个功能都有它应该放置的位置,否则很有可能牵一发而动全身。从无到有地编写出一款游戏,我能感到满满的成就感,也能感到浓浓的内驱力,促使我谨听童老师教诲,深入学习,勤加探索,以做出最满意的成果!

以下是同学们的实现思路讲解视频:

2021级C语言大作业 - 小鸡弹跳相关推荐

  1. 2021级C语言大作业 - 霓虹深渊

    分享21级同学大一上学期用C语言(及少量C++)实现的霓虹深渊游戏.由于同学们刚学了三个月的编程,实现还不够完善,工程代码.图片音乐素材可以从百度网盘下载: 链接:https://pan.baidu. ...

  2. 2021级C语言大作业 - 涂鸦跳跃

    分享21级同学大一上学期用C语言(及少量C++)实现的涂鸦跳跃游戏.由于同学们刚学了三个月的编程,实现还不够完善,工程代码.图片音乐素材可以从百度网盘下载: 链接:https://pan.baidu. ...

  3. 2021级C语言大作业 - 消灭星星

    分享21级同学大一上学期用C语言(及少量C++)实现的消灭星星游戏.由于同学们刚学了三个月的编程,实现还不够完善,工程代码.图片音乐素材可以从百度网盘下载: 链接:https://pan.baidu. ...

  4. 2021级C语言大作业 - 合成一个大西瓜

    分享21级同学大一上学期用C语言(及少量C++)实现的合成一个大西瓜游戏.由于同学们刚学了三个月的编程,实现还不够完善,工程代码.图片音乐素材可以从百度网盘下载: 链接:https://pan.bai ...

  5. 2021级C语言大作业 - 坏蛋冰淇凌

    分享21级同学大一上学期用C语言(及少量C++)实现的坏蛋冰淇凌.由于同学们刚学了三个月的编程,实现还不够完善,工程代码.图片音乐素材可以从百度网盘下载: 链接:https://pan.baidu.c ...

  6. 2021级C语言大作业 - 一笔画

    分享21级同学大一上学期用C语言(及少量C++)实现的一笔画游戏.由于同学们刚学了三个月的编程,实现还不够完善,工程代码.图片音乐素材可以从百度网盘下载: 链接:https://pan.baidu.c ...

  7. 2010C语言添加背景图片_2019级C语言大作业 - 火柴人试炼之地

    C语言大作业 - 火柴人试炼之地https://www.zhihu.com/video/1200491618794606592 分享19级同学大一上学期用C语言实现的火柴人试炼之地.分步骤代码.图片音 ...

  8. 2020级C语言大作业 - 王国保卫战

    王国保卫战 C语言大作业 分享20级同学大一上学期用C语言(及少量C++)实现的王国保卫战.由于同学们刚学了三个月的编程,实现还不够完善,工程代码.图片音乐素材可以从百度网盘下载: 链接:https: ...

  9. 2020级C语言大作业 - 丛林大作战

    丛林大作战_C语言大作业 分享20级同学大一上学期用C语言(及少量C++)实现的丛林大作战游戏.由于同学们刚学了三个月的编程,实现还不够完善,工程代码.图片音乐素材可以从百度网盘下载: 链接:http ...

最新文章

  1. Hadoop 生态系统
  2. 机器人时代的资本主义:21世纪的工作,收入和财富
  3. linux命令行安装使用KVM
  4. 嵌入式android pdf,Embedded Android 英文原版PDF
  5. recyclerview的数据刷新(下拉刷新和自动加载更多)以及添加提示语(例如:“数据已加载完毕”)
  6. 复述-简历-面试-常见问答整理
  7. 三言两语聊Python模块–文档测试模块doctest
  8. Linux软件安装的几种方式
  9. Win7-旗舰版-连接共享打印机时,报 0x00000bcb 错误
  10. SIM900A短信操作
  11. System.out.println()标准输出方法性能影响一窥
  12. 采集淘宝商品的销量、交易量-方维
  13. 洛谷 P3369 【模板】普通平衡树
  14. jmeter-same user on each interation
  15. 好佳居窗帘十大品牌-窗帘这样搭才好看
  16. 相机ISO是什么 ISO是什么意思?
  17. 经过离散点画平滑曲线(贝塞尔3次)
  18. 3dsMax酒杯建模教程
  19. 原生JavaScript实现video播放器中播放/暂停/快放/慢放/慢动作功能
  20. 计算机文化基础课教案,[定稿]计算机文化基础授课教案(2010)

热门文章

  1. Win测试——使用Spy++获取窗口标题
  2. CentOS发行版本介绍
  3. 立创EDA元件转换为AD库封装(Altium Designer)
  4. c/c++教程 - 1.6 程序流程结构 if switch do while for break continue goto ?:三目运算符
  5. 语义分割之Deeplabv3源码解读
  6. C#编码简单性之函数篇(如何编写简短的C#代码,随时更新)
  7. sql server 2008 的安装
  8. extjs fieldset 和 radio
  9. 由于找不到MSVCP20.dll,无法继续执行代码
  10. Team Foundation Server