Webサイト制作コースのお申し込みはこちら Webサイト制作コースのお申し込みはこちら

前回 の記事で、Java でシンプルなじゃんけんゲームを作ってきした。今回の記事では前回作成したプロジェクトのソースを改造して、もう少しゲームらしく、グー・チョキ・パーの手をフリーの画像イメージにしたり、じゃんけんの勝敗数を集計して、先に5回勝った人が勝利というゲームにしていきましょう。

素材のダウンロード

今回は下記リンクの素材サイトから、じゃんけんゲームに必要な素材イメージを使います。

【素材ページへのリンク】
じゃんけんのイラスト

下記のグー・チョキ・パーの3つの画像をダウンロードしておきましょう。

リソースマネージャーへ画像を登録

ダウンロードしたグー・チョキ・パーの3つの画像を、リソースマネージャーへ登録します。

サイドメニューよりリソース・マネージャーを選択し「+」アイコン → 「Drawable のインポート」を選択します。

ファイルを選択するダイアログが表示されるため、先ほどダウンロードしたグー・チョキ・パーの3つの画像を選択します。

選択した画像が表示されます。「次へ」をクリックして進みます。

インポート先のディレクトリが表示されます。画像ファイルが drawable に格納されることを確認しましょう。

ボタンの配置

次は、アプリのレイアウトに ImageButton を置いて、先ほどダウンロードした素材の画像を設定します。

画面上部に配置した LinearLayout の下に ImageButton をパレットからドラッグで配置し、次の通り、属性を設定します。

同じように、チョキとパーの ImageButton も配置して、グーボタンと同じ属性の設定を行います。当然ですが、画像ソース(srcCompat)だけは、チョキとパーボタン用の画像ファイル名を指定してください。

3つの ImageButton を配置した時のレイアウトXMLは次のようになります。

<LinearLayout
    android:id="@+id/linearLayout"
    android:layout_width="0dp"
    android:layout_height="150dp"
    android:orientation="horizontal"
    app:layout_constraintEnd_toEndOf="parent"
    app:layout_constraintStart_toStartOf="parent"
    app:layout_constraintTop_toTopOf="parent">

    <ImageButton
        android:id="@+id/btnRock"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_weight="1"
        android:scaleType="centerInside"
        app:srcCompat="@drawable/janken_gu_300x300" />

    <ImageButton
        android:id="@+id/btnScissors"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_weight="1"
        android:scaleType="centerInside"
        app:srcCompat="@drawable/janken_choki_300x300" />

    <ImageButton
        android:id="@+id/btnPaper"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_weight="1"
        android:scaleType="centerInside"
        app:srcCompat="@drawable/janken_pa_300x300" />
</LinearLayout>

コンピューターの手と勝敗数ラベルの追加

コンピューター側の手を表示する ImageView と、集計した勝敗数を表示 TextView をアプリのレイアウトに追加します。

まず、コンピューターの手を表示する ImageView を画面株に配置します。srcCompat にチョキの画像を設定していますが、ここはゲーム時にランダムな手を設定するため、設定する画像は何でも良いです。

次に勝敗数を表示する TextView を配置します。少し複雑な配置をしていますが、コンポーネント ・ツリーを確認しながら次のイメージのように ConstraintLayout , TableLayout, TableRow, TextViewの順にコンポーネントを配置します。

Java ソースコードの作成

アプリのレイアウトが完成したら、次は Java のソースコードを修正して、じゃんけんゲームに動きをつけていきましょう。

前回 の記事で作成した MainActivity.java を開き次の内容を編集します。

onCreate

画面が表示される時に呼ばれる onCreate メソッドでは、「以下の1行を追加」と書かれている部分を追加します。この1行で、画面表示時にコンピューターの手を表示する ImageView の画像をクリアします。

    // onCreateは画面が表示れる時に呼ばれる
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(activity_main);
        //以下の1行を追加
        ((ImageView)findViewById(R.id.imageView)).setImageDrawable(null);
    }

グー・チョキ・パーボタン タップ時の処理

グー・チョキ・パーボタンをタップした時のメソッドは、前回 の記事で作成した内容から変更はありません。それぞれのボタンが押された時に、game関数を引数(0:グー、1:チョキ、2:パー)を指定して呼び出します。

    // グーが押された時のイベント
    public void onClickRock(View view) {
        game(0);
    }

    // チョキーが押された時のイベント
    public void onClickScissors(View view) {
        game(1);
    }

    // パーが押された時のイベント
    public void onClickPaper(View view) {
        game(2);
    }

game メソッド

