-
代码
// 简单的游戏,剪子布包锤 contract Game { // 游戏者结构体 struct Voter { string name; // 游戏者的名字 uint vote; // 游戏者选择出的类型(即出剪子(0),布(1)或者锤(2)的索引0,1,2) uint contrastIndex; // 想和谁进行对比 } // 可供选择的类型 struct Type { string name; // 选择的类型 uint index; // 对应的索引 } // 提案创建者地址 address public chairperson; // 这里声明一个状态变量,保存每个独立地址的Voter结构 mapping(address => Voter) public voters; // 一个存储Type结构的动态数组 Type[] public types; // 存储参加游戏的人的地址 address[] public gameAddress; // 游戏类型数组 string[] public gameTypes; string temp; // 初始化函数 function Game() public { // 剪子-Scissors, 布-Cloth, 锤子-Hammer gameTypes = ['Scissors', 'Cloth', 'Hammer']; // 游戏创建者 chairperson = msg.sender; // 根据游戏类型创建Type类型数组数据 for (uint i = 0; i < gameTypes.length; i++) // 添加到数组 types.push( // 创建了一个临时的提案对象 Type({ name: gameTypes[i], index: i }) ); } // 给出你的信息,选择index,对比index,name function vote(uint vot, uint contrastIndex, string name) public { // 选择的如果大于2小于0,则无意义 if (vot > 2) { vot = 2; } else if (vot < 0) { vot = 0; } voters[msg.sender].vote = vot; voters[msg.sender].contrastIndex = contrastIndex; voters[msg.sender].name = name; gameAddress.push(msg.sender); } // 得出与你对比后的结果 function winningVoter() public constant returns (string myResult) { // 调用者 Voter sender = voters[msg.sender]; uint index = 0; if (sender.contrastIndex > gameAddress.length) { index = gameAddress.length - 1; } else { index = sender.contrastIndex; } // 对比者 Voter contrastVoter = voters[gameAddress[index]]; Type senderType = types[sender.vote]; Type contrastType = types[contrastVoter.vote]; // 判断输赢 if ((sender.vote - contrastVoter.vote) == 0) { myResult = '平局'; } else if ((contrastVoter.vote - sender.vote) == 1 || (sender.vote - contrastVoter.vote) == 2) { myResult = '赢了'; } else if ((sender.vote - contrastVoter.vote) == 1 || (contrastVoter.vote - sender.vote) == 2) { myResult = '输了'; } // 拼接返回的结果 temp = strConcat('your name:', sender.name, ' ,your choose:', senderType.name); temp = strConcat(temp, ' ,other name:', contrastVoter.name); temp = strConcat(temp, ' ,other choose:', contrastType.name); myResult = strConcat(temp, ' ,Result:', myResult); } // 2个字符拼接 function strConcat(string _a, string _b) internal returns (string) { return strConcat(_a, _b, "", "", ""); } // 3个字符拼接 function strConcat(string _a, string _b, string _c) internal returns (string) { return strConcat(_a, _b, _c, "", ""); } // 4个字符拼接 function strConcat(string _a, string _b, string _c, string _d) internal returns (string) { return strConcat(_a, _b, _c, _d, ""); } // 5个字符拼接 function strConcat(string _a, string _b, string _c, string _d, string _e) internal returns (string){ bytes memory _ba = bytes(_a); bytes memory _bb = bytes(_b); bytes memory _bc = bytes(_c); bytes memory _bd = bytes(_d); bytes memory _be = bytes(_e); string memory abcde = new string(_ba.length + _bb.length + _bc.length + _bd.length + _be.length); bytes memory babcde = bytes(abcde); uint k = 0; for (uint i = 0; i < _ba.length; i++) babcde[k++] = _ba[i]; for (i = 0; i < _bb.length; i++) babcde[k++] = _bb[i]; for (i = 0; i < _bc.length; i++) babcde[k++] = _bc[i]; for (i = 0; i < _bd.length; i++) babcde[k++] = _bd[i]; for (i = 0; i < _be.length; i++) babcde[k++] = _be[i]; return string(babcde); } } }
-
注意事项
- 一些基本的操作,处理的比较复杂,建议多谷歌
- 例如字符的拼接
- 不允许存在负数
-
结果图
简单游戏的合约
©著作权归作者所有,转载或内容合作请联系作者
- 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
- 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
- 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
推荐阅读更多精彩内容
- 简简单单把长发束进高领的毛衣,穿着长裤就出来了, 舒服的脸庞加上简洁的装扮这就是CELINE设计师,不需要过多的修...