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

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

【CryptZombies】レッスン4チャプター9:ゾンビの勝敗

ゾンビたちがバトルを何回勝ち負けしたかをトラックしていくために、Zombie構造体でバトルの成績を保存していきます。
勝敗については、winCountとlossCountとします。

テストの実行

①Zombie構造体を修正し、さらに2つのプロパティを持つようにせよ。

a. uint16であるwinCount

struct Zombie {
      string name;
      uint dna;
      uint32 level;
      uint32 readyTime;
      uint16 winCount;
   }

b. 同じくuint16であるlossCount

struct Zombie {
      string name;
      uint dna;
      uint32 level;
      uint32 readyTime;
      uint16 winCount;
      uint16 lossCount;
    }


注: ここで思い出して欲しい。構造体内部にuintは格納可能であるが、使用するuintは最小に済ませたいのだ。uint8だと2の8乗は256なので、もし一日一回ゾンビが攻撃をした場合は一年以内にオーバーフローとなり得る。だが2の16乗は65536なので、ユーザーが179年にわたって毎日勝つか負けるかしない限り、これで大丈夫だ。

②Zombie構造体に新たなプロパティができたから、今度は_createZombie()の関数定義を変えることが必要だゾンビの作成定義を、新たなゾンビを0勝0敗で作成するように変更せよ。

_createZombie()の関数定義にwinCount(0)とlossCount(0)を追加します。

function _createZombie(string _name, uint _dna) internal {
        // 2. 新たなゾンビ生成をここで修正せよ
        uint id = zombies.push(Zombie(_name, _dna, 1, uint32(now + cooldownTime), 0, 0)) - 1;
        zombieToOwner[id] = msg.sender;
        ownerZombieCount[msg.sender]++;
        NewZombie(id, _name, _dna);
    }


お疲れさまでした!


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