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

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

【CryptZombies】レッスン4チャプター11:ゾンビの敗北(elseステートメント)

ゾンビは負けてもレベルダウンしません。単純にlossCountに負けを追加し、さらにクールダウンが始まるため、また攻撃をするのに一日待たなくてはなりません。

elseステートメント

elseステートメントはifステートメントの延長です。
ifステートメントは、ifを使用した時に、条件が一致すればサブステートメントを実行します。
elseステートメントは、ifの条件式が一致しなければ、違うことを実行させたい時に使用します。

<書式>

if (条件式){
サブステートメント1;
} else{
サブステートメント2;
}

<例>

if(手持ちのお金 <= 50000) {
 テレビを買う;
}else{
 テレビは買わない。;
}

else,else if条件ステートメント、条件式


テストの実行

①elseステートメントを追加せよ。もし我々のゾンビが負けたら、

a. myZombieのlossCountを増やせ。

function attack(uint _zombieId, uint _targetId) external ownerOf(_zombieId) {
   中略
    if (rand <= attackVictoryProbability) {
      myZombie.winCount++;
      myZombie.level++;
      enemyZombie.lossCount++;
      feedAndMultiply(_zombieId, enemyZombie.dna, "zombie");
    } else {
      myZombie.lossCount++;
    }
  }

b. enemyZombieのwinCountを増やせ。

function attack(uint _zombieId, uint _targetId) external ownerOf(_zombieId) {
   中略
    if (rand <= attackVictoryProbability) {
      myZombie.winCount++;
      myZombie.level++;
      enemyZombie.lossCount++;
      feedAndMultiply(_zombieId, enemyZombie.dna, "zombie");
    } else {
      myZombie.lossCount++;
      enemyZombie.winCount++;
    }
  }

②このelseステートメント外で、myZombieにある_triggerCooldown関数を動かすのだ。こうするとゾンビは一日一回だけ攻撃できるようになる。

_triggerCooldown関数は、zombiefeeding.solにあります。

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

これは、レッスン3チャプター6で学習したZombie structを引数にとる関数です。
storageポインタをつけているので、関数にゾンビの参照そのもの(この問ではmyZombie)を渡すことが可能です。

function attack(uint _zombieId, uint _targetId) external ownerOf(_zombieId) {
   中略
    if (rand <= attackVictoryProbability) {
      myZombie.winCount++;
      myZombie.level++;
      enemyZombie.lossCount++;
      feedAndMultiply(_zombieId, enemyZombie.dna, "zombie");
    } else {
      myZombie.lossCount++;
      enemyZombie.winCount++;
    }
    _triggerCooldown(myZombie);
  }


お疲れさまでした!


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