Solidity言語

レッスン3:Solidityの高度なコンセプト⑤

さてさて午後の部、スタートしますよ!
チャプター5と6を一気にいきますよ!!長いでっせw

CryptoZombies | イーサリアムでのゲーム開発を学ぶ

それでは始めます!

チャプター5:Time Units

38
前回のブログに書いた通り、Levelに関してはバトルに勝利する事でレベルアップするという形にするものだ。そして一定のレベルに到達すると、新しい技や機能が使えるようになる、という能力を追加していくというのがレベルアップの醍醐味ですよね!ドラクエでいう所の「イオ」を覚えた!!的なねw

メラ、ヒャド、ギラからのイオって衝撃的ですよねw全体魔法すげぇっ!ってなりましたもんw

readyTimeは説明してます通り、、ユーザーが起きている間はずっと捕食し続けられたら、ゾンビが増えに増えまくってゲームとしても成り立たないし、我慢ゲームみたいになって面白くないものになってしまうのを防ぐという意味でも、readyTime(準備時間)は必要になってきますね。

人間のお腹と一緒ですよね、ご飯食べたら次食べるまで、食べずに次に備えて準備するじゃないですかw半永久的に食べ続けてたら死んでしまいます。。なのでreadyTimeという消化時間を設けるわけですね。

時間の単位の説明はなんだかプログラミングをしているなという感じが私はしますw
この説明は例えるのが難しいので、この文章のまま感じ取ってくださいw

11
2038年問題なんて初めて聞きましたが、、なんとな〜くわかります!!
計算はしませんが、32ビットの数値で格納されているっていう事は、1970年から数えられている数値が、2038年にはオーバーフロー(スタートした最初の値に戻る)してしまうからってことね。

2038 – 1970 = 68だから、68年を秒に計算しなおすと、、、、32ビットの入れ物から溢れちゃうってことね。

だからそれまでにUnixでこの問題を放置するわけもないので、新しい改善策としてアップデートだったり何かに全部継承されるという流れがあるんでしょうね、これから先には。

それこそフォークする、的ななにかがねw

なるほどなるほど、、、時間の単位に関しては全部英語わかるからOKだな!全部秒で計算されるってことだし、、OK!!

24
使い方の例ですね。nowは「現在の時間が返ってくる」という意味ですな。訳すと「今」です。

この場合5分がクールダウンタイムという事なので、5分後にはアクションを再び起こすことできるというやり方ですね。

それではテストだ!!!

38

1では、まずはuint型のcooldownTimeを宣言して、1 daysに設定せよ。との事なので、ここに
32

uint cooldownTime = 1 days;

と入力する。この時「1」と「days」の間にはスペースが入りますので、入れないとエラーになりますのでお気をつけくださいね!

2では、_createZombie関数のzombies.pushの行を変更し、zombie structに追加したlevelとreadyTimeに引数を追加せよ。という事なので、、、

uint id = zombies.push(Zombie(_name, _dna, 1, uint32(now + cooldownTime)));

になりますね。
注意書きにもありますが、 nowもcooldownTimeもuint256を返してしまうため、uint32(…)としてわかりやすく変換する、との事。

この方がガスプライスも低く済むのでユーザーにとってもありがたい事ですな!

readyTimeでのアクションについては次のチャプターという事なので、、このまま次へ行きましょう!!

チャプター6:ゾンビのクールダウン

32
なるほどなるほど、、こんな風になるのがいいですね。。
ヘルパー関数なるものが出てきたけど、これはなんだろう、、、やってないよな。。

調べた結果、実行するきっかけを作る関数の事をいうらしいので、helper(助手)ってそのままで良さそうですね。
44
これは便利だから覚えておくようにな。。。。ってどうゆうこっちゃ??

ごめんなさい、これは全然ピンっとこないんですが、、、orz…

storageとmemoryやった時にことを思い出してみるしかないのだが、、、更新してから見返してみよう、、、

めちゃくちゃ理解できなくて悩んだが、、、、テストだ(涙)

57

1では、定義から始めよ、との事で、色々かいてありますので、まずは宣言すると、

function _triggerCooldown(Zombie storage _zombie) internal {
}

となり、さらに1−1では、本体は_zombie.readyTimeをuint32(now + cooldownTime)で設定せよ。と言っているので、

_zombie.readyTime = uint32(now + cooldownTime);


となる。

1−2では、_isReady関数を作成し、色々と指定があるので、、、

function _isReady(Zombie storage _zombie) internal view returns(bool) {
}

となり、1−3では、bool型はtrueかfalseの結果を返すので、returnで何を返すのかというところに、(_zombie.readyTime <= now)を返すように設定とあるので、、

return (_zombie.readyTime <= now);

となる。テストを全部まとめると、、、

function _triggerCooldown(Zombie storage _zombie) internal {
_zombie.readyTime = uint32(now + cooldownTime);
}

function _isReady(Zombie storage _zombie) internal view returns(bool) {
return (_zombie.readyTime <= now);
}

となります。

テストは問題なくできたんだけどなぁ、、、storageポインタを取得、の意味がよくわからん。。。。

進めていくうちに理解できるようになることを祈ります。。

いやはや、、storageポインタという言葉にひっかかり、理解できずで悩んで30分くらい足止めを食らった感があります。。。

まだまだ理解が足りてないという証拠でもあるので、もっともっと理解を深めていけたらと思っております。

ということで今日のところはここまで!!

プロゲートを進めたり、英語のリーディングができるように色々と同時進行していますからね、、、この後の時間はJavaScriptのインプットとリーディングのためのインプットタイムとします。

 

まだまだレッスン3は悩みどころ多いので頑張りますよ〜!!

CryptoZombies | イーサリアムでのゲーム開発を学ぶ

ではまた明日!!

ABOUT ME
shidayuu
元バンドマンで読書・書評をしている函館在住32歳、しだゆうと申します! このブログでは主に読書した内容を元に、「ヒラメキを発信する」をテーマとして毎日更新しています。 書評をメインに、たまに元バンドマンの知識を発信していきます! あなたの役に立てる記事を書いていきます!