开源软件名称: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" 即可
BirdBird 类的实例都拥有一个唯一的id ,且id 不可更改。
constructBird bird;Bird bird(0,0,1,1,'%');Bird bird = Bird(0,0,1,1,'%');// 参数依次为: x,y,w,h,symbol interfaceget_*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)operatoroperator系列的接口提供了对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)constructController controller;Controller controller('W','A','S','D');Controller controller = Controller('W','A','S','D'); interfacebind(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文件 处.
constructRank 容器实例化时需要一个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 }} interfaceappend该方法用于向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"}); 序列化方法dumpdump 方法可以将Rank 容器按照固定格式进行序列化.
dump 具有一个可选的参数int count 用于指定最大的序列化的数据项目条数.dump 序列化后的数据总是有序的.
rank data("foo.json");cout << data.dump() << endl;cout << data.dump(5) << endl;
No.1 zzy: 190No.2 xyg: 100No.3 yy: 90No.4 xyg: 70No.5 xyg: 70 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文件 中.
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} |
请发表评论