Solidity言語

【プログラミング未経験者でもできる!】CryptoZombiesレッスン①

プログラミング未経験者が仮想通貨に興味を持ち、その技術にも興味をもったことでこの「CryptoZombies」と出会い、ブロックチェーンを使ったアプリ開発の勉強ができるということで挑戦してみよう!というのがきっかけではじめてみました!

 

ブロックチェーンがどのように使われるか、利用できるのか、興味ありませんか??

私は興味津々ですし、自分でその技術を使って何かしてみたいと思っています!

プログラミングに関してはど素人のわたくし、しだゆう(@araShidayuuKi)がこの「CryptoZombies」を通じてブロックチェーンゲームの作り方について学んでいく過程をブログにしていくという企画です

ブログもまだ開設してから日が浅いですが、書くことにより理解がより深まると思っておりますので、全ての内容を恥を承知で書いて行きますのでよろしければお付き合いください!

08

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

CryptoZombiesからDApp開発を学ぶ

Crypto(クリプト)というワードが出た時点でわかる方はピンとくると思います!

こちらはEthereumベースのゲーム(DApp)です!

日本の場合は、仮想通貨のことをクリプトカレンシー(Crypto Currency)と呼ぶのですが、本来クリプトカレンシーというのは「暗号通貨」という意味になります!

仮想という言葉は英語ではバーチャル(Virtual)なので、もし初耳だという方がいたらクリプトカレンシーは暗号通貨の意味なんだ、と理解しておきましょう!

 

今回はCryptoZombies|イーサリアムでのゲーム開発を学ぶということなのですが、、、クリプトゾンビーズ、、直訳すると暗号ゾンビたちですw

すでにたくさんのクリプト◯◯というのがリリースされており、クリプトキティーズ(暗号子猫)だったり、クリプトウォー(暗号戦争)だったり、色々出まくってます!!

 

その中でなぜCryptoZombiesを選んだかというと、、

これはEthereumベースのゲームの作り方を覚える事ができるゲームだからです!!

プログラミングを通して、どうやってゲームが作られていくのかが学べるし、このミッションを全てクリアしたら特典が得られるというお小遣い?ありのゲームなので、やらない理由がないのですよ!

※注:現在はクリア特典は終了しております

今の自分にとってはうってつけのゲームという事で、さっそく実践し、学んだことを書いていこうと思います!

DApp開発の勉強をする前に登録が必要

まず始めるにあたって、メールアドレスとパスワードの登録が必要となります!

言語はホームページの上の部分に「日本」と書いてある部分を押せば、日本語の表示にしてくれます!

このリンクからでも日本語表示の画面に飛びます!→CryptoZombiesリンク

Telegramのアカウントをお持ちの方だったらそちらにも参加してみると、日本語対応のLoom Network-日本語」が開き、オペレーターの方とチャットすることができます!

私もいつもお世話になっているLoom Networkの日本マーケティング担当のMamiさんが対応してくます!!めちゃくちゃ美人です!

もちろん日本語で対応してくれます!

さてさて、以上の登録が終わればレッスン開始です!!

CryptoZombies レッスン1

チャプター1:レッスンの概要

ゾンビの見た目を決める仕組みを説明しているチャプターとなります!

ゾンビの外見はDNAにより決まり16ケタの整数で成り立っているとのこと!

全16桁のうち、頭部・目・シャツが2ケタずつ使用されていて、2ケタあるという事は100通りの種類がつくれるということ

100種類選べる理由としては「00」〜「99」まで割り当てる事ができるという意味です!

とはいえクリプトゾンビーズの主旨はあくまで「イーサリアムでのゲーム開発を学ぶということなので、そこまで種類を多くする必要はないので何種類かだけ選べる形となっております

あくまで想像上の例として

ソンビのDNAが1122334445556666とした場合

11は頭部、22は目、33はシャツ、
444は肌の色、555は目の色、666は服の色という具合

※あくまで例なので色のケタが3桁とは限らない

56
私はシンプルな感じのゾンビに設定して次に進みました

こちらを設定したら次のチャプターへ!

チャプター2へ行く前に、スマートコントラクトとは

仮想通貨を触ったことがある人なら、スマートコントラクトという言葉がよく聞くと思いますが簡単にいえば、「契約の自動化と考えるということです

ただこの契約というのも、全ての取引を意味します!

コントラクト(Contract)とはGoogle翻訳にかけると「契約書・契約するという意味です

契約する時っていろんな書面にサインをしたり、その人の信用情報を確認したりと時間がやたらとかかるものです

Ethereumのスマートコントラクトとは、そんな時間のかかる契約を自動化することで高速化でき、コストダウンにも繋がるという仕組みになるということです

