Sui环形掌上战争0基础开发入门到精通(4)游戏币的使用环形掌上战争既然是游戏,那么游戏币就是必不可少的.sui平台提供了很好的游戏代币的框架功能供开发者使用.1.游戏币的创建funinit(witness:HBCOIN,ctx:&mutTxContext){le
<!--StartFragment-->
环形掌上战争既然是游戏,那么游戏币就是必不可少的. sui平台提供了很好的游戏代币的框架功能供开发者使用.
fun init(witness:HBCOIN,ctx:&mut TxContext){
let (treasury, metadata) =
coin::create_currency(witness, 9, b"HbCoin", b"HbCoin", b"Hb Coins", option::none(), ctx);
transfer::public_freeze_object(metadata);
transfer::public_transfer(treasury, tx_context::sender(ctx))
}
这里我们创建了一个精度为9的游戏币,名字是HbCoin,代号是HBCOIN,描述是Hb Coins. metadata 是一个元数据,里面包含了游戏币的详细信息 treasury 可以理解为游戏币的发行者,这里我们直接把游戏币的发行权交给创建者. treasury具体形式是一个object已经传送给了创建者.
public entry fun init_coin(ctx: &mut TxContext) {
let zero_coin = coin::zero<HBCOIN>(ctx);
transfer::public_transfer(zero_coin, sender(ctx));
}
public fun mint(
treasury_cap: &mut TreasuryCap<HBCOIN>,
amount: u64,
recipient: address,
ctx: &mut TxContext,
) {
let coin = coin::mint(treasury_cap, amount, ctx);
transfer::public_transfer(coin, recipient)
}
先准备一个结构体
struct TranscriptRequestEvent has copy, drop {
// The Object ID of the transcript wrapper
wrapper_id: u64,
// The intended address of the transcript
intended_address: address,
}
然后写一个发送的函数
public entry fun transfer_to_other(user:u64,nowCoin:Coin<HBCOIN>,to:address){
event::emit(
TranscriptRequestEvent{
wrapper_id:user,
intended_address:to
}
);
transfer::public_transfer(nowCoin,to);
}
之前章节提到Cast 策略, 是游戏的核心玩法 石头 剪刀 布 只有这三种策略是被接受的 所以要对输入的策略进行过滤
fun isCast(tcast:String):bool{
let mat = *std::string::bytes(&tcast);
if(CastRock == mat || CastPaper == mat || CastScissors == mat){
return true
}
else{
return false
}
}
这里利用常量进行字符串判断校验,确保策略的合法性
public fun new_logic(at_cast:String,df_cast:String) : u64{
let ret = CLoss;
let mat = *std::string::bytes(&at_cast);
let mdf = *std::string::bytes(&df_cast);
if( mat == mdf){
ret = CDraw;
};
// Rock > Scissors > Paper > Rock
if( CastRock == mat && CastScissors == mdf){
ret = CWin;
};
if( CastRock == mat && CastPaper == mdf){
ret = CLoss;
};
if( CastScissors == mat && CastPaper == mdf){
ret = CWin;
};
if( CastScissors == mat && CastRock == mdf){
ret = CLoss;
};
if( CastPaper == mat && CastRock == mdf){
ret = CWin;
};
if( CastPaper == mat && CastScissors == mdf){
ret = CLoss;
};
ret
}
这里把所有的可能进行判断,返回一个u64的数值 然后通过完整的testcase进行测试
print(&new_logic(
utf8(CastPaper),
utf8(CastPaper)
)
);
print(&new_logic(
utf8(CastPaper),
utf8(CastRock),
)
);
print(&new_logic(
utf8(CastRock),
utf8(CastScissors),
)
);
这样就基本做到万无一失了
(未完待续)
telegram: https\://t.me/move_cn
QQ群: 79489587
<!--EndFragment-->
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!