资源下载地址:https://download.csdn.net/download/sheziqiong/85941853
资源下载地址:https://download.csdn.net/download/sheziqiong/85941853
目录
1、 题目描述和题目要求 2
2、 需求分析 2
3、总体设计 5
3.1 功能模块设计 5
3. 状态信息栏:页面上方显示最近一次选择的菜单按钮; 7
• 结束页面模块 7
3. 得分显示:显示游戏得分。 8
• 游戏主体——小鸟模块 8
3. 小鸟碰撞控制:见游戏主体——小鸟模块 8
• 游戏主体——水管模块 10
• 游戏主体——背景模块 11
• 排行榜模块 11
• 实时计分显示模块 12
- 需要在游戏界面上显示实时分数。 12
3.2 数据结构设计 12
3.3 函数功能描述 13
void DrawGameEnd() 14
void Main() 15
void DrawBackground() 16
void DrawBird(int state, double bx, double by) 16
void DrawPipe(double PipeLocation, double PipeHeight) 17
void DrawRanking() 17
void PrintRanking() 17
void DrawIntroduction() 18
void DrawScore() 19
void displaymenu() 19
void displaygame() 19
void displaygameend() 20
void CharEventProcess(char ch) 20
void KeyboardEventProcess(int key, int event) 21
void MouseEventProcess(int x, int y, int button, int event) 21
void TimerEventProcess(int timerID) 21
void readfile() 22
void sortlinkedlist() 22
void putfile() 23
void initfile() 24
3.4 程序文件结构 24
(1) Sourcefiles 24
(2) Headfiles 25
(3) Libgraphics 与 simpleGUI 27
4.部署与运行 28
4.1 编译安装运行说明 28
1.下载压缩包,解压 28
4.2 典型测试情况 28
5.组内分工 29
5.1 组内分工情况 29
5.2 个人实践过程中遇到的难点及解决方案 30
(2) 难点:如何让小鸟动起来 30
(1) 问题:按钮在编写完成后点下,清屏却不完全。 32
(2) 问题:按钮的位置在不同电脑看会有些许误差。 32
(3) 问题:画面及颜色偏单调。 33
6.合作纪要 33
7.总结 36
7.1 程序亮点或创新之处 36
7.2 应用知识点 36
7.3 心得体会 37
8、参考文献和资料 40
1、 题目描述和题目要求
Flappy Bird 游戏是一款鸟要尽量穿过越多的水管的游戏,游戏开始后不得暂停,鸟的移动由鼠标右键,键盘空格键以及键盘向上方向键决定,每按一次上升固定高度,否则则加速掉落。游戏目标让鸟通过越多的水管,每通过一个分数加一,一但碰到水管或地面游戏结束。游戏过程中会有状态栏显示当前得分。不同于最原始版的游戏,我们增加了难易度选项,三者的水管生成速度依次加快。其他功能有在设置中的引导指示,即最终的排行榜。在游戏中排名前十的玩家将会被列在排行榜中,输入姓名方式为姓名数入,最后添加一个’#’登入资料。排行榜的内容亦可以清空。
2、 需求分析
在开始制作游戏之前,我们无数次的挑战了正版的 Flappy Bird 游戏,经过数次讨论,列出了以下的需求,以进行分工。
在思路的部份列出以下四个大方向,包含图片素材(声音素材)、启动界面、游戏界面,及分数界面。在这些模块内,我们又继续细分列点,以大致掌握整体工作量。
图片素材中包含我们所有的角色(鸟、水管)及背景,然而最终金币级怪物功能未能实现。原先的设定是使金币随机分布,碰触到一个金币等同于经过一个水管的得分;而怪物原先的用途则是为了增加游戏难度,以上两功能都并非原版游戏拥有,而是当时我们自己添加的。
在启动界面的部份,除了参考原始界面,我们加入新的难易度功能,包含选
择难易度等等。我们希望可以透过难易度的不同,达到能够提高用户广度的功能。在讨论中的我们,还抱有极大的梦想,希望可以在添加商店的功能,让玩家可以自由选择鸟的皮肤,换上自己喜欢的颜色。
分数界面的部份则就希望能做出用链表实现的排行榜界面,包含玩家姓名分数及名次,比较没有太多的花样。
最后游戏界面的部份是一开始我们就知道将会最困难的部份,不只是界面的样式,还有许多功能函数的需求。我们罗列了以下,在对象方面包含绘制的函数、鸟的移动、背景图片(水管)的移动及随机生成,还有原先设有的金币及怪物的移动等等;在游戏进行方面则有碰撞的判断函数、控制小鸟飞行的回调函数、控制速度的计时器等等;功能方面更设置随时统计分数的状态栏以及最终显示玩家排名的排行榜等功能。
3.4程序文件结构1)文件函数结构
首先,在大文件价下包含的是 DevProject,其中放的是我们的主函数,命名为 Our Flappy Bird。而在这在大文件下又分为四个子文件:
(1)Sourcefiles
i.draw.c
void DrawBird(int state, double bx, double by) void DrawPipe(double PipeLocation, doublePipeHeight)
void DrawRanking() void printsort()
void DrawIntroduction() void DrawScore()
void DrawMenu() void DrawGameEnd()
ii.event.c
void displaymenu() void displaygame() void displaygameend()
void CharEventProcess(char ch)
void KeyboardEventProcess(int key, int event)
void MouseEventProcess(int x, int y, int button, int event) void TimerEventProcess(int timerID)
iii.file.c
void readfile()
void sortlinkedlist() void putfile()
void initfile()
iv.flappy bird.c
void Main()
(2)Headfiles
i.definition.h /*此头文件定义一些全局用到的宏、变量、结构等*/
#define WindowWidth 5.0 //窗口宽
#define WindowHeight 7.0 //窗口高
#define BlankHeight 1.8 //上下水管之间空档的大小
#define GroundHeight 1.6 //地面高度
#define BlankHeight 1.8 //上下水管之间空档的大小
#define GroundHeight 1.6 //地面高度
#define Pipe_Speed 0.12//定时器 ID 选择:
#define SHOW_GAME_EASY 1
#define SHOW_GAME_MEDIUM 2
#define SHOW_GAME_HARD 3
#define SHOW_MENU 4//翅膀状态:
#define WINGUP 1#define
#define WINGMID
WINGDOWN 2
3
//难度:
#define Easy 1
#define Medium 2
#define Hard 3 static int enable_move_pipe=1; //允许移动//动画间隔时间 (可用于调整游戏难度): static int timer_interval_easy=35;
static int timer_interval_medium=32; static int timer_interval_hard=25;static int timer_interval_menu=50; //开始界面刷新间隔时间(防止界面闪烁) static int show_more_buttons1 = 0;
static int show_more_buttons2 = 0; static int show_more_buttons3 = 0;typedef struct{ //定义水管结构double cx;
double cy;
} Pipe;
Pipe Pipe_1, Pipe_2, Pipe_3;typedef struct { //定义玩家结构char name[100];
int score;
}Player;struct Toptenplayer { //构造排行榜上玩家信息的链表char name[100];
int score;
struct Toptenplayer *next;
};
ii.draw.h /*此头文件声明一些绘制界面过程中用到的函数*/
void DrawBird(int state, double bx, double by);
void DrawPipe(double PipeLocation, double PipeHeight); void DrawMenu(void);
void DrawGameEnd(void); void DrawBackground(void); void DrawIntroduction(void);void DrawScore(void); void DrawRanking(void);
iii.event.h /*此头文件声明事件处理中需要用到的函数*/
void KeyboardEventProcess(int key, int event);
void MouseEventProcess(int x, int y, int button, int event); void TimerEventProcess(int timerID);
void CharEventProcess(char c);
void DisplayClear(void); //清屏函数
void startTimer(int id, int timeinterval); //计时器启动函数
iv.library.h /*此头文件在于简化主函数使之不显冗杂*/
#include "graphics.h"
#include "extgraph.h"
#include "genlib.h"
#include "simpio.h"
#include "conio.h"
#include "imgui.h"
#include "random.h"
#include <stdio.h>
#include <stdlib.h>
#include <stddef.h>
#include <math.h>
#include <windows.h>
#include <olectl.h>
#include <mmsystem.h>
#include <wingdi.h>
#include <ole2.h>
#include <ocidl.h>
#include <winuser.h>
(3)Libgraphics 与 simpleGUI
此二资料夹为老师提供的库。2)多文件构成机制 使用library.h 简化主函数使之不显冗杂,使用definition.h 定义一些全局用到的宏、变量、结构等,使用 draw.h 声明一些绘制界面过程中用到的函数,使用
event.h 声明事件处理中需要用到的函数。
采用多个.c 文件,flappybird.c 是主源文件,另外组织了 event.c,draw.c,
file.c,分别放置事件处理相关函数,绘制界面相关函数,以及文件处理相关函数,便于修改。
资源下载地址:https://download.csdn.net/download/sheziqiong/85941853
资源下载地址:https://download.csdn.net/download/sheziqiong/85941853