しかもスマートコントラクトの技術というのは、全ての取引情報が記録されるため日本に蔓延している改ざん自体ができない仕組みになっています!

その人の信用情報や契約・取引の全履歴が公開されるため、公開されている情報だけを見れば全ての情報が得られるので、スマートに契約ができるようになるということです!

毎回面倒くさいと思いながらやってたやりとりが履歴として残り、次の契約の際はまた契約書を交わす必要がないため、スムーズに次に進めることができる!という感じでしょう

その際、その取引先に支払いが滞った履歴があったりすると、契約がしづらくなるということもあると思いますが、そこは改ざんのできない技術としての本領を発揮する場面だと言えるでしょう!

説明が長くなってしまいましたがチャプター2へ進みます!

コーディングを勉強していく上で、英語力が必須となりますが、CryptoZombiesで使用されている英単語のリストを下記記事にてまとめておりますので、参考までに下記ご利用ください↓↓

あわせて読みたい
【英単語・和訳リスト】完全無料!!CryptoZombiesで最新のプログラミング言語(Solidity)を学ぶ!プログラミングを勉強する上で、英語のスキルは必須です。 だからといって、英語ができないからチャレンジしないのは違います! ど...

チャプター2:コントラクト

今回Dappを開発するにあたり、使用する言語は「Solidity」という言語になります!

そのSolidity言語の新しいプロジェクトを始める際には必ず以下の構文を宣言する必要があります!

それが、、

pragma solidity ^0.4.19;

です!

この構文はSolidityでアプリを開発する際には絶対に必要となりますので、覚えておきましょう!

テストをやってみて、実行してみて、答えを確認することもできるので、その答えを見ながらやってみてもいいと思います!

チャプター3:状態変数と整数

uintとは、、「符号なし整数のデータ型のことを宣言していて、かつ負数ではない整数をさします

負数とは、マイナスのことですね!

-5などの数字は負数となるのでuintで宣言する事ができません!ということです

詳しくいうと、256ビットの符号なし整数であるuint256のエイリアスである、、ということですが、

ここは難しく考えなくても良さそうですね!

簡単に言っちゃえば

uint(ユーイント)型とは

数字を入れるための箱(データ型)であり、

プラスの数小数点のない数が入る箱です

 

256ビットとは「2」の256乗ということなので「2*2」を256回計算して出た数値分の数が表示できる、という意味なので

256ビットと聞いたら、とても人間の頭で計算できる数字じゃないのでとにかく果てしないだけの数字を入れれるんだなぁという程度に思うといいです!

やってくうちに理解が進むので、uintは符号なし整数のデータ型だって事だけ覚えましょう!

ちなみにuintには

uint8 / uint16 / uint32 / uint64 / uint128という種類がある。

uint256というのもあるが、先ほどの説明のとおりuint = uint256となります

uint8を説明すると、(2の8乗)
2*2*2*2*2*2*2*2 = 256となるので255の数まで格納することができるデータ型であるということです!

※最初の0も1カウントとするため、256ではなく255となる!

ここで難しく考えてしまうと、プログラミングに挫折してしまう要因になってしまうので、難しそうな話は調べても良いけど、スルーしていい事もあるので、ここはスルーしましょうw

実際に使うまではよくわからないと思いますので、使っていきながら理解していきましょう!

チャプター3のテストはこうかかれている!

チャプター3テスト

「dnaDigits」という「uint」を宣言し、それを「16」に設定せよ!

形としては、

データ型 名前 = 代入する値 ;(セミコロン)

となるので

 

回答は

uint dnaDigits = 16;

最初は間違っても全然問題なしです!!

むしろ間違っていきましょう!私はセミコロンを忘れ不正解となりましたw

宣言する際は、「データ型」を宣言し、次に「名前」イコール(=)をいれて、代入する値を入力して、この宣言の最後ですよ!という意味として;(セミコロン)を入れて締める!という流れですね!

・「スペース」の入れ方

データ型の宣言「スペース」名前「スペース」=「スペース」代入する値;
セミコロンの前にはスペースは不要なので間違えないようにね!

この形は基本なのでなんども間違えてしっかりと覚えていきましょう!

チャプター4:数式演算

数式演算ということで、こちらはプログラム上で計算が必要な場合の計算の方法について説明しております!

小学生の頃に習った算数を覚えていればパッとみただけでなんとなーくでもわかると思います!

  • 足し算の場合 x + y (プラスを入れる)
  • 引き算の場合 x – y (マイナスを入れる)
  • 掛け算の場合 x * y (×ではなくアスタリスクを入れる)
  • 割り算の場合 x / y (スラッシュを入れる)
  • 剰余算の場合 x % y (%を入れる、余りを出す計算)

