2024.07.09
BLOG
【React Native】じゃんけんゲームを作ってみよう!
2019-11-21
この記事の内容
はじめに
React Native環境構築設定は前回の記事を見てください。
【React Native】基礎知識とExpoを使用した開発環境構築!今回はコーディングについての記事なので、React Nativeのコードが書ける環境であれば大丈夫ですが、オススメは「Snack」あるいは「VS Codeテキストエディター」と「expo cli」です。
この記事の内容では「じゃんけんゲーム」のポイントを説明します。その他の詳細はドキュメンテーションを見てください。
【ドキュメント】
Getting Started · React Native下記リンクは日本語翻訳ですが、一部翻訳していない箇所があります。
React Native ドキュメントの日本語訳 – 1日ひとつ、強くなる。STEP1:ボタンの見た目を作りましょう
■必要な知識
- コンポーネント
- スタイル
コンポーネント
HTMLはdiv、spanなどのタグがありますが、React NativeにはText、Viewなどのコンポーネントがあります。React NativeのコンポーネントをインポートしたらJSXのコード(HTMLタグのように見えるコード) で使うことができ、またカスタムコンポーネントが作れることもReact Nativeの強い機能で魅力の一つです。
JSXについては下記の記事で説明しています。
【React Native】JSXとは?STEP1のコードの中にはView、TextのコンポーネントとActionButtonのカスタムコンポーネントがあります。クラスを作って、Componentクラスをextendしたらカスタムコンポーネントになります。クラス内にrender関数を使用し、リターンした内容が画面に出力されます。
スタイル
HTMLはスタイルはCSSでしますが、React NativeはJavaScriptのオブジェクトでします。CSSのプロパティと同じ名前が多いのでCSSが慣れている人なら分かりやすいと思います。React Nativeはキャメルケースを使うのでそれはCSSと違います。STEP1はborderRadiusのプロパティで丸を作りました。
STEP2:画像を入れましょう
■必要な知識
- Props
- <Image>
Props
コンポーネントにはカスタマイズする目的で、パラメータを設定できます。このパラメータを Props と言います。上のコードでaction = {guu}があって、actionはpropの名前です。ActionButtonクラスの中でthis.props.actionの値はpropのactionの値ですので、ここでは「guu」「paa」「choki」を指します。このようにボタンによって違う画像が表示できます。
<Image>
最初に使いたい画像をフォルダーに入れます。今回はこのリンクからダウンロードしました。
3+ Free User:Clker-Free-Vector-Images Rock Paper Scissors & Scissors Images - PixabayImageタグのsourceプロパティを割り当てたら画像が見えます。requireは直定数しか使えないのでImage
//グウパアチョキの画像
let images = {};
images[guu] = require('./img/guu.png');
images[paa] = require('./img/paa.png');
images[choki] = require('./img/choki.png');
STEP3:ボタンに機能を追加しましょう
■必要な知識
- Touchable
Touchable
タッチをしたら関数が実行される機能を追加するために、ActionButtonクラス内のコンポーネントをViewからTouchableOpacityに変更しました。TouchableのonPressプロパティを割り当て、タッチしたらonPressの値の関数が実行されます。上のコードの場合は_onPressButton関数です。
Buttonというコンポーネントもありますが、Buttonでは丸の形が使えないのでTouchableを使っています。TouchableOpacity、TouchableHighlightなどありますが、Touchableの種類についてはドキュメントを見てください。
STEP4:相手のアクションを表示しましょう
■必要な知識
- State
State
Propsはコンポーネントをコントロールする方法の一つですが、もう一つのはstateです。Propsは一回指定して後で変更できない値ですが、stateは変更できるデータとして使います。一般的にはstateはコンストラクタで初期化して、変更時にsetState関数を呼び出します。
上のコードのstateはme(ユーザーのアクション)とopponent(CPU相手のアクション)です。最初は両方none(アクション無)に初期化します。AppのstateはActionButtonコンポーネントの中から変更したいので、そのコンポーネントから親のstateが変更できるための関数を引き渡します。PropsでsetParentStateとして関数を引き渡します。
React NativeではsetStateが実行される際にrender関数が再実行されて、画面が変更されます。じゃんけんゲームの場合はボタンをクリックしたら下記の流れで実行されます。
- this._onPressButton(this.props.action)を呼び出します。this.props.action はguu、paa、chokiの中の一つです。
- _onPressButton関数で親のstate(App)のmeに上記のアクション、opponentにランダムアクションを割り当てします。
- Appのstateは変更されたのでrenderを再実行されます。stateのopponentが更新されたので、opponentクラスの中のthis.props.state.opponentは新しい値になります。その新しい値は画像で反映されます。(this.props.state.opponentはAppクラスのstate)
STEP5:結果を表示しましょう
■必要な知識
- スタイルが配列の場合
STEP1からSTEP4までが分かったらSTEP5のコードが分かると思いますが、まだ使っていないことはスタイルが配列の場合です。
スタイルが配列の場合
style={[styles.circle, styles.opponentColor]}のコードはスタイルは2つのスタイルを配列で割り当てします。配列でしたら、最後のスタイルが優先されます。上のコードでopponentColorは優先なのでbackgroundColorは#588280になります。widthはopponentColorで指定していないのでcircleで指定している100になります。
以上でじゃんけんゲームが完成しました!React Nativeが初めて使う方は難しいと思いますが、自分でコードを変更したり色々作ってみてたら分かりやすくなると思います。
次回
次回はReact Nativeでフォームを作ります。
参考のリンク
- React Nativeのオフィシャルドキュメンテーション
- Snack
- React Nativeのシェープの作り方
- propsでImageの使い方
- JSXの中でJSの使い方
- 親のステートがアクセスできるため
- グウパアチョキの画像
- ドキュメンテーションの日本語翻訳
これからエンジニア転職を考えている方へ
ロックシステムではエンジニアスクール「ロックシステムアカデミー」を運営しています。
プログラミングの基礎知識から本格的な開発ノウハウまでしっかり教えます!
教室は生のIT企業!
◆ 実際の開発プロジェクトを通して経験できる!
◆ 現役エンジニアが直接指導!
◆ 20代の転職成功率100%!
是非公式ホームページもご覧ください

未経験からITエンジニアをめざすならロックシステムアカデミー
大阪市福島駅すぐの現役SE直接指導のプログラミングスクール開校
https://rocksystem.co.jp/academy/

株式会社ロックシステム
「ブラック企業をやっつけろ!!」を企業理念にエンジニアが働きやすい環境をつきつめる大阪のシステム開発会社。2014年会社設立以来、残業時間ほぼゼロを達成し、高い従業員還元率でエンジニアファーストな会社としてIT業界に蔓延るブラックなイメージをホワイトに変えられる起爆剤となるべく日々活動中!絶賛エンジニア募集中。
他の記事へ
2021.07.07
若手は〇〇が一番大事/客先常駐の面談って?
2023.08.21
【8月号】学びとビールの夏!『#プログラミング女子β』とロックシステム会
2021.06.11
ブランクからの再チャレンジ!前職には無かった研修が驚き!
2022.04.15
【動画】Vue.jsを使ってWEBアプリ開発入門!時計アプリを作ろう/後編
2021.11.05
オブジェクト指向を取り入れてお菓子計算アプリを作ってみよう!
2021.07.12
【Visual Studio】C#プログラムを書いてみよう!環境編【楽しく学ぶC#プログラミング講座】#2
2019.12.04