做一个学(chou)习(ka)游戏(一)

嗯,抽卡是坏文明。但不得不承认这种形式的设计确实是抓住了人性。就像斯金纳箱中的小老鼠一样。
所以不能被这种心理利用,而要利用这种心理来学习。因此决定模仿抽卡类游戏做一个用以读书的游戏。

写代码前,首先设计游戏大致的整体结构:
游戏的主旋律是这样的:
获得卡(概率性、稀有度)->强化卡(加深与该卡的羁绊、获得提升感)->完成任务(获得成就感)->获得抽卡道具(奖励系统)->获得卡(进入循环)
其中主要游戏性的部分应该是强化和任务,这占据着90%的时间,虽然抽卡是其 骗氪点,但是主要的90%时间才是决定持续这个循环的关键。
因此将在强化和升级内容中,把一般游戏中游戏性的内容替换为阅读和做习题,并通过相应的时间积累作为奖励反馈。而抽卡系统中的卡,将换为各类书籍,并按难度和重要度分不同的稀有度。
如图:
这里写图片描述

需要一个卡类(卡面以及数据),任务类,主角数据类,系统类。

设计部分的类如下:



class card{//卡基类-基本的卡、作为图鉴存在
private:
    picture*pic;
    int id;
    int lv;//稀有度 1~5星 通过查稀有度表可得出 暂时用名字第一个数字代替


    int search(string name){
        return name[0] - '0';
    }
public:
    card(string filename){//图片文件名和内容描述文件名一致
        pic = picture::create(res_file+filename+picsuff);
        id = cardcount++;
        lv = search(filename);
    }
    virtual void show(){
        cout << pic->getname() << endl;
    }
};
class card_usr:public card{//卡子类-用户使用得到
private:
    int charpter;//总章节数(决定等级上限 总上限是100级,每章节完成强化后突破上限)
    int lv_mx;//当前等级上限
    int cur_lv;//当前等级
    int fet_mx;//当前羁绊上限
    int fetter;//羁绊点-再次召唤增加其上限
public:
    card_usr(string filename):card(filename){//这里需要程序随机加密
        filename += ".txt";
        ifstream fin(res_file+filename);
        fin >> charpter >> lv_mx >> cur_lv >> fet_mx >> fetter;
        fin.close();
    }
    virtual void show(){
        card::show();
    }
};

class card_system{//卡系统 游戏总导演
private:
//客户端数据
    const string cardnamefile = "card.txt";//卡名文件

//服务器数据
    const string usrnamefile = "usrs.txt";//用户文件
    const string usrresfile = "usr_data\\";//用户数据文件夹

    vector<card*>cards;
    vector<int>id;//用户的卡号
    int num;
    string usr_name = "dljgs1";//
    string usr_key;
public:
    void login(){
        ;//登陆 暂空
    }
    void load_database(){//读取卡数据
        ifstream fin(cardnamefile);
        string buf;
        while (!fin.eof()){
            fin >> buf;
            cards.push_back(new card_usr(buf));
        }
        num = cardcount;
        if (num != cards.size())report("数量不一致");
    }
    void load_user(){
        ifstream fin(usrresfile + usr_name + ".txt");
        if (fin.fail()){ report("用户"+usr_name+"不存在!"); }
        //*!这里需要加密
        int k;
        fin >> k;//数量
        while (k--){
            int temp; fin >> temp;
            id.push_back(temp);
        }//读取卡号

    }
    void init(){//初始化
        srand(time(NULL));
        login();//登陆
        load_database();//读取数据库所有卡
        load_user();//读取用户有的卡
    }
    void run(){
        init();
        //游戏本体
        ;
        int i;
        while (1){
            cout << "1.查看当前卡\n2.抽卡";
            cin >> i;
            if (i == 1){
                for each (auto var in id)
                {
                    cards[var]->show();
                }
                system("pause");
            }
            else{
                ;
            }
            system("cls");
        }
    }
    card_system(){
        init();
        run();
    }
};

目前暂时只做好大致框架仅供本地测试,也并没有分客户端和服务端,之后会结合cocos的学习逐步分离。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值