基于C语言设计的像素小鸟小游戏
资源下载地址:https://download.csdn.net/download/sheziqiong/85672935
一、设计目的
掌握定义函数,并熟练使用各函数
实现各函数模块的调用
学会将静态库导入工程,熟练使用库函数
掌握使用 graphics.hIMAG 的数据类型
学会调用 API
学会编写合适的算法来解决问题
二、设计内容
为了更好地掌握各数据类型、数据结构的使用以及 C 语言程序设计的思想,以 C 语言平日课堂知识为主,复刻了前几年在移动端很火的一款游戏 Flappy bird。
成品 Flappy bird 截图如下:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-q7SOMp0V-1655441661996)(https://www.writebug.com/myres/static/uploads/2022/6/16/203ad6062561e69e25bffbcfda379d05.writebug)]
三、概要设计
3.1 功能模块图;
答:如下图所示:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-JhxEx2i7-1655441661997)(https://www.writebug.com/myres/static/uploads/2022/6/16/a27339ec468cf4a3265340382d082f78.writebug)]
3.2 各个模块详细的功能描述。
Custom Function list 自定义函数
void print();
void begin();//载入music、背景、First stone
void printstone();
void bird();//控制鸟的下降和上升
void judgement();
void scoleprint();
void endorretry();
使用到的头文件、lib
<graphics.h>
<stdio.h>
<stdlib.h>
<conio.h>
<time.h>
<windows.h>
"mmsystem.h"
WINMM.lib (VC6.0 自带的静态库)
四、详细设计
答:
首先,需要安装 EasyX 图形库,将.exe 呈现出更好的图形界面,然后,利用 graphics.h 绘制图像。
正式动工前的准备:
熟悉 graphics 头文件中的各种库函数,比如
initgraph(,);界面初始化;
circle(;;);画圆;
RGB();颜色设置;
IMAGE 定义 IMAGE 对象,
closegraphics();关闭绘图界面等等。
还需要寻找一些库函数,识别键盘的敲击,比如 while(!kbhit())等等。
熟悉相关库函数后,开始本次 flappy bird 程序编写。
我的思路是这样:
背景图片的显示
加入小鸟图片
小鸟自由下落,按键后上升
加入静态的障碍物
障碍物向左移动
判断小鸟和障碍物的碰撞
障碍物移动出左边界后,在右边重新出现
加入记分模块
加入开始界面、结束界面
加入背景音乐
分阶段编写实现这十个模块。
首先,由于我需要设置图形界面,所以调用了 VC6.0 里头对窗口句柄属性操作的函数,实现对窗口句柄属性的修改,这里由于游戏简单,仅修改了窗口名字,下面贴代码:
// 获取窗口句柄
HWND hwnd = GetHWnd();
// 设置窗口标题文字
SetWindowText(hwnd, “大峰子的 Flappy bird!”);
而后便是游戏窗口的设置,这里为了尽最大限度地复刻移动端,给玩家带来熟悉的感觉,我初始化成了 350X600,大概是 6 寸的手机屏幕大小。这一步的实现是:initgraph(350,600);
之后,需明确游戏的两个对象,鸟,管道;
由于小鸟的属性本质是取其需打印位置的左上角坐标(X’,Y’),然后通过库函数 loadimage();putimage();将准备好的图片素材输出到该位置上,这样小鸟就呈现在了屏幕上,所以我们需要定义两个全局变量 bird_x、bird_y 去实现存储小鸟坐标的功能。
之前提到,本游戏主要是基于 C 语言 graphics.h 中各类绘图库函数实现的,所以要定义 IMAGE 对象,代码说话:
IMAGE background,bird1[4],bird2[4],scole1[10],scole2[10],stone_up1,stone_up2,stone_down1,stone_down2,stone_up3,stone_up4,stone_down3,stone_down4;
以便于后面的 loadimage();putimage();这一系列操作。
随后,便是各个功能模块的技术实现了,我简述一下我的技术实现:
背景图片的显示。这个比较简单,定左上角为(0,0)点,只要使用函数 putimage(0,0,&文件地址);就能实现该模块。
加入小鸟图片。首先我们观察游戏会发现,该游戏中小鸟只会上下移动,并不会左右移动,造成小鸟向前飞的错觉是管道相对于小鸟的相对位移造成的,因此,我们只需要 putimage 到(150,300)即屏幕中央偏左的位置即可。另外,这里有一个小技术实现,就是三光栅操作,使得位图能透明显示。其原理是 XOR,即异步运算,掩码图 XOR 精灵图=能透明显示到背景图上的位图。
举个例子,
黑 XOR 黑=原颜色。
我的素材:
or
=
通过 XOR 运算将两张图像先后重叠打印,就能够实现图像的显示而不造成图像闪烁现象。
加入静态的障碍物管道。这个原理与 2 是一致的。不再过度阐述。
开始时播放背景音乐。这里需要调用媒体播放 API,双线程进行,不然就会造成“播放.wav 时控制台黑屏”的现象。这里用到的是头文件 windows.h 下的库函数 Playsound,下面贴代码:PlaySound(“000.wav”, NULL, SND_FILENAME | SND_ASYNC|SND_LOOP);
通过这段代码,实现多线程、循环播放。此外实现该功能需要添加 WINMM.lib 到 project 当中。
加入封面、结束界面。封面的加入较为简单,制作一个 350X600 的图片,在开始时 putimage,并利用 getch();实现停顿直至键盘输入。结束界面的“GAME OVER”图像,显示方法如 2.中描述的一样,不再过多阐述。
小鸟的自动下落,键盘输入空格 or 鼠标左键时上升。首先,自动下落可以通过循环解决,每一次循环都进行一次按键检测 if(kbhit()),若按下空格键 or 鼠标左键,bird_y 减小,小鸟图像打印时将上移,造成一种小鸟向上飞跃的感觉,若没有按按键,则 bird_y+=3,缓慢下降。
障碍物向左移动。这个操作是在自定义函数 printstone();中实现的。关键点在于游戏一开始时柱子的初始化、柱子的随机长度、及柱子移动到屏幕左边框后右侧柱子重新出现…这三种情况的技术实现。
五、测试数据及运行结果
5.1 正常测试数据和运行结果
要求提供 3 组正常测试数据和运行结果
5.2 异常测试数据及运行结果
要求提供 2 组异常测试数据和运行结果
六、调试情况,设计技巧及体会
6.1 改进方案
答:
对自己的设计进行评价,指出合理和不足之处,提出改进方案;
像素小鸟翅膀的扇动
①
②
③
改进办法:当 bird_y 上升/下降时,利用 IMAGE 数组控制输出不同类型的图案。
像素小鸟位移感严重,跳跃不顺畅
改进办法:按键检测到空格键 or 鼠标左键时,将 bird_y-=80 调整至 bird_y-=40,减小相对位移的长度。
柱子移动偏慢
改进办法:多设置一个难度模块,通过改变柱子移动速度达到难度的改变,例如定义全局变量 n,将 stone_x–修改为 stone_x=stone_x-n,然后通过 scanf(“%d”,&n);去控制每次循环时柱子向左移动的位移即可。
缺乏最高分模块。记录玩家最高分
改进办法:后续加入该模块。
资源下载地址:https://download.csdn.net/download/sheziqiong/85672935
基于C语言设计的像素小鸟小游戏相关推荐
- 基于C语言设计的植物大战僵尸小游戏
资源下载地址:https://download.csdn.net/download/sheziqiong/86763979 资源下载地址:https://download.csdn.net/downl ...
- python小游戏源码-python 像素小鸟小游戏源码(flappybird)
[实例简介] 像素小鸟这个简单的游戏于2014年在网络上爆红,游戏上线一段时间内appleStore上的下载量一度达到5000万次,风靡一时 [实例截图] [核心代码] from Class impo ...
- html像素小鸟小游戏,微信小游戏-像素鸟游戏
we_flappybird ##注意: 微信小程序绘图API中drawImage不支持图片裁剪,其实微信是支持裁剪的只是接口没有实现,可以通过修改WAService.js使其支持裁剪. 修改如下: / ...
- C语言设计的简单2048小游戏
//***************************************************************************// //****************** ...
- python文字游戏源代码_python 像素小鸟小游戏源码(flappybird)
[实例简介] 像素小鸟这个简单的游戏于2014年在网络上爆红,游戏上线一段时间内appleStore上的下载量一度达到5000万次,风靡一时 [实例截图] [核心代码] from Class impo ...
- C语言实现飞翔的小鸟小游戏
参考视频https://www.bilibili.com/video/BV1Xo4y1R7hs 缺陷:撞柱子功能暂未实现 //飞翔的小鸟 #include<stdio.h>//C语言标准头 ...
- 基于C语言设计符号表
基于C语言设计符号表 c-语言的语法描述 系统设计 符号表的实现 符号表采用了哈希表的形式,可以方便地查找.插入和删除,但是问题也随之而来,就是符号的作用于较难跟踪.很有可能同一名称的变量在不同作用于 ...
- 基于C语言设计的小型图形软件系统
资源下载地址:https://download.csdn.net/download/sheziqiong/85648846 资源下载地址:https://download.csdn.net/downl ...
- 基于C语言设计的学籍管理系统
基于C语言设计的学籍管理系统 系统意义以及主要功能: 本系统能对学生学号,姓名,所在系,班级这些基本信息进行管理,并具有以下功能: 具有学生信息输入功能 具有学生信息删除功能 具有学生信息修改功能 具 ...
最新文章
- JavaWeb项目第三次总结_成绩查询的实现
- Android -- ADT变化aarLint
- 100行java电路程序_easyopen原理解析——不到100行代码实现一个最精简的easyopen
- pandas isnull 函数
- JdbcTemplate类中的execute方法
- java安全编码指南之:Mutability可变性
- 最短路径次短路径算法
- vuex的结构有哪些参数?
- php: eclipse 编辑 php
- elasticsearch系列八:ES 集群管理(集群规划、集群搭建、集群管理)
- 引导linux的工具下载,多系统引导工具(BootThink)下载_多系统引导工具(BootThink)官方下载-太平洋下载中心...
- [org/springframework/jdbc/support/sql-error-codes.xml]
- Django OAuth2 linkedin的第三方登录
- mtk2503 新增物联网卡apn
- Excel使用right函数截断数据,并覆盖原来的数据
- jdk常用的七种性能监控命令行工具
- con 元器件符号_PROTEUS中元器件符号
- 微软Xbox击败PS4 主导“黑五”游戏机市场
- 数字IC验证方法的分类
- 【干货总结】分层强化学习(HRL)全面总结