今回の game メソッドは、プレイヤーが選択した手と、ランダムに選択したコンピュータの手を比較して勝敗を判定し、画面に結果を表示するゲームのメインの関数です。

    private int playerWinCount = 0;
    private int cpuWinCount = 0;

    /**
     * コンピューターの手をランデムに決定し、勝敗の判定を行う
     * @param playerHand  0:グー、1:チョキ、2:パー
     */
    private void game(int playerHand) {
        // ランダムクラスで、0以上、3未満の乱数を生成して
        // コンピュータの手をランダムに決定
        Random r = new Random();
        int cupHand = r.nextInt(3);

        String judge = null;
        // プレイヤーとコンピュータの手を比較して勝敗を判定する
        if (playerHand == cupHand) {
            judge = "あいこ";
        } else if (playerHand == 0 && cupHand == 2) {
            // 「グー」対「パー」
            judge = "まけ";
            cpuWinCount++;
        } else if (playerHand == 0 && cupHand == 1) {
            // 「グー」対「チョキ」
            judge = "かち";
            playerWinCount++;
        } else if (playerHand == 1 && cupHand == 0) {
            // 「チョキ」対「グー」
            judge = "まけ";
            cpuWinCount++;
        } else if (playerHand == 1 && cupHand == 2) {
            // 「チョキ」対「パー」
            judge = "かち";
            playerWinCount++;
        } else if (playerHand == 2 && cupHand == 0) {
            // 「パー」対「グー」
            judge = "かち";
            playerWinCount++;
        } else if (playerHand == 2 && cupHand == 1) {
            // 「パー」対「チョキ」
            judge = "まけ";
            cpuWinCount++;
        }

        // コンピューターの手および、勝敗の判定結果を画面に表示
        TextView textViewJudge = (TextView)findViewById(R.id.judge);
        textViewJudge.setText(judge);

        // ランダムに選択されたコンピュータの手の画像リソースを設定
        ImageView myImage= (ImageView)findViewById(R.id.imageView);
        if (cupHand == 0) {
            myImage.setImageResource(R.drawable.janken_gu_300x300);
        } else if (cupHand == 1) {
            myImage.setImageResource(R.drawable.janken_choki_300x300);
        } else if (cupHand == 2) {
            myImage.setImageResource(R.drawable.janken_pa_300x300);
        }

        // プレイヤーの勝数を設定
        TextView p = (TextView)findViewById(R.id.playerWinCount);
        p.setText(String.valueOf(playerWinCount));

        // コンピューターの勝数を設定
        TextView c = (TextView)findViewById(R.id.cpuWinCount);
        c.setText(String.valueOf(cpuWinCount));
    }
geme メソッドの流れ
  • Randomクラスを使ってコンピューの手をランダムに設定
  • プレイヤーとコンピュータの手を比較し、勝敗を判定し勝敗数を集計
  • 「かち」「まけ」「あいこ」の判定結果を画面に表示
  • ランダムに設定したコンピュータの手に対応するグー・チョキ・パーの画像を設定
  • 集計した勝敗数を表示

まとめ

ここまでの手順で、じゃんけんゲームは完成です。デバッグで実行してアプリが動くかどうか確認しましょう。

Android アプリの開発環境の構築方法や、前回 作成したシンプルな Java のじゃんけんゲームは次の記事をご覧ください。

【関連記事】
Javaで簡単なAndroidゲームアプリを開発(環境準備)
Javaで簡単なAndroidゲームアプリを作る方法をソースコード付きで紹介

エンジニアになりたい人に選ばれるプログラミングスクール「ポテパンキャンプ 」

ポテパンキャンプは卒業生の多くがWebエンジニアとして活躍している実践型プログラミングスクールです。 1000名以上が受講しており、その多くが上場企業、ベンチャー企業のWebエンジニアとして活躍しています。

基礎的な学習だけで満足せず、実際にプログラミングを覚えて実践で使えるレベルまで学習したいという方に人気です。 プログラミングを学習し実践で使うには様々な要素が必要です。

それがマルっと詰まっているポテパンキャンプでプログラミングを学習してみませんか?

卒業生の多くがWebエンジニアとして活躍

卒業生の多くがWeb企業で活躍しております。
実践的なカリキュラムをこなしているからこそ現場でも戦力となっております。
活躍する卒業生のインタビューもございますので是非御覧ください。

経験豊富なエンジニア陣が直接指導

実践的なカリキュラムと経験豊富なエンジニアが直接指導にあたります。
有名企業のエンジニアも多数在籍し品質高いWebアプリケーションを作れるようサポートします。

満足度高くコスパの高いプログラミングスクール「ポテパンキャンプ」

運営する株式会社ポテパンは10,000人以上のエンジニアのキャリアサポートを行ってきております。
そのノウハウを活かして実践的なカリキュラムを随時アップデートしております。

代表の宮崎もプログラミングを覚えサイトを作りポテパンを創業しました。
本気でプログラミングを身につけたいという方にコスパ良く受講していただきたいと思っておりますので、気になる方はぜひスクール詳細をのぞいてくださいませ。