0
0

More than 3 years have passed since last update.

計算ゲーム作成中 メモ(追記あり)

Last updated at Posted at 2020-02-17

追記あります。
一番下に最新のソースコードがあります。

計算ゲームを教材通りに作ったもの↓

コード↓

import androidx.appcompat.app.AppCompatActivity;
import androidx.constraintlayout.widget.ConstraintLayout;

import android.os.Bundle;
import android.os.CountDownTimer;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;

import java.util.ArrayList;
import java.util.Random;

public class MainActivity extends AppCompatActivity {

Button goButton;
ArrayList<Integer> answers = new ArrayList<Integer>();
int locationOfCorrectAnswer;
TextView resultTextView;
int score = 0;
int numberOfQusetions = 0;
TextView scoreTextView;
TextView sumTextView;
Button button0;
Button button1;
Button button2;
Button button3;
TextView timerTextview;
Button playAgainButton;
ConstraintLayout gameLayout;

public void playAgain(View view) {
    score = 0;
    numberOfQusetions = 0;
    timerTextview.setText("30s");
    scoreTextView.setText("0/0");
    newQuetion();
    playAgainButton.setVisibility(View.INVISIBLE);
    resultTextView.setText(""
    );

    new CountDownTimer(30100, 1000) {
        @Override
        public void onTick(long millisUntilFinished) {
            timerTextview.setText(String.valueOf(millisUntilFinished / 1000) + "s");

        }

        @Override
        public void onFinish() {
            resultTextView.setText("Done!");
            playAgainButton.setVisibility(View.VISIBLE);

        }
    }.start();

}

public void chooseAnswer(View view) {
    if (Integer.toString(locationOfCorrectAnswer).equals(view.getTag().toString())) {
        resultTextView.setText("Correct!");
        score++;

    } else {
        resultTextView.setText("Wrong! :(");

    }

    numberOfQusetions++;
    scoreTextView.setText(Integer.toString(score) + "/" + Integer.toString(numberOfQusetions));

    newQuetion();
}

public void start(View view) {
    goButton.setVisibility(View.INVISIBLE);
    gameLayout.setVisibility(View.VISIBLE);
    playAgain(findViewById(R.id.timerTextView));

}

public void newQuetion() {
    //インスタンス生成  
    //クラス名 変数 = new クラス名();
    Random rand = new Random();

    //整数の変数a,bを定義  0~20の21通りの整数をランダムに代入
    int a = rand.nextInt(21);
    int b = rand.nextInt(21);

    sumTextView.setText(Integer.toString(a)+ " + " + Integer.toString(b));

    //0~3の4通りの整数をランダムに代入 Tagも0~3の4通り
    locationOfCorrectAnswer = rand.nextInt(4);
    //answersリストの中身(4つの答え)を消去 
    answers.clear();

    for(int i=0; i<4; i++) {
        if(i==locationOfCorrectAnswer) {
            answers.add(a+b);
        } else {
            //0~40の41通りの整数をランダムに代入(a,bにはそれぞれ0~20の整数が入るため 最小0+0 最大20+20)
            int wrongAnswer = rand.nextInt(41);

            while(wrongAnswer == a+b) {
                wrongAnswer = rand.nextInt(41);

            }

            answers.add(wrongAnswer);
        }

    }

    button0.setText(Integer.toString(answers.get(0)));
    button1.setText(Integer.toString(answers.get(1)));
    button2.setText(Integer.toString(answers.get(2)));
    button3.setText(Integer.toString(answers.get(3)));
}


@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    goButton = findViewById(R.id.goButton);
    sumTextView = findViewById(R.id.sumTextView);

    button0 = findViewById(R.id.button0);
    button1 = findViewById(R.id.button1);
    button2 = findViewById(R.id.button2);
    button3 = findViewById(R.id.button3);
    resultTextView = findViewById(R.id.resultTextView);
    scoreTextView = findViewById(R.id.scoreTextView);
    timerTextview = findViewById(R.id.timerTextView);
    playAgainButton = findViewById(R.id.playAgainButton);
    gameLayout = findViewById(R.id.gameLayout);

