资源下载地址: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语言设计的像素小鸟小游戏相关推荐

  1. 基于C语言设计的植物大战僵尸小游戏

    资源下载地址:https://download.csdn.net/download/sheziqiong/86763979 资源下载地址:https://download.csdn.net/downl ...

  2. python小游戏源码-python 像素小鸟小游戏源码(flappybird)

    [实例简介] 像素小鸟这个简单的游戏于2014年在网络上爆红,游戏上线一段时间内appleStore上的下载量一度达到5000万次,风靡一时 [实例截图] [核心代码] from Class impo ...

  3. html像素小鸟小游戏,微信小游戏-像素鸟游戏

    we_flappybird ##注意: 微信小程序绘图API中drawImage不支持图片裁剪,其实微信是支持裁剪的只是接口没有实现,可以通过修改WAService.js使其支持裁剪. 修改如下: / ...

  4. C语言设计的简单2048小游戏

    //***************************************************************************// //****************** ...

  5. python文字游戏源代码_python 像素小鸟小游戏源码(flappybird)

    [实例简介] 像素小鸟这个简单的游戏于2014年在网络上爆红,游戏上线一段时间内appleStore上的下载量一度达到5000万次,风靡一时 [实例截图] [核心代码] from Class impo ...

  6. C语言实现飞翔的小鸟小游戏

    参考视频https://www.bilibili.com/video/BV1Xo4y1R7hs 缺陷:撞柱子功能暂未实现 //飞翔的小鸟 #include<stdio.h>//C语言标准头 ...

  7. 基于C语言设计符号表

    基于C语言设计符号表 c-语言的语法描述 系统设计 符号表的实现 符号表采用了哈希表的形式,可以方便地查找.插入和删除,但是问题也随之而来,就是符号的作用于较难跟踪.很有可能同一名称的变量在不同作用于 ...

  8. 基于C语言设计的小型图形软件系统

    资源下载地址:https://download.csdn.net/download/sheziqiong/85648846 资源下载地址:https://download.csdn.net/downl ...

  9. 基于C语言设计的学籍管理系统

    基于C语言设计的学籍管理系统 系统意义以及主要功能: 本系统能对学生学号,姓名,所在系,班级这些基本信息进行管理,并具有以下功能: 具有学生信息输入功能 具有学生信息删除功能 具有学生信息修改功能 具 ...

最新文章

  1. JavaWeb项目第三次总结_成绩查询的实现
  2. Android -- ADT变化aarLint
  3. 100行java电路程序_easyopen原理解析——不到100行代码实现一个最精简的easyopen
  4. pandas isnull 函数
  5. JdbcTemplate类中的execute方法
  6. java安全编码指南之:Mutability可变性
  7. 最短路径次短路径算法
  8. vuex的结构有哪些参数?
  9. php: eclipse 编辑 php
  10. elasticsearch系列八:ES 集群管理(集群规划、集群搭建、集群管理)
  11. 引导linux的工具下载,多系统引导工具(BootThink)下载_多系统引导工具(BootThink)官方下载-太平洋下载中心...
  12. [org/springframework/jdbc/support/sql-error-codes.xml]
  13. Django OAuth2 linkedin的第三方登录
  14. mtk2503 新增物联网卡apn
  15. Excel使用right函数截断数据,并覆盖原来的数据
  16. jdk常用的七种性能监控命令行工具
  17. con 元器件符号_PROTEUS中元器件符号
  18. 微软Xbox击败PS4 主导“黑五”游戏机市场
  19. 数字IC验证方法的分类
  20. 【干货总结】分层强化学习(HRL)全面总结

热门文章

  1. 使用在线模式更改工具修改表
  2. 媒体文件查看/上传至WP媒体库
  3. 新手福利!超详细图标设计的七大原则
  4. 个人支付宝、微信、云闪付收款
  5. Qt获取大华摄像头监控画面(RTSP流方式)
  6. vscode写php高亮,写了一个Hy的vscode语法高亮插件
  7. 小白学习:李航《统计学习方法》第二版第11章 条件随机场
  8. BFS-BZOJ-1615-[Usaco2008 Mar]The Loathesome Hay Baler麻烦的干草打包机
  9. 图像颜色校正的几种方法
  10. Python将图片转换为字符画