ゲームアプリ (Catch the Ball)

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

ここまでの記事はこちら
 

今回は

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

を実装していきます。
 

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

2つとも画面遷移とデータ保存には欠かせないもので、アプリ開発でとてもよく使われます。いつでもサクッと実装できるように覚えておくと便利だと思います。

それでは始めていきましょう!

 


 

動画

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

 
 

スコアをResultActivityに渡す

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

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

 

必要なimport

前回までと同様に「alt + return」を押して警告を消します。
 

 

追加されるimportはこの1行です。

import android.content.Intent;

 

Intent(インテント)とは?

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

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

まずインテントを作成し、startActivityに渡すことで結果画面を表示することができます。
 

今回はscore(スコア)をResultActivity(結果画面)で使いたいので、インテントをstartActivityに渡す前に、この1行を書いています。

intent.putExtra("SCORE", score);

putExtra(取り出す時に使うキー, 渡したい値)のように使います。

キーはString(文字列)ですが、値は string, int, float などをセットすることができます。
 
 

スコアの表示

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

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

 

スコアを取得

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

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

スコアはint型だったので、getIntExtra()を使います。
書き方はgetIntExtra(キー, 値が取得できなかった場合の値)となります。
 

スコアを表示

scoreLabel.setText(score + "");

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

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

 
 

ハイスコアの表示・保存

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

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

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

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

 

必要なImport

「alt + return」を押して警告を消します。
 


 

追加されるimportはこの1行です。

import android.content.SharedPreferences;

 

SharedPreferencesの準備

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

12行目 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行目 SharedPreferences.Editor editor = sharedPreferences.edit();
19行目 editor.putInt("HIGH_SCORE", score);
20行目 editor.apply();

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

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

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

 
ここが一致しないと保存できても読み出せなくなってしまうのでお気をつけください。
 

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

SharedPreferences 使い方のヒント

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

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

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

String userName = sharedPreferences.getString("KEY_NAME", "名無しさん");
editor.putString("KEY_NAME", userName);

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

 
 

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

最後に「もう一度プレイ」ボタンを押すと、ゲーム画面にもどるようにします。
 

activity_result.xmlで、このように「もう一度プレイ」ボタンを書きました。
 

 
onClickに設定した、ボタンが押された時に呼ばれるtryAgainメソッドを書いていきます。
 

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

 


 

必要なimportはこの2行です。

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

 
画面遷移はMainActivityからスコアを渡した時と同じようにインテントを使用します。
今回は何もデータを渡さないので、インテントを作成してstartActivityに渡すだけです。
 
 

アプリを実行する

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

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

 
 

次に行うこと

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

第9回 「スタート画面の作成」に進む
 

ここまでのコード

 

ABOUT ME
Sara
Sara
「わかりやすく・シンプル」をモットーに、携帯アプリ・ウェブアプリの作り方を紹介します。 独学でプログラミングを勉強をしている方、基礎は勉強したけれど次に何をすれば良いか分からない...という方のお役に立てるサイトを目指しています🙂
独学は難しそうと感じたら

 
独学でプログラミングを勉強するのは難しそう、効率的にプログラミングを学びたいという方はオンラインスクールがオススメです。

オンラインスクールを選ぶときのポイント

  • 無料体験があること
  • 個別サポートがあること

自分にあったスタイルを見つけるために、無料体験のご利用をオススメします。(無料体験後に自分には合わないなと感じたらハッキリ断ってしまって問題ありません。)
 
個別サポートもプログラミング学習に挫折しないために重要なポイントです。エラーや困った時にすぐに個別対応をしてくれるスクールを利用して下さい。

ここでは3つのオンラインスクールを紹介します。
全て無料体験がありますので、ぜひ自分に合ったスクールを見つけてみて下さい????
 

1. TechAcademy(テックアカデミー)

オンライン完結で勉強できるスクールで、コースがとても充実しています。チャットで質問すればすぐに回答を得られるのが一番のおすすめポイントです。
オリジナルのサービスやアプリの開発もサポートしてくれるので、開発したいものが決まっている人にもオススメです。

無料体験はこちら

2. CodeCamp(コードキャンプ)

一対一で受講できる個別指導のプログラミングスクールです。
Webデザイン・Webサービス開発・アプリ開発などを幅広く学習することができます。
マンツーマンなので自分のペースで学習できて、質問もその都度できるのがメリットです。

無料体験レッスンはこちら

3. Treehouse

英語でも良い、英語とプログラミングを同時に勉強したいという方は Treehouse がオススメです。月25ドルで始めることができて、たくさんのプログラミング言語を学ぶことができます。
個別サポートはありませんが、掲示板が充実しています。ほとんどの場合、質問してから30分程度で回答を得ることができます。

7日間の無料体験はこちら

COMMENT

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

CAPTCHA