    goButton.setVisibility(View.VISIBLE);
    gameLayout.setVisibility(View.INVISIBLE);

これを少しアレンジして

・点数によって3種類のテキストが表示され、効果音が鳴る

@Override
public void onFinish() {
MediaPlayer mediaPlayer;
buttonHide();

            if(score > 9) {
                resultTextView.setText("ほ、ほめてあげるわ//");
                mediaPlayer = MediaPlayer.create(getApplicationContext(), R.raw.shine1);
                mediaPlayer.start();

            } else if(score > 5) {
                resultTextView.setText("ふん、まあまあね");
                mediaPlayer = MediaPlayer.create(getApplicationContext(), R.raw.shakin1);
                mediaPlayer.start();

            } else {
                resultTextView.setText("あんたやる気あるの?");
                mediaPlayer = MediaPlayer.create(getApplicationContext(), R.raw.tin1);
                mediaPlayer.start();
            }

            playAgainButton.setVisibility(View.VISIBLE);

        }

・タイマーが0になるとボタンが消え、後ろにある猫の画像を表示

public void buttonShow() {
button0.setVisibility(View.VISIBLE);
button1.setVisibility(View.VISIBLE);
button2.setVisibility(View.VISIBLE);
button3.setVisibility(View.VISIBLE);
}

public void buttonHide(){
    button0.setVisibility(View.INVISIBLE);
    button1.setVisibility(View.INVISIBLE);
    button2.setVisibility(View.INVISIBLE);
    button3.setVisibility(View.INVISIBLE);
}

という機能をプラスしたもの↓

コード全体↓

package com.example.braintrainer;

import androidx.appcompat.app.AppCompatActivity;
import androidx.constraintlayout.widget.ConstraintLayout;

import android.media.MediaPlayer;
import android.os.Bundle;
import android.os.CountDownTimer;
import android.text.Layout;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.TextView;

import java.util.ArrayList;
import java.util.Random;

import static android.media.MediaPlayer.create;

public class MainActivity extends AppCompatActivity {

Button goButton;
ArrayList<Integer> answers = new ArrayList<Integer>();
int locationOfCorrectAnswer;
TextView resultTextView;
int score = 0;
int numberOfQusetions = 0;
TextView scoreTextView;
TextView sumTextView;
Button button0, button1, button2, button3;
TextView timerTextview;
Button playAgainButton;
ConstraintLayout gameLayout;
ImageView imageView0;



public void playAgain(View view) {
    score = 0;
    numberOfQusetions = 0;
    timerTextview.setText("10s");
    scoreTextView.setText("0/0");
    newQuetion();
    playAgainButton.setVisibility(View.INVISIBLE);
    resultTextView.setText("");
    buttonShow();


    new CountDownTimer(5100, 1000) {
        @Override
        public void onTick(long millisUntilFinished) {
            timerTextview.setText(String.valueOf(millisUntilFinished / 1000) + "s");

        }

        @Override
        public void onFinish() {
            MediaPlayer mediaPlayer;
            buttonHide();

            if(score > 9) {
                resultTextView.setText("ほ、ほめてあげるわ//");
                mediaPlayer = MediaPlayer.create(getApplicationContext(), R.raw.shine1);
                mediaPlayer.start();

            } else if(score > 5) {
                resultTextView.setText("ふん、まあまあね");
                mediaPlayer = MediaPlayer.create(getApplicationContext(), R.raw.shakin1);
                mediaPlayer.start();

            } else {
                resultTextView.setText("あんたやる気あるの?");
                mediaPlayer = MediaPlayer.create(getApplicationContext(), R.raw.tin1);
                mediaPlayer.start();
            }

            playAgainButton.setVisibility(View.VISIBLE);

        }
    }.start();

}

public void chooseAnswer(View view) {
    if (Integer.toString(locationOfCorrectAnswer).equals(view.getTag().toString())) {
        resultTextView.setText("正解にゃ");
        score++;

    } else {
        resultTextView.setText("間違いにゃ");

    }

    numberOfQusetions++;
    scoreTextView.setText(Integer.toString(score) + "/" + Integer.toString(numberOfQusetions));

    newQuetion();
}

public void start(View view) {
    goButton.setVisibility(View.INVISIBLE);
    gameLayout.setVisibility(View.VISIBLE);
    playAgain(findViewById(R.id.timerTextView));

}

public void newQuetion() {

    //インスタンス生成  
    //クラス名 変数 = new クラス名();
    Random rand = new Random();

    //整数の変数a,bを定義  0~20の21通りの整数をランダムに代入
    int a = rand.nextInt(21);
    int b = rand.nextInt(21);

    sumTextView.setText(Integer.toString(a)+ " + " + Integer.toString(b));

    //0~3の4通りの整数をランダムに代入 Tagも0~3の4通り
    locationOfCorrectAnswer = rand.nextInt(4);
    //answersリストの中身(4つの答え)を消去 
    answers.clear();

    for(int i=0; i<4; i++) {
        if(i==locationOfCorrectAnswer) {
            answers.add(a+b);
        } else {
            //0~40の41通りの整数をランダムに代入(a,bにはそれぞれ0~20の整数が入るため 最小0+0 最大20+20)
            int wrongAnswer = rand.nextInt(41);

            while(wrongAnswer == a+b) {
                wrongAnswer = rand.nextInt(41);

            }

            answers.add(wrongAnswer);
        }

    }

    button0.setText(Integer.toString(answers.get(0)));
    button1.setText(Integer.toString(answers.get(1)));
    button2.setText(Integer.toString(answers.get(2)));
    button3.setText(Integer.toString(answers.get(3)));
}

public void buttonShow() {
    button0.setVisibility(View.VISIBLE);
    button1.setVisibility(View.VISIBLE);
    button2.setVisibility(View.VISIBLE);
    button3.setVisibility(View.VISIBLE);
}

public void buttonHide(){
    button0.setVisibility(View.INVISIBLE);
    button1.setVisibility(View.INVISIBLE);
    button2.setVisibility(View.INVISIBLE);
    button3.setVisibility(View.INVISIBLE);
}


@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    goButton = findViewById(R.id.goButton);
    sumTextView = findViewById(R.id.sumTextView);

