バトル機能を実装していく、リファクタリングをしていくよ!という内容に今回はなりますな!リファクタリングとはなんぞや!!という疑問もここでは説明しているので、この工程はプログラミングをやる上ではかなり重要な工程だと思うので言葉だけでも覚えておくと良い気がする!
リファクタリング、リファクタリング、リファクタリング、、、w
今日もはじめますよ〜!
CryptoZombies | イーサリアムでのゲーム開発を学ぶ
それでは開演します!
チャプター5:ゾンビが闘う
ゾンビが闘う、、というメインの機能の話になりましたね!!
そして勝率は70%という設定っていうのも愛しのゾンビちゃんならではですなw
新しい関数を作って、その中でwinCountとlossCountが増えていくというような形になりそうですな!
さっそくテストだ!!
1では、uint型のAという名前で、それが70になるようにとの事なので、、、
uint attackVictoryProbability = 70;
となります。この変数はコントラクトの宣言のすぐ後に入力します(randNonceの後)
2では、関数を作成せよ。とのことでパラメーターは2あつ、external関数である、との事なので、、
function attack(uint _zombieId, uint _targetId) external {
}
となりますね。
ここはもう、序の口でしょ!
そのまま次のチャプターへGoっ!!
チャプター6:共通ロジックのリファクタリング
まず知らないワードがタイトルにもありますな!リファクタリングとはなんじゃい??という疑問が生まれたので調べると、、、ソフトウエアの外部的振る舞いを保ちつつ、理解や修正が簡単になるよう、内部構造を改善する事、との事だ。
もっとわかりやすく私なりに例えると、、見られる部分はそのままで、内部構造をより良いものに手直しする、という事ですな!
家で例えたら、外観はそのままで、内部の風呂場だけをリフォームする、ようなイメージですね!
リファクタリングに関してはこれで良いでしょう!
ここの説明では、、、攻撃させたいゾンビが本当のそのユーザーの所有者なのか、、という疑問を解決しなければならないと言っているが、それを確認するためには何をしたらいいか、、、という問いが投げかけられている、、、考えるのだ、、、と、、
確認するためには、、、といったら思い当たるものがあるだろう、、、
確認する、、、、、
そうだ!!!require()だ!!
過去、たくさんこのrequireを多様してきたが、今回のレッスンではこのロジックを独自のmodifierに格納する、とな!!!新しい試みだから、ぜひ覚えよう!
1では、ownerOfというmodifierを作成せよ、、引数は以上のとおりなので、、、
modifier ownerOf(uint _zombieId) {
}
となり、続きとして、中身はrequireで確認し正しければ続けるようにせよとの事なので、、
require(msg.sender == zombieToOwner[_zombieId]);
_;
となりますね。正しければ続ける、とは「_;」を入れるのを忘れずにね。
2では、関数定義を変更しownerOf修飾子を使う、との事なので追加するのだが、、
function feedAndMultiply(※省略) internal ownerOf(_zombieId) {}
となる。ownerOfは引数(_zombieId)が渡してあるので入れるのを忘れないようにね。
3では、modifierで確認してからの作業になる事から、関数内の同じ内容のrequireは不要になる事から、以下の文を削除すると、、
/* こちらは削除する👉 require(msg.sender == zombieToOwner[_zombieId]); */
ちょいとまとめるのは書きづらいのだが、、
modifier ownerOf(uint _zombieId) {
require(msg.sender == zombieToOwner[_zombieId]);
_;
}
・
・
function feedAndMultiply(※省略) internal ownerOf(_zombieId) {
中身の「require(msg.sender == zombieToOwner[_zombieId]);」は削除する。
}
となります!!
チャプター6のリファクタリングに関しては以上!!
そしてチャプター7に関しても、別の箇所で使用している同じ部分をリファクタリングという事なので、今回の2と3でテストした内容と一緒の事をしているから、説明は不要だろう!!
一応画面は貼り付けしておくがまったく同じ事をするのだから、間違えないようにな!!
ちなみに、すでにmodifierであるaboveLevelが入っているが、modifier自体は全く別のものという認識なので一つの関数に一つのmodifierという訳ではないので、すでにあるmodifierの後ろに追加してやるだけだ!
あとは中身の重複している内容であるrequireを削除してやれ!
という事で、一気に三つのチャプターをクリアできましたね!!
おめでとう!!
次回はチャプター8から、、、もしかしたら今日中にレッスン4を完了させることができるかも!というかしたい!!
CryptoZombies | イーサリアムでのゲーム開発を学ぶ
って事でまた後ほど!!