1.0时代进入到2.0时代,且即将进入3.0时代。
C++养成游戏:少女计划
400行 C++实现的养女儿游戏:少女计划
400行 C++实现的养女儿游戏:少女计划
实现功能
记录生日,体力值等数据
多种操作,每种操作随机增加体力等数据
到生日的月份可以选择是否送礼物,花钱,增加数据
结算数据,阈值评价// // main.cpp // 少女计划 // // Created by 还有醋v on 2019/1/22. // Copyright © 2019 还有醋v. All rights reserved. // #include <iostream> #include <vector> #include <ctime> #include <array> #include <cstdlib> #include <string> using namespace std; string get_constellation(int date_birth_month, int date_birth_day){ /* 计算星座 date_birth_month 生日月份 date_birth_day 生日天 */ string constellation_names[12][2] = { // 定义星座 {"摩羯座", "水瓶座"}, // 1月 {"水瓶座", "双鱼座"}, // 2月 {"双鱼座", "白羊座"}, // 3月 {"白羊座", "金牛座"}, // 4月 {"金牛座", "双子座"}, // 5月 {"双子座", "巨蟹座"}, // 6月 {"巨蟹座", "狮子座"}, // 7月 {"狮子座", "处女座"}, // 8月 {"处女座", "天秤座"}, // 9月 {"天秤座", "天蝎座"}, // 10月 {"天蝎座", "射手座"}, // 11月 {"射手座", "摩羯座"}, // 12月 }; int constellation_day[12]{20,19,21,20,21,22,23,23,23,24,23,22}; // 跨星座的日期 return constellation_names[date_birth_month-1][date_birth_day/constellation_day[date_birth_month-1]]; } array<int, 11> init_infos(string constellation, array<int, 11> infos_array){ /* 初始化属性 constellation 星座 infos_array 属性集合 */ infos_array[10] = 300; // 钱(10) if(constellation == "水瓶座"){ // 体力(0)、智力(1)、魅力(2)、自尊(3)、道德(4)、气质(5)、感受(6)、体贴(7)、武术(8)、魔法(9) infos_array[0] = 4; infos_array[1] = 3; infos_array[2] = 2; infos_array[3] = 4; infos_array[4] = 3; infos_array[5] = 1; infos_array[6] = 2; infos_array[7] = 1; infos_array[8] = 5; infos_array[9] = 3; }else if (constellation == "双鱼座"){ infos_array[0] = 4; infos_array[1] = 3; infos_array[2] = 2; infos_array[3] = 0; infos_array[4] = 2; infos_array[5] = 3; infos_array[6] = 5; infos_array[7] = 2; infos_array[8] = 1; infos_array[9] = 3; }else if (constellation == "白羊座"){ infos_array[0] = 6; infos_array[1] = 1; infos_array[2] = 5; infos_array[3] = 2; infos_array[4] = 1; infos_array[5] = 1; infos_array[6] = 2; infos_array[7] = 0; infos_array[8] = 4; infos_array[9] = 3; }else if (constellation == "金牛座"){ infos_array[0] = 4; infos_array[1] = 3; infos_array[2] = 2; infos_array[3] = 3; infos_array[4] = 2; infos_array[5] = 2; infos_array[6] = 2; infos_array[7] = 3; infos_array[8] = 1; infos_array[9] = 3; }else if (constellation == "双子座"){ infos_array[0] = 5; infos_array[1] = 3; infos_array[2] = 2; infos_array[3] = 2; infos_array[4] = 4; infos_array[5] = 2; infos_array[6] = 4; infos_array[7] = 2; infos_array[8] = 2; infos_array[9] = 4; }else if (constellation == "巨蟹座"){ infos_array[0] = 4; infos_array[1] = 3; infos_array[2] = 3; infos_array[3] = 2; infos_array[4] = 1; infos_array[5] = 3; infos_array[6] = 3; infos_array[7] = 2; infos_array[8] = 1; infos_array[9] = 4; }else if (constellation == "狮子座"){ infos_array[0] = 5; infos_array[1] = 2; infos_array[2] = 1; infos_array[3] = 2; infos_array[4] = 2; infos_array[5] = 3; infos_array[6] = 1; infos_array[7] = 2; infos_array[8] = 3; infos_array[9] = 2; }else if (constellation == "处女座"){ infos_array[0] = 3; infos_array[1] = 2; infos_array[2] = 3; infos_array[3] = 1; infos_array[4] = 3; infos_array[5] = 4; infos_array[6] = 3; infos_array[7] = 3; infos_array[8] = 1; infos_array[9] = 3; }else if (constellation == "天秤座"){ infos_array[0] = 4; infos_array[1] = 3; infos_array[2] = 2; infos_array[3] = 2; infos_array[4] = 3; infos_array[5] = 2; infos_array[6] = 2; infos_array[7] = 1; infos_array[8] = 2; infos_array[9] = 3; }else if (constellation == "天蝎座"){ infos_array[0] = 5; infos_array[1] = 2; infos_array[2] = 4; infos_array[3] = 2; infos_array[4] = 1; infos_array[5] = 1; infos_array[6] = 3; infos_array[7] = 1; infos_array[8] = 1; infos_array[9] = 4; }else if (constellation == "射手座"){ infos_array[0] = 5; infos_array[1] = 1; infos_array[2] = 1; infos_array[3] = 2; infos_array[4] = 1; infos_array[5] = 2; infos_array[6] = 2; infos_array[7] = 2; infos_array[8] = 2; infos_array[9] = 3; }else if (constellation == "摩羯座"){ infos_array[0] = 5; infos_array[1] = 1; infos_array[2] = 1; infos_array[3] = 2; infos_array[4] = 5; infos_array[5] = 2; infos_array[6] = 1; infos_array[7] = 4; infos_array[8] = 2; infos_array[9] = 1; } return infos_array; } void print_infos(string name_daugher, int age, int date_birth_month ,int date_birth_day, array<int, 11> infos_array){ /* 查看状态 name_daugher 女儿姓名 age 年龄 date_birth_month 生日月份 date_birth_day 生日天 money 钱 infos_array 属性集合(体力(0)、智力(1)、魅力(2)、自尊(3)、道德(4)、气质(5)、感受(6)、体贴(7)、武术(8)、魔法(9)、钱(10)) */ cout << "\n信息如下:" << endl; cout << "\t姓名:" << name_daugher << endl; cout << "\t年龄:" << age << endl; cout << "\t生日:" << date_birth_month << "月" << date_birth_day << "日" << endl; cout << "\t钱:" << infos_array[10] << endl; array<string, 10> infos_name_array {"\t体力:","\t智力:","\t魅力:","\t自尊:","\t道德:","\t气质:","\t感受:","\t体贴:","\t武术:","\t魔法:"}; cout << left; for(int i=0; i<10; i++){ cout << infos_name_array[i] << infos_array [i] << "\t\t"; int solid_count = infos_array[i] / 10; // 计算实心方框的个数 for (int j = 0; j<10; j++) { if(j<solid_count){ cout << "■"; }else{ cout << "□"; } } cout << endl; } } array<int, 11> travel_arrangements(int month, array<int, 11> infos_array){ /* 安排行程 month 月份 infos_array 属性集合(体力(0)、智力(1)、魅力(2)、自尊(3)、道德(4)、气质(5)、感受(6)、体贴(7)、武术(8)、魔法(9)、钱(10)) */ array<string, 3> meadow {"上旬","中旬","下旬"}; int choice; // 选择变量 int temp1,temp2,temp3,temp4,temp5,temp6; // 临时变量 for(int i=0;i<3;){ cout << "\n" << month << "月" << meadow[i] << "要干什么:" << endl; cout << "1.学习礼法\n2.学习武艺\n3.学习法术\n4.打工赚钱\n请选择操作:"; cin >> choice; switch (choice) { case 1: // 学习礼法 -钱(10) +魅力(2) +自尊(3) +道德(4) +气质(5) +体贴(7) infos_array[10] -= temp1=rand()%(50-25+1)+25; // rand() % (b-a+1)+a a~b之间随机整数 if (infos_array[10]+temp1 < temp1) { cout << "钱不够了,快去打工吧!" << endl; infos_array[10] += temp1; break; } i++; infos_array[2] += temp2=rand()%4; infos_array[3] += temp3=rand()%4; infos_array[4] += temp4=rand()%7+3; infos_array[5] += temp5=rand()%4; infos_array[7] += temp6=rand()%4; cout << "\n子曰:“学而时习之,不亦说乎?有朋自远方来,不亦乐乎?人不知而不愠,不亦君子乎?”" << endl; cout << month << "月" << meadow[i] << ",学习了礼法,花了:" << temp1 << ",魅力增加了:" << temp2 << ",自尊增加了:" << temp3 << ",道德增加了:" << temp4 << ",气质增加了:" << temp5 << ",体贴增加了:" << temp6 << endl; break; case 2: // 学习武艺 -钱(10) +体力(0) +气质(5) +武术(8) infos_array[10] -= temp1=rand()%21+30; if (infos_array[10]+temp1 < temp1) { cout << "钱不够了,快去打工吧!" << endl; infos_array[10] += temp1; break; } i++; infos_array[0] += temp2=rand()%4+2; infos_array[5] += temp3=rand()%4; infos_array[8] += temp4=rand()%6+4; cout << "\n站如松,坐如钟,行如风,卧如弓" << endl; cout << month << "月" << meadow[i] << ",学习了武艺,花了:" << temp1 << ",体力增加了:" << temp2 << ",气质增加了:" << temp3 << ",武术增加了:" << temp4 << endl; break; case 3: // 学习法术 -钱(10) +智力(1) +魔法(9) infos_array[10] -= temp1=rand()%51+50; if (infos_array[10]+temp1 < temp1) { cout << "钱不够了,快去打工吧!" << endl; infos_array[10] += temp1; break; } i++; infos_array[1] += temp2=rand()%5; infos_array[9] += temp3=rand()%6+4; cout << "\n要学神仙,驾鹤飞天,点石成金,妙不可言" << endl; cout << month << "月" << meadow[i] << ",学习了法术,花了:" << temp1 << ",智力增加了:" << temp2 << ",魔法增加了:" << temp3 << endl; break; case 4: // 打工赚钱 +钱(10) +体力(0) infos_array[10] += temp1=rand()%31+30; infos_array[0] += temp2=rand()%5; i++; cout << "\n打工是不可能打工的!" << endl; cout << month << "月" << meadow[i] << ",打工赚了:" << temp1 << ",体力增加了:" << temp2 << endl; break; default: break; } } return infos_array; } array<int, 11> parent_talk(array<int, 11> infos_array){ /* 亲子谈话 infos_array 属性集合(体力(0)、智力(1)、魅力(2)、自尊(3)、道德(4)、气质(5)、感受(6)、体贴(7)、武术(8)、魔法(9)、钱(10)) */ int choice; // 选择变量 int temp1,temp2,temp3; // 临时变量 cout << "\n进行亲子对话:" << endl; cout << "1.打招呼\n2.温柔说话\n3.严厉训斥\n4.给零花钱\n请选择操作:"; cin >> choice; switch (choice) { case 1: // 打招呼 没有什么软用 cout << "\n向女儿打了招呼,然鹅并没有什么软用" << endl; break; case 2: // 温柔说话 +感受(6) +体贴(7) cout << "\n最近怎么样?" << endl; infos_array[6] += temp1=rand()%5; infos_array[7] += temp2=rand()%5; cout << "和女儿聊了聊天,感受增加了:" << temp1 << ",体贴增加了:" << temp2 << endl; break; case 3: // 严厉教育 -感受(6) -体贴(7) +道德(4) cout << "\n!@#3$5%^&*9({!@#`~|^&*}!" << endl; infos_array[6] -= temp1=rand()%5; infos_array[7] -= temp2=rand()%5; infos_array[4] += temp3=rand()%15+5; cout << "进过了严厉的教育,感受减少了:" << temp1 << ",体贴减少了:" << temp2 << ",道德增加了:" << temp3 << endl; break; case 4: // 给零花钱 -钱(10) if (infos_array[10] < 100) { cout << "钱不够了,快去打工吧!" << endl; break; } infos_array[10] -= 100; cout << "给了女儿100零花钱" << endl; int buy = rand()%4; switch (buy) { case 0: // 买了喜之郎果冻 +体力(0) +自尊(3) infos_array[0] += temp1=rand()%5+1; infos_array[3] += temp2=rand()%3; cout << "\n女儿用零花钱买了喜之郎果冻,体力增加了:" << temp1 << ",自尊增加了" << temp2 << endl; break; case 1: // 买了漂亮的衣服 +魅力(2) +自尊(3) +气质(5) infos_array[2] += temp1=rand()%5+1; infos_array[3] += temp2=rand()%3; infos_array[5] += temp3=rand()%5+1; cout << "\n女儿用零花钱买了漂亮的衣服,魅力增加了:" << temp1 << ",自尊增加了" << temp2 << ",气质增加了:" << temp3 << endl; break; case 2: // 买了书 +智力(1) +自尊(3) +道德(4) infos_array[1] += temp1=rand()%5+1; infos_array[3] += temp2=rand()%3; infos_array[4] += temp3=rand()%5+1; cout << "\n女儿用零花钱买了书,智力增加了:" << temp1 << ",自尊增加了" << temp2 << ",道德增加了:" << temp3 << endl; break; case 3: // 买了《葵花宝典》 +自尊(3) +魔法(9) infos_array[3] += temp1=rand()%3; infos_array[4] += temp2=rand()%5+15; cout << "\n女儿用零花钱买了《葵花宝典》,自尊增加了:" << temp1 << ",经过学习,魔法增加了" << temp2 << endl; break; case 4: // 钱掉了 -自尊(3) -感受(6) infos_array[3] -= temp1=rand()%3; infos_array[6] -= temp2=rand()%5+1; cout << "\n女儿的零花钱不小心丢了,自尊减少了:" << temp1 << ",感受减少了" << temp2 << endl; break; default: break; } break; } return infos_array; } array<int, 11> reset_infos(array<int, 11> infos_array){ /* 重置属性 infos_array 属性集合(体力(0)、智力(1)、魅力(2)、自尊(3)、道德(4)、气质(5)、感受(6)、体贴(7)、武术(8)、魔法(9)、钱(10)) */ for (int i=0; i<10; i++) { if(infos_array[i] > 100) infos_array[i] = 100; } return infos_array; } void settlement(array<int,11> infos_array){ /* 结算 infos_array 属性集合(体力(0)、智力(1)、魅力(2)、自尊(3)、道德(4)、气质(5)、感受(6)、体贴(7)、武术(8)、魔法(9)、钱(10)) */ int sum = 0; for (int i=0; i<=infos_array.size()-2; i++) { sum += infos_array[i]; } if (sum < 100) { cout << "你真是个失败的爸爸!" << endl; }else if (sum>=100 && sum<500){ cout << "还需继续努力!" << endl; }else if (sum>=500 && sum<700){ cout << "你是个合格的爸爸!" << endl; }else if (sum>=700 && sum<900){ cout << "你是个良好的爸爸!" << endl; }else if (sum>=900){ cout << "你是个优秀的爸爸!" << endl; } } int main(){ /* 1.初始化信息(体力(0)、智力(1)、魅力(2)、自尊(3)、道德(4)、气质(5)、感受(6)、体贴(7)、武术(8)、魔法(9)、钱(10)) 2.游戏大循环 3.根据参数,判定游戏结果 */ // 定义信息 string name_father, name_daugher; // 姓名 int date_birth_month, date_birth_day; // 生日 int age = 11; string constellation; // 星座 array<int, 11> infos_array; // 女儿初始属性集合(体力(0)、智力(1)、魅力(2)、自尊(3)、道德(4)、气质(5)、感受(6)、体贴(7)、武术(8)、魔法(9)、钱(10)) int temp1,temp2,temp3,temp4; // 临时变量 int choice; // 选择变量 // 初始化 cout << "请输入爸爸的姓名:"; cin >> name_father; // 输入爸爸姓名 cout << "请输入女儿的姓名:"; cin >> name_daugher; // 输入女儿姓名 cout << "请输入生日的月份:" ; cin >> date_birth_month; // 输入生日月份 cout << "请输入生日的天数:" ; cin >> date_birth_day; // 输入生日天数 constellation = get_constellation(date_birth_month, date_birth_day); // 获得星座 infos_array = init_infos(constellation, infos_array); // 初始化属性 // 游戏主体 cout << "\n爸爸的姓名是:" << name_father << endl; print_infos(name_daugher, age, date_birth_month, date_birth_day, infos_array); // 打印信息函数 bool is_settlement = false; // 是否结算标记 for(int year = 2018;year <= 2018+8;year++){ if (is_settlement) { break; } bool is_gift = false; // 送礼物状态标记 for(int month = (year == 2018)?6:1; month<=12;) { if (is_settlement) { break; } if(month > date_birth_month){ age++; } // 自动结算 for (int i=0; i<=infos_array.size()-2; i++) { if (infos_array[i] != 100) { break; } char input_Y_or_N; cout << "女儿的全部属性已满,是否结算?(Y/N):"; cin >> input_Y_or_N; if (input_Y_or_N == 'Y' || input_Y_or_N == 'y') { settlement(infos_array); } } if (age == 19) { cout << "女儿已经成年了,有了男朋友" << endl; settlement(infos_array); } // 判断生日 cout << "\n本月是" << month << "月" << endl; if(month == date_birth_month && is_gift == false){ char input_Y_or_N; cout << "本月" << date_birth_day << "号是" << name_daugher << "的生日,要不要送礼物呢?(Y/N):"; // 判断送不送 cin >> input_Y_or_N; if(input_Y_or_N == 'Y' || input_Y_or_N == 'y'){ // 买了礼物 -钱(10) +魅力(2) +气质(5) +感受(6) +体贴(7) is_gift = true; // 选择送礼物,标记为送过了 if(infos_array[10] >= 100){ infos_array[10] -= 100; infos_array[2] += temp1=rand()%10; infos_array[5] += temp2=rand()%10; infos_array[6] += temp3=rand()%10; infos_array[7] += temp4=rand()%10; cout << "给女儿买了生日礼物花了100,女儿很高兴" << endl; cout << "魅力增加了:" << temp1 << ",气质增加了:" << temp2 << ",感受增加了:" << temp3 << ",体贴增加了:" << temp4 << endl; infos_array = reset_infos(infos_array); }else{ cout << "买礼物需要100,钱不够了,快去打工吧!" << endl; } } } // 主菜单 cout << "\n1.查看状态\n2.安排行程\n3.亲子谈话\n4.结算\n请选择操作:"; cin >> choice; int counter = 0; // 对话次数的计数器 switch (choice) { case 1: // 查看状态 print_infos(name_daugher, age, date_birth_month, date_birth_day, infos_array); break; case 2: // 安排行程 infos_array = travel_arrangements(month, infos_array); month++; infos_array = reset_infos(infos_array); break; case 3: // 亲子谈话 if (counter <= 5) { infos_array = parent_talk(infos_array); counter++; // 计数器+1 }else{ cout << "\n本月已经进行过5次谈话了,快去安排行程吧!" << endl; } infos_array = reset_infos(infos_array); break; case 4: // 结算 infos_array = reset_infos(infos_array); print_infos(name_daugher, age, date_birth_month, date_birth_day, infos_array); settlement(infos_array); is_settlement = true; break; } infos_array = reset_infos(infos_array); } infos_array = reset_infos(infos_array); is_gift = false; // 新的一年,重置送礼物的状态 if (age == 19) { cout << "女儿已经成年了,有了男朋友" << endl; settlement(infos_array); } } char response; cout << "输入任意字符退出!" << endl; cin >> response; }
区块链行业的确有着比较快的迭代速度,区块链游戏在不到一年的时间里,已经由1.0时代进入到2.0时代,且即将进入3.0时代。
随着区块链技术的发展,一个个区块链应用逐渐落地,各大厂商纷纷推出了自己的区块链产品,最多最火的当属区块链养成游戏了。
游戏行业一向被认为是区块链技术落地的应用场景之一。与传统游戏纯消费不同,区块链游戏不只是为了消遣,更是一种投资手段。区块链游戏在链端运行,拥有去中心化、虚拟道具确权、数据不可篡改等等优点,解决了传统游戏存在的游戏数据造假、道具增发导致贬值、道具无法流通等痛点,其“消费+投资”的运营模式在一定程度上代表着未来网游的发展方向。
互融云区块链养成游戏平台系统,是一款去中心化、可信任、智能游戏资产价值生态平台。
区块链养成游戏,核心重构厂商玩家关系,丰富游戏玩法,宠物饲养、配种繁殖、养成任务、宠物pk、拍卖交易、装扮搭配、玩法制定、宠物小窝等玩法;用户可以参与到游戏的设计当中,获得游戏分红收益,让玩家从游戏的被动接受者转变为一个主动参与者。支持虚拟资产确权,利用区块链技术,保障玩家对游戏资产的绝对控制权,同时区块链高流通性让“游戏资产市场”的概念得以实现,并支持游戏所有权及交易权,玩家可以自由地买卖自己的游戏资产,利用智能合约技术开发,游戏玩家规则透明、强安全保护、数据可信任、打破孤岛经济、去中心化运营,游戏运营方无法滥发游戏商品、道具且无法篡改和删除游戏数据,使得游戏数据透明化、可信化,创造新型社区化游戏资产价值生态。区块链养成游戏平台系统具有以下特色:
用户资产无法确权,解决资产所有权、拥有资产交易权。
虚拟资产保值、收藏,流通交易,虚拟向现实资产转化。
中心化游戏运营公司,防止篡改游戏规则,删除游戏数据。
游戏经济系统孤岛效应,玩家游戏资产无法与外界互通。
区块链的经济激励模型可以将开发者、渠道商、媒体、玩家等多个参与方聚合在一起,建立一个多方共赢的产业生态;大厂和资本的入局,也使得区块链游戏成为区块链大趋势下最有可能先成熟的一条赛道。
北京互融时代软件有限公司是行业知名综合金融软件及解决方案提供商。公司总部位于北京,注册资本2000余万元,核心团队组建于2004年8月,2015年成为北京股权交易中心展示企业(企业代码:ZS0809),并成功获得“互融云”商标(第9类 16669591号),公司专注于金融信息化领域企业级应用及云服务,先后获得了九十余项计算机软件著作权登记证书,称得上行业内第一家拥有全业务整合系统认证的软件提供商。
本文同步自wing的地方酒馆
在上一篇文章中,我们开发了自己第一个demo级别的DAPP,并且获得了NAS官方的奖励。现在提交随着提交的应用越来越多,审核力度也在加大,所以demo级的应用已经很难以通过了。
于是和小伙伴一起开发一个区块链游戏,来帮助自己更好的学习区块链。
这次的想法是做一个宠物养成游戏,已经发布的地址如下:鸡神养成记http://inspoy.cc/dapp/pet/,欢迎大家来玩耍~,可以随便点一点,一起分得奖池NAS的奖励。
如果你没有NAS,那么在评论发出你的钱包地址,我会给你转入0.011NAS(足够养鸡并购买双倍积分卡),帮助你来体验区块链和部署自己的合约。
需求
列了一下主要的需求有如下几点:
本来想做个最简单的宠物养成游戏,没想到需求也这么复杂。。 先来看看最后的成品吧~
哈哈,因为我跟朋友都不是没接触过前端,所以界面比较简单,也比较丑,不要笑~
需求分析完了,来说说分工,朋友负责的是前端,因为没有接触过,所以跟上次一样,选择bootstrap+jQuery。合约就是js。
鉴于可能有小伙伴不太懂怎么使用,这里写一下简单的教程。
首先安装一个chrome的钱包插件:
https://github.com/ChengOrangeJu/WebExtensionWallet
这个时候你就可以看到插件已经下好了~
打开是这样的:
点击新建钱包,保存你的钱包文件和密码。生成的n1xxxxxx.json 文件名(不带json)代表你的钱包地址。
这个时候,打开鸡神养成记,输入你的钱包地址,点击登陆,会弹出这样的窗口:
点击生成交易,即可获得一只你的小鸡了~~
有时候提示Nonce必须大于什么什么,这种是你手点太快了,关闭这个插件窗口重新点击登陆即可。
另外登陆需要消耗一些GAS,一般是1000000, 1NAS = 10^18 gas,所以你只需要有0.01个nas就可以交易很多次。
之后,只需要对宠物进行喂食,玩耍,当分数处于排行榜内,且购买双倍积分卡的金额大于0.5NAS的时候,则会向排行榜分发这些NAS哦~~
首先思考怎么存储数据,这里因为NAS本身提供map类型的存储,所以定义一个map类型存储空间,用来存储游戏数据,key是用户地址,value是自定义类型的游戏数据。
下面思考游戏数据都包含什么东西,因为宠物有心情、饱食度、经验等属性,所以这些不可少。另外玩耍和喂食都要做出时间限制,防止无限喂食,所以应该包含上次喂食和玩耍时间。包括分数、成神数、双倍时间数、等等信息:
数据结构定义好了。接下来完成各种行为。
首先肯定是领养一只宠物,在区块链中读取有没有游戏数据,如果没有游戏数据,则生成一个数据:
这里有一些问题就是我目前不知道如何定时执行代码,所以我只能在查询宠物信息的时候,弄一个登陆状态,来在查询中储存游戏数据(比如饱食度每分钟会下降),所以第一次查询的时候,消耗gas,就会有一种饱食度事实在下降的效果,实际上是用户登陆的时候,动态根据时间计算的。这里先完成饱食度下降的计算,如果下降超过一定额度,则小鸡死亡:
其次更新一下游戏状态,也就是存储数据,并且每天12点会重置心情值:
关于saveGameData方法,其实就是将游戏数据存储在map类型里:
接下来,需要完成一系列行为,首先是玩耍。
玩耍主要有几点,第一点是玩耍的间隔判断,所以这里根据玩耍间隔和上次玩耍时间来计算。
另外如果处于双倍积分卡内,则获得的积分将会*2,心情的最大值为1.
心情每次增长有一定比例。
投食和玩耍差不多,主要区别在于喂食的时候,小鸡可以成神,这里判断一下经验值即可:
这里双倍积分卡其实也是一个时间属性,用户付费以后,增加对应时间即可。需要注意的是,需要判断一下用户的支付数量,如果不对则拒绝交易。另外在合约内部无法得知合约现在的余额,所以我们需要自己额外维护。这里NAS官方使用的BigNumber库来计算大数。
每次接收到付费的时候判断奖池余额是否大于0.5NAS,如果大于,则向前十分钱,并且清空排行榜数据。
这里有一个特别的地方就是,因为官方map不提供遍历的功能。所以只能另外寸一个map,来存放index对应的用户地址,需要遍历的时候,先从地址map里面获取地址,再从数据map里面取出来数据:
这样完整的合约代码就完成了(吐槽一句,真的不好调试,有一点点小修改就需要重新部署~)
前端部分其实核心就是根据sdk来调用区块的数据。
首先封装两个方法,一个是需要支付的,写入数据函数。一个是不需要支付的查询数据函数:
页面初始化的时候,对ui进行显隐控制,并且只查询游戏在线人数:
点击登陆按钮,查询宠物信息数据,并且登陆完成后,向合约轮训来事实刷新游戏数据:
点击对应的按钮,进行对应的接口调用。
投食按钮:
玩耍按钮:
购买双倍积分卡:
这样,基本的操作界面已经有了:
这里有基本的玩耍介绍:
本文也就到此结束啦~ 人生中第二个DAPP完成了。
如果你觉得对你有帮助,可以点赞,分享~
并且十分建议你来玩《鸡神养成记》,可以获得NAS哦~ 是兄弟,就来砍我吧~
鸡神养成记地址:http://inspoy.cc/dapp/pet/
欢迎加入qq群一起讨论区块链技术:
615075629
点击上方蓝字 关注我们
1、游戏简介
游戏名称:萌宅物语无限爱心版
游戏类型:养成游戏
游戏平台:安卓
整理时间:2020-05-30
游戏评分:8.7
2、游戏介绍心得技巧分享
特别说明
游戏已修改为无限爱心版,在游戏中完成教程模式,使用爱心添加猫娘即可获得!
萌宅物语中文版超好玩法经营养成治愈游戏。不一样的剧情内容,超棒的卡通游戏画风!可爱的宠物,一个属于你的家!温馨的游戏画面,玩法超多!你还在等什么?快来下载吧!
萌宅物语最新版介绍
1.采用小清新美术风格,简约清新的游戏画面营造出甜蜜美好的游戏氛围。
2.易于上手的游戏操作,轻松简单的组成CP体验平凡生活中的恋爱小美好。
3.神秘未知的游戏剧情走向,不同的选择将会产生不一样的结果,趣味无限。
萌宅物语无限爱心版本游戏亮点
★三男三女,两两搭配,总有一款CP像极了你自己。
★海量的故事剧情,全部由玩家一手打造,体验新的生活;
★青春时尚的气息,温馨感人的爱情故事,浪漫与你同行。
★漫画式卡通画风,十分的简约,看起来非常的小清新;
★文字剧情式养成玩法,休闲欢乐的都市生活模拟;
★在游戏中体验欢乐、搞怪、温馨与感动等各种情感;
游戏特色
1、自由的布置你的温馨小屋,在二元次造型风格下尽情的享受生活;
2、以第一视角来感受主角们的爱恨情仇;
3、设置趣味性任务需要去完成,三个月来回进行互换,重新开启全新的生活。
4、手绘风游戏美术画面,色调搭配温馨自然,明亮的配色治愈你的心灵;
5、丰富多彩的剧情故事让你仿佛置身于其中,真实的模拟出各种爱情场景,每日打打闹闹的生活传染到周边各处;
特别说明
游戏已修改为无限爱心版,在游戏中完成教程模式,使用爱心添加猫娘即可获得!
3、小贴士
1、所有游戏我的测试过纯净无毒无害能玩。
2、游戏资源来源互联网收集仅供分享交流学习试玩使用、如喜欢请到官网购买。
4、下载地址
(链接失效联系我补发)
百度网盘下载链接分享体验下载链接:
安卓游戏:萌宅物语无限爱心版
特别说明
游戏已修改为无限爱心版,在游戏中完成教程模式,使用爱心添加猫娘即可获得!
提别提示:安卓/8/9/系统手机测试正常能玩
其它系统手机没试过。
怎样下载点击这里查看:安卓游戏下载教程
下载地址:下图点击进入小程序
输入编号:0095获得游戏下载链接
编号:0095
复制上方编号
点击下方小程序输入编号提取下载链接
点击这里进入小程序