    button0 = findViewById(R.id.button0);
    button1 = findViewById(R.id.button1);
    button2 = findViewById(R.id.button2);
    button3 = findViewById(R.id.button3);
    resultTextView = findViewById(R.id.resultTextView);
    scoreTextView = findViewById(R.id.scoreTextView);
    timerTextview = findViewById(R.id.timerTextView);
    playAgainButton = findViewById(R.id.playAgainButton);
    gameLayout = findViewById(R.id.gameLayout);
    imageView0 = findViewById(R.id.nirami);


    goButton.setVisibility(View.VISIBLE);




}

}

(追記1)

タイマーが0になった時
 ・点数によって3種類の猫画像のどれかが表示されるように変更
  

     @Override
        //カウントダウンが0になった時の挙動
        public void onFinish() {
            MediaPlayer mediaPlayer;

            //4つのボタン(選択肢)を見えなくする
            buttonHide();

            resultTextView.setVisibility(View.INVISIBLE);
            commentTextView.setVisibility(View.VISIBLE);

            if(score > 9) {
                commentTextView.setText("ほ、ほめてあげるわ//");
                imageKakure.setVisibility(View.VISIBLE);

                //効果音キラキラが鳴る
                mediaPlayer = create(getApplicationContext(), R.raw.shine1);
                mediaPlayer.start();



            } else if(score > 5) {
                commentTextView.setText("ふん、まあまあね");
                imageYousumi.setVisibility(View.VISIBLE);

                //効果音シャキーン!が鳴る
                mediaPlayer = create(getApplicationContext(), R.raw.shakin1);
                mediaPlayer.start();

            } else {
                commentTextView.setText("あんたやる気あるの?");
                imageNirami.setVisibility(View.VISIBLE);

                //効果音チーンが鳴る
                mediaPlayer = create(getApplicationContext(), R.raw.tin1);
                mediaPlayer.start();

            }

            //playAgainButton出現
            playAgainButton.setVisibility(View.VISIBLE);

        }

    }.start();