スラッシュ(/)とパーセント(%)は混合してしまいがちかもしれませんが、割り算と剰余算という違いが明確にありますので、曖昧な方はここで明確にしておきましょう!!

で、xのy乗をする場合は、 x ** y もしくは x ^ y という式になります!

※例として、チャプター3で説明したuint8の場合、2 ** 8(2^8)という式になります

使用した例

uint x = 5 ** 3;

の答えは(uint x = 5^3も同様)

5 * 5 * 5なので「125」がxに代入される

^の読み方は、アクサンシルコンフレックスと読むらしい、、、wなげえw

^の方がスペースを入れる必要がないので楽チンですね!

どちらでも使いやすい方でOKです

チャプター5:構造体

ストラクト(struct)とは構造体という意味ですが、1つもしくは複数の値をまとめて格納できる型のことをさします

箱で例えるとわかりやすいですね、、structはでその中に色んな値が入ってるよ〜と捉えるとわかりやすかな

structの中にuint型やstring型のデータが入っているといった感じ!

例としては

Structの中にuintやStringのデータが入っているイメージ!

ここで新しいデータ型が登場しました!

Stringという文字列のデータ型

String(ストリング)型とは文字列の型を意味します!

こんにちは」だったり「Hello, world!!」という文字を格納できるのがstring型です!

  • uint型が負数のない整数を格納できる型
  • string型が文字列を格納できる型です!

ここでも専門用語「UTF-8」という言葉が出てきましたが、世界共通のパソコン語と覚えておくだけでいいでしょうw

文字列を代入したい場合

string x = “こんにちは”;

と入力します!

uintと入力方法はほとんど一緒ですが、文字列と認識させるために「“”(ダブルクォーテーション)」で囲む必要があります!

ここも理解しようとすると、私みたいなアッパラパーな人間には難関と感じ、挫折してしまう原因になります。。

今はまだしっかりと覚えなくても進めるので、考えすぎずに行きましょうw

読み方も覚えておくといいでしょう!

  • uint = ゆーいんと
  • string = すとりんぐ
  • int = いんと

まぁこんな感じでしょう。テストを実行して進みましょう!

チャプター6:配列

固定長配列と可変長配列という言葉が出てきたが、文字を見てもよくわからないというのが私の見解ですw

データ型の後に[](カギカッコ)を入れることにより、であれば1列分だけ格納でき、だと2列分だけ格納する事ができるよ!ということ!

uintだとしたら、負数のない整数を2列分格納できる、ということなので、

例としては「2」と「3」の2つの整数が格納できる

 

stringの例としては

  • 「hello」と「world」の2つの文字列が格納できる

なので2列分しか格納できないため、「hello」「world」「nice」と3つ入れたい場合はと宣言する必要があるということになります!

  • []の中に1以上の数字をいれる場合が「固定長配列
  • []の中に0(空白)の場合は「可変長配列

ということになります!

 

例として、データ型[x]とした時に、

xに1以上の数字が入ると格納に制限がかけれるのが固定長配列で、xが空白(0)だと指定なしということで格納に制限がなく、入れ続けることができるのが可変長配列となる。

という事ではないでしょうかw

Publicの配列という事で、このプロジェクト内であれば共有できるようにするため

publicの宣言の形として

「新しい名前[] public 既にあるStruct名;」

なので、テストとして宣言するには

zombies public Zombie;

と入力して宣言・作成させる!

そうするとSolidityが自動的にgetterメソッドなるものを作成してくれるとの事

簡単なイメージとしては、宣言するとパブリックフォルダにその項目が追加されて、取り出し可能になるという事ですね。

詳しい人が説明したらもっともっと深くわかりやすく教えてくれるんだと思いますが、まだまだ初心者プログラマな私ですから、、このぐらいの理解力で進めたいと思いますw

次回はレッスン1チャプター6から

おっとっっと!こりゃ奥が深いぞ!!そしてサクサク進めるがブログを書きながらだとあまりサクサクいかんw

効率が悪いことに気づいたのでチャプター終わるごとにじゃなくてセクション終わるごとに更新しますw

記事としてはとっても厚くなりそうなので、今回のところはチャプター6までとします。

プログラミング初心者ならでは疑問なんかも多いので、玄人さんには向かない記事ですが、、

そんな始めたいけど挫折怖いという同志の方、仲良くしましょうw

このまま続きを読みたい方は以下のリンクからどうぞ!

あわせて読みたい
【プログラミング未経験者でもできる!】CryptoZombiesレッスン②今回はCryptoZombiesレッスン1のチャプター6からの説明になります! 前回の記事を見ていない方はこちらからご確認ください...

 

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