显然,五分之二的人都知道“井字棋”虽然游戏,根据公众的判断、方向、地点或选择,可以用不同的名字来称呼。
[package]
name = "tic_tac_toe"
version = "0.8.0"
authors = [ "YOUR_NAME
edition = "2021"
overflow-checks = false
[dependencies]
# 导入所有墨水!板条箱
ink_primitives = { version = "~3.3.0" , default-features = false }
ink_metadata = { version = "~3.3.0" , default-features = false , features = [ "derive" ],
"~3.3.0" , default-features = false }
ink_storage = { version = "~3.3.0" , default-features = false }
ink_lang = { version = "~3.3.0" , default-features = false }
ink_prelude = { version = "~3.3.0" , default-features = false }
ink_engine = { version = "~3.3.0" , default-features = false , optional = true }
scale = { package = "parity-scale-codec " , 版本 = "3" ,默认功能=假, features = [ "derive" ] }
scale-info = { version = "2" , default-features = false , features = [ "derive" ], optional = true }
openbrush = { version = "~2.2.0" , default-features = false , features = [ "psp22" ] }
[lib]
overflow-checks = false
name = "tic_tac_toe"
path = "lib.rs"
crate-type = [
# 用于普通合约 Wasm blob。
“cdylib”
]
[配置文件。
= false
[features]
default = [ "std" ]
std = [
"ink_primitives/std" ,
"ink_metadata" ,
"ink_metadata/std" ,
"ink_env/std" ,
"ink_storage/std" ,
"ink_lang/std" ,
" scale/std" ,
"scale-info" ,
"scale-info/std" ,
# Brush dependency
"openbrush/std" ,
请注意,本文提供的源代码未经批准,存在漏洞;仅用于教育目的,仅供参考。
如果你从未听说过井字游戏,它是一种棋盘游戏,有3种棋盘游戏,x3格方形网格(根据玩家的爱好可能会有更多的数量,比如6×6,10×10等)每个玩家应用两个角色进行游戏,一般是“X”和“O”。
玩家可以将相关角色插入(制作)到空单元格中移动,以建立标准、对角度或垂直图案,并避免对手做同样的事情,以及他们的智慧赢得完整的线而不受阻碍。对于每一轮,如果没有赢家(即所有的槽都被填满,但没有玩家制作有效的图案),游戏被标记为平局,并开始新一轮。
从下图可以看出,分配“X”所有三轮标记的玩家都是赢家(忽略)“O”没有玩完整轮的事实;玩家二是傻瓜)。
在这个例子中,两个玩家也会玩一定数量的游戏。赢家拿走了所有的钱,比赛结束了,但如果是平局,他们会把钱还给对方,比赛就结束了。每场比赛结束后,旗盘将被重置。
构造器
接下来我们要做的就是做的“TicTacToe”构造以后的“tic_tac_toe”在模块完成过程中定义构造函数,在安排我们的智能合同时启用,以复位我们想要注册的一些值,默认进入。
我们想定义玩家的地址,游戏中常用的地址PSP22货币,他们的标记及其给出的游戏下注额度。
let me = ink_lang::utils:: initialize_contract (|contract: & mut Self | {
let board = vec! [ 0 ; 9 ]; //空数组
contract.board = board; //设置 board 为空状态
contract.staking_token = staking_token; //设置质押代币
contract.stake_amount = stake_amount; //设置质押金额
assert! (player_one != player_two); //地址不能相同
assert! (player_one_symbol != player_two_symbol); //符号必须是不同的
断言!((player_one_symbol ==1 || player_one_symbol == 2 ) && (player_two_symbol == 1 || player_two_symbol == 2 )); //符号必须是 1 或 2
contract.player_one = player_one; //设置玩家一地址
contract.player_two = player_two; //设置玩家两个地址
contract.symbols. 插入(player_one, &player_one_symbol); //设置玩家一符号
contract.symbols. 插入(player_two,&player_two_symbol);//设置玩家两个符号
contract.turn = player_one; //初始化轮到玩家一
});
在这个例子中,我们将0作为空单元格,1作为空单元格X,将2做为O。我们还将应用0到8来表示电路板的单元格,从左上角到右下角,这意味着左上角的单元格为0,右下角的单元格为8,中心的单元格为5。
从上到下分析上面的代码,我们可以看到创建了一个空数组,每个人都通过它将0插入从0到8的每个索引,这意味着一开始是一个空板。
货币及其质押金额也按其基本参数质押。
我们需要确保玩家1没有使用与玩家2相同的地址,并且没有分配相同的标记(仅限于1和2)。应用程序提供的基本参数玩家1和玩家2地址。
然后,您还将两个玩家选择的标记插入投影中,以他们的地址为键,选择的标记为键u64类别的值。
然后我们最终将玩家1设置为第一个转弯。
本站声明:
1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。
原创文章,作者:ItWorker,如若转载,请注明出处:https://blog.ytso.com/293285.html