また
 ・playAgainButtonを押したとき、出現した4つのボタンにより猫の画像が見えなくなるのではなく、
  猫画像3種類とも消えるように設定(表示されていたかどうか二関わらず)。

//猫の画像見えなくする
imageNirami.setVisibility(View.INVISIBLE);
imageYousumi.setVisibility(View.INVISIBLE);
imageKakure.setVisibility(View.INVISIBLE);

ゲームの様子をキャプチャしたもの↓
https://twitter.com/i/status/1231845874810015744

ソースコード全体↓  コメントあまり書いてなかったので、あちこち書きました。

package com.example.braintrainer;

import androidx.appcompat.app.AppCompatActivity;
import androidx.constraintlayout.widget.ConstraintLayout;

import android.media.MediaPlayer;
import android.os.Bundle;
import android.os.CountDownTimer;
import android.text.Layout;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.TextView;

import java.util.ArrayList;
import java.util.Random;
import java.util.zip.InflaterInputStream;

import static android.media.MediaPlayer.create;

public class MainActivity extends AppCompatActivity {

Button goButton;

//整数の入るanswersリスト(インスタンス)を生成
ArrayList<Integer> answers = new ArrayList<Integer>();

int locationOfCorrectAnswer;
TextView resultTextView;
TextView commentTextView;
int score = 0;
int numberOfQusetions = 0;
TextView scoreTextView;
TextView sumTextView;
Button button0, button1, button2, button3;
TextView timerTextview;
Button playAgainButton;
ConstraintLayout gameLayout;
ImageView imageNirami;
ImageView imageKakure;
ImageView imageYousumi;




//playaAgainボタンを押したときの挙動を定義
public void playAgain(View view) {
    score = 0;
    numberOfQusetions = 0;
    timerTextview.setText("15s");
    scoreTextView.setText("0/0");

    //新しい問題と選択肢を表示
    newQuetion();

    //resultTextViewを見えるようにする
    resultTextView.setVisibility(View.VISIBLE);

    //commentTextViewを見えなくする
    commentTextView.setVisibility(View.INVISIBLE);

    //playAgainButtonを見えなくする
    playAgainButton.setVisibility(View.INVISIBLE);

    //猫の画像見えなくする
    imageNirami.setVisibility(View.INVISIBLE);
    imageYousumi.setVisibility(View.INVISIBLE);
    imageKakure.setVisibility(View.INVISIBLE);

    resultTextView.setText("");

    //4つのボタン(選択肢)出現
    buttonShow();



    //インスタンス.start()     インスタンスのメソッド呼び出し
    //CountDownTimerクラスから生成したインスタンスにstart()メソッドという指示を与える
    new CountDownTimer(15100, 1000) {

        //CountDownTimerクラスのメソッドを上書き
        @Override
        //カウントダウンしている間の挙動
        public void onTick(long millisUntilFinished) {

            //残り何秒か表示
            timerTextview.setText(String.valueOf(millisUntilFinished / 1000) + "s");

        }


        @Override
        //カウントダウンが0になった時の挙動
        public void onFinish() {
            MediaPlayer mediaPlayer;

            //4つのボタン(選択肢)を見えなくする
            buttonHide();

            resultTextView.setVisibility(View.INVISIBLE);
            commentTextView.setVisibility(View.VISIBLE);

            if(score > 9) {
                commentTextView.setText("ほ、ほめてあげるわ//");
                imageKakure.setVisibility(View.VISIBLE);

                //効果音キラキラが鳴る
                mediaPlayer = create(getApplicationContext(), R.raw.shine1);
                mediaPlayer.start();



            } else if(score > 5) {
                commentTextView.setText("ふん、まあまあね");
                imageYousumi.setVisibility(View.VISIBLE);

                //効果音シャキーン!が鳴る
                mediaPlayer = create(getApplicationContext(), R.raw.shakin1);
                mediaPlayer.start();

            } else {
                commentTextView.setText("あんたやる気あるの?");
                imageNirami.setVisibility(View.VISIBLE);

                //効果音チーンが鳴る
                mediaPlayer = create(getApplicationContext(), R.raw.tin1);
                mediaPlayer.start();

            }

            //playAgainButton出現
            playAgainButton.setVisibility(View.VISIBLE);

        }

    }.start();

}

//4種類のボタンを押したときの挙動(メソッド)を定義
public void chooseAnswer(View view) {

    //正解のタグと押したタグが同じとき(4つのボタンに0~3の4種類のタグを設定している)
    if (Integer.toString(locationOfCorrectAnswer).equals(view.getTag().toString())) {
        resultTextView.setText("正解にゃ");
        score++;

    } else {
        resultTextView.setText("間違いにゃ");

    }

    numberOfQusetions++;

    //scoreTevtView 何問中何問正解しているか表示
    scoreTextView.setText(Integer.toString(score) + "/" + Integer.toString(numberOfQusetions));

    //新しい問題と選択肢を表示
    newQuetion();
}

//Goボタンを押したときの挙動(メソッド)を定義
public void start(View view) {
    goButton.setVisibility(View.INVISIBLE);

    //残り時間、問題、得点/問題数、4つの選択肢(ボタン)を出現させる
    gameLayout.setVisibility(View.VISIBLE);
    playAgain(findViewById(R.id.timerTextView));

}

public void newQuetion() {

    //インスタンス生成  
    //クラス名 変数 = new クラス名();
    Random rand = new Random();

    //整数の変数a,bを定義  0~20の21通りの整数をランダムに代入
    int a = rand.nextInt(21);
    int b = rand.nextInt(21);

    sumTextView.setText(Integer.toString(a)+ " + " + Integer.toString(b));

    //0~3の4通りの整数をランダムに代入 Tagも0~3の4通り
    locationOfCorrectAnswer = rand.nextInt(4);
    //answersリストの中身(4つの答え)を消去 
    answers.clear();

    for(int i=0; i<4; i++) {
        if(i==locationOfCorrectAnswer) {
            answers.add(a+b);
        } else {
            //0~40の41通りの整数をランダムに代入(a,bにはそれぞれ0~20の整数が入るため 最小0+0 最大20+20)
            int wrongAnswer = rand.nextInt(41);

            //wrongAnswerが正解と一緒の場合、再び0から40の41通りの整数をランダムに代入
            while(wrongAnswer == a+b) {
                wrongAnswer = rand.nextInt(41);

            }

            //answersリストに間違った答えを追加
            answers.add(wrongAnswer);
        }

    }

    button0.setText(Integer.toString(answers.get(0)));
    button1.setText(Integer.toString(answers.get(1)));
    button2.setText(Integer.toString(answers.get(2)));
    button3.setText(Integer.toString(answers.get(3)));
}

//4つのボタン(選択肢)を見えるようにするメソッドを定義
public void buttonShow() {
    button0.setVisibility(View.VISIBLE);
    button1.setVisibility(View.VISIBLE);
    button2.setVisibility(View.VISIBLE);
    button3.setVisibility(View.VISIBLE);
}

//4つのボタン(選択肢)を見えなくするメソッドを定義
public void buttonHide(){
    button0.setVisibility(View.INVISIBLE);
    button1.setVisibility(View.INVISIBLE);
    button2.setVisibility(View.INVISIBLE);
    button3.setVisibility(View.INVISIBLE);
}




@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    //それぞれlayoutのViewと紐づけ
    goButton = findViewById(R.id.goButton);
    sumTextView = findViewById(R.id.sumTextView);
    button0 = findViewById(R.id.button0);
    button1 = findViewById(R.id.button1);
    button2 = findViewById(R.id.button2);
    button3 = findViewById(R.id.button3);
    resultTextView = findViewById(R.id.resultTextView);
    commentTextView = findViewById(R.id.commentTextView);
    scoreTextView = findViewById(R.id.scoreTextView);
    timerTextview = findViewById(R.id.timerTextView);
    playAgainButton = findViewById(R.id.playAgainButton);
    gameLayout = findViewById(R.id.gameLayout);
    imageNirami = findViewById(R.id.nirami);
    imageKakure = findViewById(R.id.kakure);
    imageYousumi = findViewById(R.id.yousumi);
    goButton.setVisibility(View.VISIBLE);

}

}

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0