ゲームアプリ (Catch the Ball)

【Android Studio】ゲームアプリ開発入門 第8回「スコアの表示とハイスコアの保存」

Sara

2023年11月 Android Studio Giraffe | 2022.3.1 で動作確認済み。

ここまでの記事はこちら

今回は

  • 結果画面への画面遷移
  • スコアの表示
  • ハイスコアの保存

を実装していきます。

画面遷移には intent(インテント)、ハイスコアの保存には SharedPreferences(シェアードプレファレンシズ)というものを使っていきます。

2つとも画面遷移とデータ保存には欠かせないもので、アプリ開発でとてもよく使われます。

いつでもサクッと実装できるようになっておきましょう。

解説

1. スコアをResultActivityに渡す

まずはスコアを結果画面で表示するために、MainActivity(ゲーム画面)からResultActivity(結果画面)に score を渡します。 

MainActivity.java を開いて、9~11行目を追加してください。

必要なimport

import android.content.Intent;

Intent(インテント)とは?

新しいアクティビティ(ResultActivity)を開くには Intent(インテント)を使います。

Step 1
Intent intent = new Intent(getApplicationContext(), ResultActivity.class);

Intent オブジェクトを初期化します。

1つ目の引数には現在のアクティビティの Context(コンテキスト)、2つ目の引数には表示するアクティビティの Class オブジェクトを書きます。

Step 2
intent.putExtra("SCORE", score);

ResultActivity(結果画面)に渡したい値を putExtra メソッドを使ってセットします。

渡す値がない場合はこの手順は省略できます。

intent.putExtra("キー", 値);

キーは結果画面で値を受け取る時に使う名前です。文字列で指定します。

には String 型と基本型の、値と配列を使うことができます。

Step 3
startActivity(intent);

Intent オブジェクトを startActivity メソッドに渡して結果画面を表示します。

2. スコアの表示

結果画面にスコアを表示します。

ResultActivity.java を開いて、6~10行目を追加してください。

Warning が出ている箇所があると思いますが、最後に修正するのでそのままにしておいて下さい。

9行目:スコアを取得

int score = getIntent().getIntExtra("SCORE", 0);

先ほど MainActivity.java で設定したキーを使って、スコアを取得します。

スコアは int 型なので getIntExtra メソッドを使います。

書き方は getIntExtra(キー, 値が取得できなかった場合の値)となります。

10行目:スコアを表示

scoreLabel.setText(score + "");

setText には文字列を指定する必要がありますが、score は int 型です。

このような場合は「 + “”」 をつけるだけで文字列として扱えるようになります。

3. ハイスコアの表示・保存

アプリにデータを保存するには

  • SharedPreferences
  • SQLiteデータベース
  • テキストファイル

を使う方法がありますが、今回は一番手軽に使える SharedPreferences を紹介します。 

12~24行目を追加します。

Warning が出ている箇所があると思いますが、最後に修正するのでそのままにしておいて下さい。

必要なImport

import android.content.SharedPreferences;

12行目:SharedPreferencesの準備

まずは SharedPreferences を使えるようにします。

SharedPreferences sharedPreferences = getSharedPreferences("GAME_DATA", MODE_PRIVATE);

getSharedPreferences(データの名前, モード)のように書きます。

モードには、他のアプリからも読み書きできる

  • MODE_WORLD_READABLE
  • MODE_WORLD_WRITEABLE
  • MODE_MULTI_PROCESS

がありますが、今回はこのクイズアプリでのみ使用できれば良いので MODE_PRIVATE にします。

13行目:ハイコアを取り出す

int highScore = sharedPreferences.getInt("HIGH_SCORE", 0);

getInt(キー, データが無かった場合の数値) のように書きます。

16・23行目:ハイスコアを表示する

16行目 highScoreLabel.setText("High Score : " + score);
23行目 highScoreLabel.setText("High Score : " + highScore);

最新スコアがハイスコアを超えた場合は、最新スコアがハイスコアになるので score を表示します。

