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

来源:互联网 发布:巫师3优化好 编辑:程序博客网 时间:2024/05/01 09:04

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

写代码前,首先设计游戏大致的整体结构:
游戏的主旋律是这样的:
获得卡(概率性、稀有度)->强化卡(加深与该卡的羁绊、获得提升感)->完成任务(获得成就感)->获得抽卡道具(奖励系统)->获得卡(进入循环)
其中主要游戏性的部分应该是强化和任务,这占据着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的学习逐步分离。

0 0