围棋游戏。棋盘有开源产品。https://github.com/SabakiHQ/Shudan/tree/master/demo-react
-
metamask chrome插件安装
-
部署合约【创建按钮】,用abi 和bin
-
修改 回调函数 【函数】。
https://github.com/SabakiHQ/Shudan/blob/master/demo-react/main.js#L310
该回调函数为 下棋后回调。 回调函数里 用metamask 签名,并广播出去。
- 定时刷新,从区块链里刷新状态。因为区块链打包数据需要时间,前端js已经下棋 实际上区块链不一定已经打包。而且需要同步对手的操作后导致状态的变化。
15秒刷新一下。
修改按钮状态。刷新后 需要设置一些按钮为 disable 状态。棋盘的 busy 状态。
- 其他功能按钮。
流程,从零开始。
1.用户创建围棋游戏。点击 【创建按钮】。 js 记录 当前 合约地址 和 交易hash 所在网络。以便下面使用 。 创建按钮设置 disable。
定时扫描 交易hash判断是否已经 提交。
如果已经提交,则显示 合约地址。比如某个div显示。文字提示 用户可将 合约地址,所在网络 告知好友,即可。
(定时任务不断 刷新各种状态)
- 另一方玩家。拿到 合约地址(0x11111111111111格式)。
在浏览器写入 http://127.0.0.1/0x11111111111111
js 获得 0x1111111,判断合约是否存在。
(定时任务不断 刷新各种状态)
如果游戏状态为未开始,挑战按钮 enable 状态。否则为disable。
点击 【挑战按钮】,执行签名,拉起metamask,广播数据,然后设置为 disable。
未开局 或者 被拒绝,可以【取回筹码】
- 创建者 发现 【挑战任务状态】已经变成 1,【同意挑战】【拒绝挑战】变为enable。
可以掉 【同意挑战】【拒绝挑战】。签名 广播数据。【同意挑战】【拒绝挑战】变为enable。
- 定时任务不断扫描,可以查询出 当前浏览器是黑棋还是白棋子。当前 行棋权,非行棋权 棋盘为 busy。
观察者肯定是 busy,同时所有 按钮 disable。
-
下棋 回调函数。
-
一方【申请终局】,数据签名。
-
另一方【同意终局】 或者【拒绝终局】
-
可以 【强制终局】,任何一方 在自己行棋权 都可以强制终局。
-
【投降】 任何一方 在自己行棋权 都可以 放弃。
-
游戏结束,gameover 为true,赢家可以 取回所有币。【获得收入】