movetool icon indicating copy to clipboard operation
movetool copied to clipboard

[Feature Request] 一个链上石头剪刀布小游戏

Open jolestar opened this issue 2 years ago • 4 comments

初步思路,有两个:

  • [x] 用户和智能合约玩游戏
  1. 用户选择出石头剪刀或者布,支付 1 stc,合约里随机(合约中的随机数有局限,不过用在这个场景还可以)出石头剪刀或者布。
  2. 如果用户赢了,从资金库中支付 1 stc 给用户。
  3. 如果用户输了,1 stc 存到资金库。
  4. 需要有个很小的初始资金库。按概率来说,资金库不会被耗尽,如果耗尽就说明随机数规则被别人 hack 了。
  • [ ] 用户和用户之间玩游戏

这个稍微复杂一些,因为无法实现两个用户同时出拳,所以必须是异步的,所以先发起交易的一方需要先隐藏自己的出拳。

  1. Alice 开一局游戏,抵押 x stc,并带上自己选择的 hash。选择用一个很大的随机数字 n 表示,n%3 的余数 0,1,2 分别表示石头,剪刀,布。用户可以自己选择随机数代表自己的选择。hash = sha3(alice address + n)。DApp 生成一个代表该局游戏的链接。
  2. Alice 将自己的链接发给 Bob, Bob 同样做出选择,可以直接提交选择(0,1,2),抵押 x stc, 提交给合约。
  3. Alice 公开自己的选择,提交到合约,合约验证 hash 是否匹配,然后做出裁判。 这里有个超时机制,如果超过一定时间,Alice 依然不公开自己的选择,超时后 Bob 可以直接请求合约仲裁,合约直接判定 Alice 输。
  4. 赢的一方可以获取另外一方抵押的 stc,可以考虑扣取一部分手续费放到合约资金库。另外考虑到激励 Alice 及时公布选择,可以规定,一个分配比例,比如输的一方依然可以拿回 5% 的押金,剩下的都给赢的一方。

开发者收益

通过开发这个游戏可以有以下收益:

  1. 理解智能合约里的随机数
  2. 理解链上的状态的存储以及资金如何锁在合约里。
  3. 理解链上游戏的一些难点,随机数,隐藏信息等。
  4. 理解合约如何和 web 界面交互。

对这个游戏有其他想法或者建议,也欢迎在评论中提出。如果有其他游戏的构思,可以提交成 issue。

jolestar avatar May 16 '22 08:05 jolestar

coding...

vueadmin avatar Jun 27 '22 03:06 vueadmin

智能合约编写完毕,正在处理DAPP

vueadmin avatar Jun 28 '22 15:06 vueadmin

#29 和合约玩部分已经实现 还差用户和用户之间玩游戏

uvd avatar Jul 04 '22 03:07 uvd

增加和朋友玩的游戏 https://github.com/starcoinorg/dapps/pull/51

Tonyce avatar Aug 14 '22 07:08 Tonyce