• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

Flappy Bird: 玩鸟

原作者: [db:作者] 来自: 网络 收藏 邀请

开源软件名称:

Flappy Bird

开源软件地址:

https://gitee.com/bupt_xyg/flappy-bird

开源软件介绍:

Flappy Bird

这是来自北京邮电大学大二学生xyg和yy和zh的c++期末大作业Flappy Bird

以下的类是完全解耦的,相互不依赖的,只需要将hpp文件引入自己的代码中即可。如果有同学想要使用以下的功能可以直接通过#include "foo.hpp"将这些文件引入自己的项目。

例如引入Bird类Controller类

#include "flappy_bird/Bird.hpp"即可

Bird

Bird类的实例都拥有一个唯一的id,且id不可更改。

construct

Bird bird;Bird bird(0,0,1,1,'%');Bird bird = Bird(0,0,1,1,'%');// 参数依次为: x,y,w,h,symbol

interface

get_*

get_*系列的接口提供了获取Bird实例的对应属性的手段。

get_id()
get_x()
get_y()
get_w()
get_h()
get_symbol()
set_*

set_*系列的接口提供了设置Bird实例的对应属性的手段。

set_x(fbint)
set_y(fbint)
set_w(fbint)
set_h(fbint)
set_symbol(fbint)
operator

operator系列的接口提供了对Bird_x_y属性进行运算的手段。

add_x(fbint)
add_y(fbint)
Bird bird;bird.add_y(1); 		// 下降1格bird.add_y(-1); 	// 上升1格bird.add_x(1); 		// 前进1格bird.add_x(-1); 		// 后退1格

Controllor(Class)

construct

Controller controller;Controller controller('W','A','S','D');Controller controller = Controller('W','A','S','D');

interface

bind(Bird&)

当你希望使用Controller类的实例来控制Bird类实例时,你需要将Bird类的实例通过Controller.bind将其绑定在Controller实例上。

  • 一个Controller的实例可以绑定多个Bird实例
  • 当将一个Bird重复绑定在同一个Controller实例上时bind会返回false表示绑定失败
  • 同一个Bird实例可以被绑定在多个Controller实例上
#include <iostream>Controller ctrl1;Controller ctrl2;Bird bird1;Bird bird2;//同一个Controller实例可以绑定多个Bird实例ctrl1.bind(bird1);ctrl1.bind(bird2);//一个Bird实例可以绑定到多个Controller实例ctrl1.bind(bird1);ctrl2.bind(bird1);//一个Bird实例不能多次绑定同一个Controller实例//下例将会输出`绑定失败`if (ctrl1.bind(bird1))    std::cout << "绑定成功" << std::endl;else    std::cout << "绑定失败" << std::endl;
action_*

action_*系列的接口提供了手动触发被绑定Bird实例动作的手段。

action_jump()
action_down()
action_forward()
action_backward()
trigger()

trigger()将会监听Controller实例设置的按键是否被按下,并触发相应的动作。

#include <iostream>Bird bird1;Bird bird2;Controller ctrl('W','J','D','A');if (control1.bind(test1)) std::cout << bird1.get_id() <<":bind success" << std::endl;if (control1.bind(test2)) std::cout << bird2.get_id() <<":bind success" << std::endl;while (1){    control1.trigger();}

Map(Class)

Menu(Class)

Rank(Class)

Rank类是一个容器类,用于存储玩家的分数排名,Rank内部总是保持有序(降序)的状态,Rank的实例总是会在被析构时将数据保存回原文件处。

  • Rank容器总是在进行具体运算时会先将自己变为有序状态.

  • Rank容器需要具有规定项的json文件来进行实例化.

  • Rank容器会在被析构时将数据保存回原json文件处.

construct

Rank容器实例化时需要一个json文件的路径参数.

using rank = flappy_bird::Rank;using element = flappy_bird::element;rank data("foo.json");

json项

可以用来实例化Rank容器的json文件的数据项具有以下特点。

  • 必须有项"data_count" : int来指明该Rank容器具有数据数目.

  • "1""$data_count"object,且每个object具有"name":string"score":int项。

    以下为一个合法的json文件的内容

    {	"data_count": 7,    "1": {        "name": "zzy",        "score": 190    },    "2": {        "name": "xyg",        "score": 100    },    "3": {        "name": "yy",        "score": 90    },    "4": {        "name": "xyg",        "score": 70    },    "5": {        "name": "xyg",        "score": 20    },    "6": {        "name": "crh",        "score": 10    },    "7": {        "name": "xyg",        "score": 10    }}

    interface

    append

    该方法用于向Rank容器中添加数据项,且数据项为element类型

    using rank = flappy_bird::Rank;using element = flappy_bird::element;rank data;//隐式的添加data.append({10,"xyg"});data.append({20,"yy"});//显式的通过element类型添加data.append(element({100,"wkh"}));//链式的添加data.append({10,"xyg"})    .append({20,"ycy"});
    序列化方法
    dump

    dump方法可以将Rank容器按照固定格式进行序列化.

    • dump具有一个可选的参数int count用于指定最大的序列化的数据项目条数.
    • dump序列化后的数据总是有序的.
    rank data("foo.json");cout << data.dump() << endl;cout << data.dump(5) << endl;
  • dump(5)

No.1 zzy: 190No.2 xyg: 100No.3 yy: 90No.4 xyg: 70No.5 xyg: 70

  • dump()

No.1 zzy: 190No.2 xyg: 100No.3 yy: 90No.4 xyg: 70No.5 xyg: 70No.6 xyg: 20No.7 xyg: 20No.8 crh: 10No.9 xyg: 10No.10 xyg: 10

数据的存储

Rank容器使用json文件进行实例化,同时也会在Rank容器被析构时将Rank容器中的数据重新存储到json文件中.

  • Rank容器只有在析构时才会完成数据的存储.
    using pd = flappy_bird::Rank;    using element = flappy_bird::element;    pd data("foo.json");    data.append({10,"xyg"});    data.append({70,"xyg"});    data.append(element({20,"xyg"}));

foo.json 运行前

{    "1": {        "name": "zzy",        "score": 190    },    "2": {        "name": "xyg",        "score": 100    },    "3": {        "name": "yy",        "score": 90    },    "4": {        "name": "xyg",        "score": 20    },    "5": {        "name": "crh",        "score": 10    },    "data_count": 5}

foo.json 运行后

{    "1": {        "name": "zzy",        "score": 190    },    "2": {        "name": "xyg",        "score": 100    },    "3": {        "name": "yy",        "score": 90    },    "4": {        "name": "xyg",        "score": 70    },    "5": {        "name": "xyg",        "score": 20    },    "6": {        "name": "crh",        "score": 10    },    "7": {        "name": "xyg",        "score": 10    },    "data_count": 7}

鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
JumpProject: 2D跳跃小游戏发布时间:2022-03-25
下一篇:
Lumberyard: Amazon Lumberyard is a free AAA game engine deeply integrated with A ...发布时间:2022-03-25
热门推荐
热门话题
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap