LoginSignup
2
2

More than 5 years have passed since last update.

Android 間違い探しゲーム

Last updated at Posted at 2017-03-05

Androidで間違い探しアプリを作ります

この記事で紹介しているアプリの仕様は

  • 0 ~ 7 までの整数がランダムに4箇所に配置される
  • 選択肢に同じ整数が並ばないようにする
  • 0 を選択すると Log に true が流れる
  • 0 以外を選択すると Log に false が流れる
  • 選択肢に 0 がない場合 THERE IS NO ZERO を選択すると Log に true が流れる

こんな感じです
現状ただの視力検査ですが数字の部分を画像に変更すれば、間違い探しゲームになるかと思います


public class MainActivity extends AppCompatActivity {
    private final int TOTAL_QUESTION_COUNT = 8;

    TextView mTextView;
    Button[] mButtons = new Button[4];
    Button mNoAnsButton;
    int[] mQuestions = new int[4];
    HashMap<String, String> mButtonIndexs = new HashMap<>();

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

        Toast.makeText(this, "Hi!", Toast.LENGTH_SHORT).show();

        initViews();
        storeIndexWithID();
        mButtons[0].setText("PUSH");
        setOnClicks();
    }

    private void initViews() {
        mTextView = (TextView) findViewById(R.id.main_text);
        mNoAnsButton = (Button) findViewById(R.id.no_answer_button);
        mButtons[0] = (Button) findViewById(R.id.button1);
        mButtons[1] = (Button) findViewById(R.id.button2);
        mButtons[2] = (Button) findViewById(R.id.button3);
        mButtons[3] = (Button) findViewById(R.id.button4);
    }

    private void storeIndexWithID() {
        mButtonIndexs.put(String.valueOf(R.id.button1) , String.valueOf(0));
        mButtonIndexs.put(String.valueOf(R.id.button2) , String.valueOf(1));
        mButtonIndexs.put(String.valueOf(R.id.button3) , String.valueOf(2));
        mButtonIndexs.put(String.valueOf(R.id.button4) , String.valueOf(3));
    }

    private void setOnClicks() {
        for (int i = 0; i < mButtons.length; i++) {
            final Button button = mButtons[i];
            button.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    Log.d("Ans", "check:" + checkAnswer(button));
                    updateQuestions();
                    updateButtons();
                }
            });
        }

        mNoAnsButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Log.d("Ans", "check (NoAns):" + !existsZero(mQuestions));
                updateQuestions();
                updateButtons();
            }
        });
    }

    private void updateButtons() {
        for (int j = 0; j < mButtons.length; j++) {
            mButtons[j].setText(String.valueOf(mQuestions[j]));
        }
    }

    private void updateQuestions() {
        mQuestions = getRandomArray();
        setRandomAnswerOption(mQuestions);
    }

    private boolean existsZero(int[] array) {
        boolean exist = false;
        for (int number : array) if (number == 0) exist = true;
        return exist;
    }

    private boolean checkAnswer(Button button) {
        boolean isOk = false;
        if (mQuestions[Integer.parseInt(mButtonIndexs.get(String.valueOf(button.getId())))] == 0) isOk = true;
        return isOk;
    }

    private int[] getRandomArray() {
        int[] randomArray = new int[4];
        for (int i = 0; i < randomArray.length; i++) {
            randomArray[i] = getRandomNumber(1, TOTAL_QUESTION_COUNT);
            for (int j = 0; j < i; j++) {
                if (randomArray[i] == randomArray[j])
                    i--; // If it is duplicated, create number again
            }
        }
        return randomArray;
    }

    // min ~ max - 1
    private int getRandomNumber(int min, int max) {
        if (max < 1) return 0;
        return new Random().nextInt(max - min) + min;
    }

    private void setRandomAnswerOption(int[] array) {
        if (getRandomNumber(0, 100) < 50) {
            array[getRandomNumber(0, array.length)] = 0;
        }
    }
}

(更新) 2017/03/07 メソッド名、変数名を変更しました。一部の処理を分割しました。

2
2
4

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
2
2