初心者文系主婦がブロックチェーンを学ぶブログ

IT革命のビッグウェーブに乗り遅れた主婦が、ブロックチェーン革命の波にのるべく、ブロックチェーン技術を学ぶブログです。

【CryptZombies】レッスン3チャプター6:ゾンビのクールダウン(ヘルパー関数(structを引数にする))

ゾンビのクールダウンタイマーを実装するために、feedAndMultiplyを次のように編集します。

①捕食することでゾンビのクールダウンが始まる。

②ゾンビはクールダウン期間が終わるまで子猫を捕食することはできない。

まずは、ヘルパー関数を定義して、ゾンビのreadyTimeを設定したり確認できるようにします。

 

structを引数として渡す

structへのstorageポンタは、privateやinternal関数の引数として渡すことができます。

※storageキーワードをつけた変数はContractのストレージ上のアドレス(つまりポインタ)として扱われる。

Solidityのstorage,memoryキーワードとは何か? - アルゴリズムとかオーダーとか

例えば、Zombies structを関数に渡すことも可能です。

function _doStuff(Zombie storage _zombie) internal {
  //  _zombieを処理する
}

こうすれば、ゾンビIDを渡して探す代わりに、関数にゾンビの参照そのものを渡すことが可能です。

 

テストの実行

①_triggerCooldownの定義から始めよ。この関数は引数としてZombie storageポインタの_zombieを取る。この関数はinternalで宣言せよ。

Zombie storageポインタについては、zombiefactory.solを参照。

f:id:nomadomama:20181208001547p:plain

 

②関数の本体では、_zombie.readyTimeにuint32(now + cooldownTime)を設定せよ。

Zombie構造体のreadyTimeプロパティにアクセスできるように、_zombie.readyTimeを宣言します。

f:id:nomadomama:20181208002126p:plain

 

③次に_isReadyという関数を作成せよ。この関数も_zombieという名前のZombie storage引数を取る。internal viewとして、bool(※)を返すように設定せよ。

f:id:nomadomama:20181208002240p:plain

boolとは、変数(プログラミングにおけるデータを入れておく箱)の種類のひとつであり、その箱には真(ture)か偽(false)のどちらかの値が入る。

https://wa3.i-3-i.info/word14971.html

 

④関数本体は(_zombie.readyTime <= now)を返すように書け。これはtrueまたはfalseとして評価される。この関数はゾンビが最後に捕食してから十分な時間が経過したか否かを判定するものだ。

f:id:nomadomama:20181208002452p:plain

 

お疲れさまでした!

 

 

<参考>

CryptoZombies - イーサリアム上でゲームを開発する方法を学習。Powered by Loom Network