Solidity ゲームで学ぶ CryptoZombies レッスン2その1

cryp1
CryptoZombieで学ぶSolidity。いよいよレッスン2になります。こんにちは、ノリヒロです。今回からレッスン2に入ります。レッスン2も数回に分けてご紹介します。
レッスン1はこちらからどうぞ。
Solidity をゲームで学ぶ CryptoZombies レッスン1その1

Solidity ゲームで学ぶ CryptoZombies レッスン1その2

Solidity ゲームで学ぶ CryptoZombies レッスン1その3

CryptoZombie Solidityを学ぶレッスン2

目次
①チャプター1:レッスン2の概要

②チャプター2:マッピングとアドレス

③チャプター3:Msg.sender

①チャプター1:レッスン2の内容

s2
atya1
tya4
レッスン1ではゾンビの作成方法、及びステータスをブロックチェーン上のデータベースに追加するところまでを行いました。
レッスン2では、作成したゾンビを使用して、カードバトルのようなゲームを実際に作っていくようです。いよいよDappsの真骨頂ですね。どんなゲームが出来上がるのでしょうか。楽しみです。
それではテストです。
tya2
さっそく、下のゾンビを噛ませてみます。その結果です。
tya5
もともとのゾンビ、人間、新しいミュータントのDNAが数字の羅列で出てきました。DNAが仮想通貨でいうところのトランザクションみたいですね。そのあたりがレッスン2で作成できるのでしょうか。

②チャプター2:マッピングとアドレス

1
2

なるほど。
さらりとdonateを誘導しているところが面白いです。walletのアドレスをゾンビの番号、etherをゾンビのDNAに見立てて進むわけですね。また、”マッピング”という機能。なんかピンと来ませんが…情報を出し入れするルール、その保管場所を決めるということですか?
mapping(address => uint) public accountBalance;
accountBalanceというデータは
キーはaddress、バリューはuint型で保管するよということですね。まあ、そうゆう機能があるということを覚えておきます。考え方としては、連想配列
 というようです。マッピングは他の言語では、辞書(ディクショナリー)、ハッシュともよばれているようです。
3
それではテストです。
mapping を2つ作成すればいいんですね。
これ自体は簡単ですね。
答えです。
4

③チャプター3:Msg.sender

v1
v2

msg.senderは、関数を呼び出すためのグローバル変数だということです。何かをコントラクトで動かすためにはmsg.sender の設定が必ず必要であるということですね。

mapping (address => uint) favoriteNumber;

function setMyNumber(uint _myNumber) public{

favoriteNumber[msg.sender] = _myNumber;
}

function whatIsMyNumber() public view returns ( uint){

return favoriteNumber[msg.sender];
}

まず、favoriteNumberのをmappingで示す。
addressがキーで、uint が値ですね。

次に、setMyNumber(unit _myNumber;) public の
関数を作りその内容がFavoriteNumber[msg.sender] =
_myNumber;であると。
FavoriteNumberにmsg.senderの値を入れて返って
きたuintを_myNumberと定義し、mappingに格納
するということですね。

そして最後。
public view で読み取り専用、uintをreturunする関数で、中身はmappinng内のmsg.senderが格納されてuintを返すということですかね。

わかりずらくてすみません。要するに新規のaddressから紐づくuintを作成して、mappingに格納するということでしょうね。
aad
チャプター2で作ったmappingを使います。
zombieToOwner[id] = msg.senderでマッピング更新。この段階でmsg.senderは新addressになっていますね。そしてOwnerZombieCount[msg.sender]でuintが返ってくる、それに1を足す”++”を付けて、uintを増やしています。

順を追っていけば問題ないですが、使わないとすぐに忘れそうですね…。あと、今回みたいに以前のレッスんで作成したコードにさかのぼって付け足していく進め方は、勉強する上では少し混乱するかもしれませんね。どうしてそこにこの関数を加えるかの説明もあまりありませんし、少し唐突な感じがしますね。コードを上から順に追っていって説明するほうがわかりやすい気もしますが、実際にコードを書く際にはどっちがよいんだろうか?

今回のまとめ
マッピング(Mapping)とアドレス(Address)
MSG.sender

いかがでしたでしょうか。
だんだんわかりにくくなってきましたね。
さらりとでも目を通していただけると幸いです。
ありがとうございました。

コメント