最新スコアがハイスコアを超えなかった場合は、そのまま highScore を表示します。

18~20行目:ハイスコアを保存する

最新スコアがハイスコアを超えた場合は、ハイスコアを更新します。

SharedPreferences.Editor editor = sharedPreferences.edit();
editor.putInt("HIGH_SCORE", score);
editor.apply();

putInt(キー, 保存する値) のようにデータをセットします。

注意するのが、読み出し時・書き込み時のキーを必ず一致させることです。

読み出し時 sharedPreferences.getInt("HIGH_SCORE", 0);
書き込み時 editor.putInt("HIGH_SCORE", score);

ここが一致していないと、保存できても読み出せなくなってしまうのでご注意ください。

最後に apply() で保存します。

SharedPreferences 使い方のヒント

今回はハイスコアを保存しましたが、複数のスコアやユーザー名、最後にゲームに挑戦した日など色々な使い方ができると思います。

ハイスコア以外にもデータを保存したい場合は、キーを変えることで複数のデータを保存することもできます。

例えばハイスコアに加えて、以下のようにユーザー名を読み書きすることもできます。

読み出し時 String userName = prefs.getString("KEY_NAME", "名無しさん");
書き込み時 editor.putString("KEY_NAME", userName);

ぜひ工夫して使ってみてください。

4. 「もう一度プレイ」ボタンの実装

前回 activity_result.xml に「もう一度プレイ」ボタンを用意しました。

文字が赤くなっている tryAgain メソッドを用意して、このボタンが押されたらゲーム画面を表示する処理を書いていきましょう。

6~8行目を追加します。

必要な import は2つです。

import android.content.Intent;
import android.view.View;

画面遷移は MainActivity からスコアを渡した時と同じようにインテントを使用します。

今回は渡すデータがないので、インテントを作成して startActivity に渡すだけです。

5. アプリを実行する

ここでアプリを実行してみます。

何回かゲームをプレイして、ハイスコアが正しく更新されるかをご確認下さい。

次に行うこと

ゲーム画面と結果画面は完成です!次回からはスタート画面を作成していきましょう。

ここまでのコード

Q
ResultActivity.java
Subscribe
Notify of
guest
0 Comments
Inline Feedbacks
View all comments
ABOUT ME
Sara
書籍やオンライン講座でプログラミングを勉強してフリーランスのプログラマーになりました。
このサイトでは「わかりやすく・シンプル」をモットーに、プログラミングの基礎からアプリ開発まで紹介します。
独学でプログラミングを勉強をしている方、基礎は勉強したけれど次に何をすれば良いか分からない...という方のお役に立てるサイトを目指しています。
主な使用言語:Java / Kotlin / PHP
>> 詳しいプロフィール
>> お問い合わせ
>> 書籍を出版しました!
本格的に学びたい方へ

Code for Fun プログラミング講座

Code for Fun プログラミング講座では、プログラミングの基礎からアプリ開発まで学ぶことができます。

わかりやすく・シンプルをモットーに

  • 同じコードを書けば必ず完成できること
  • 専門用語を使いすぎないこと

を重視しています。

POINT 01

動くコード

プログラミングの文法だけを学んでも、そこから動くアプリを開発をするのは難しいです。

Code for Fun のプログラミング講座では、ゲームやカレンダーなど「アプリとして機能するもの」を作りながらプログラミングを学ぶことができます。

POINT 02

自分のペースで

オンライン講座なので、ご自身のペースで学習を進めて頂けます。

分からないことがあっても、前のレッスンに戻ることができるので安心です。

お申し込みしたその日からからすぐに始めることができます。

POINT 03

個別サポート

プログラミング学習では、エラーが起きることはよくあります。そんな時はお気軽にお問い合わせください!

コメント欄またはメールによるサポートを回数無制限でご利用頂けます。(*講座に関連するご質問のみ対応)

今すぐ無料でお試し

0
この記事にコメントするx
記事URLをコピーしました