Let's try programming

ことわざクイズ

  • HOME »
  • ことわざクイズ
今回は、クイズアプリに挑戦しました。
完成した画面は、こちらになります。
 
kotowazas3 
 
 
 
 
 
 
処理でわからない点が多かったので、ドットインストール様の『Androidでクイズアプリを作ろう』を参考に組み立てました。
ありがとうございます(*´ェ`*)
クイズアプリ制作でややこしく感じたのは、assetsフォルダを作りその中にクイズの問題のテキストを用意して、それ出力する処理でした。
 
 
assets2
画像のように app を右クリックして New – Folder – Assets Folder の順に追いかけフォルダを作成します。
Assets Folder ができたら、これを右クリックして New – File でテキストファイルを作成します。
 
 
 
 
 
 
tab
テキストファイルが作成できたらこの中にクイズの問題を書いていくのですがその前にツールの File – Setting(設定)tab文字の設定を行います。
Code Style から Use tab character にチェックを入れ、tab文字設定をします。
これで区切り文字が設定できたのでクイズの問題を書いていきましょう。
 
 
 
  
 
 
quiztxt先ほど作成した txt の中にクイズ用の問題と答えを用意します。
画像の赤い□は、先ほど設定したtab文字が入りますのでスペースを使わないで tabキーを押して空白を作ってください。
これが配列変数に追加する時の区切りになります。
画像は、一行目しか赤い□を入れてませんが同様に2行目以降も入れてください。
 
 問題が書き終われば設定の Use tab character チェックをはずしてokです。
 
これでややこしいファイル作成は終了です。
それではプログラムを表示させていきます。
今回は、Activityを3個作成したので3枚あるので順に載せていきます。
 
こちらはタイトル画面のプログラムです。
特に何もないですが、Intent を使って次の Activity に遷移(せんい)するようになってます。
 
TopActivity
package com.example.sampe.quizapp;

import android.content.Intent;
import android.support.v7.app.ActionBarActivity;
import android.os.Bundle;
import android.view.View;


public class TopActivity extends ActionBarActivity {

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

    }
    public void startButton(View view){
        Intent intent = new Intent(this,QuizActivity.class);
        startActivity(intent);
    }
}
 
次がクイズのメインプログラムです。
QuizActivity
package com.example.sampe.quizapp;

import android.content.Intent;
import android.os.Bundle;
import android.support.v7.app.ActionBarActivity;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.Collections;


public class QuizActivity extends ActionBarActivity {

    public final static String SCORE ="com.example.sampe.quizapp";
    public  ArrayList<String[]> quizSet = new ArrayList<String[]>();
    int count;
    //正解数/staticを付けてScoreActivityから呼び出せるようにする。
    static int point = 0;

    private TextView scoreText;  //問題数の表示
    private TextView question;   //問題の表示
    // 各ボタン
    private Button button1;
    private Button button2;
    private Button button3;
    private Button button4;
    private Button nextButton;


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

        getView(); //Viewのリソース取得メソッド

        loadFile(); //ファイルの呼び込むメソッド

        setQuiz(); //クイズ素材をテキスト・ボタンに配置

    }
    private void setQuiz(){
        question.setText(quizSet.get(count)[0]);

        ArrayList answers = new ArrayList();
        /*
        答えを答え用の配列に格納する。
         */
        for(int i= 1; i<=4; i++){
            answers.add(quizSet.get(count)[i]);
        }
        Collections.shuffle(answers); //答えをランダムにボタンに配置する処理

        button1.setText(answers.get(0));
        button2.setText(answers.get(1));
        button3.setText(answers.get(2));
        button4.setText(answers.get(3));

        button1.setEnabled(true);
        button2.setEnabled(true);
        button3.setEnabled(true);
        button4.setEnabled(true);

        nextButton.setEnabled(false);
        scoreText();

    }
    private void scoreText() {
        if ((count + 1) == quizSet.size()) {
            scoreText.setText("最終問題");
        } else {
            scoreText.setText((count+1) + "問目");
        }
    }

    private void loadFile(){
        /*
        InputStreamとBufferedReader宣言
        Assetsフォルダのクイズテキストから文字を取り出していく一連の処理。
         */
        InputStream inputStream = null;
        BufferedReader bufferedReader = null;

        try {
            inputStream = getAssets().open("quiz.txt");
            bufferedReader = new BufferedReader(new InputStreamReader(inputStream));
            String s;
            /*
            クイズの問題を一行ずつquizSetに出力していく
            */
           while((s = bufferedReader.readLine()) != null){
           /*
            quizSetの配列にクイズtxtのtab文字区切りで配列に追加する
           */
               quizSet.add(s.split("\t"));
            }
        }catch(IOException e){

            e.printStackTrace();
        } finally {
            try {
                if (inputStream != null) inputStream.close();
                if (bufferedReader != null) bufferedReader.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
    public void checkAnswer(View view){

        //answer
        Button clickButton = (Button) view;
        String clickAnswer = clickButton.getText().toString();

        //judge
        if(clickAnswer.equals(quizSet.get(count)[1])){
            clickButton.setText("正解");
            point++;
        }else{
            clickButton.setText("間違い");
        }
        scoreText();

        //button
        button1.setEnabled(false);
        button2.setEnabled(false);
        button3.setEnabled(false);
        button4.setEnabled(false);
        nextButton.setEnabled(true);

        count++;
        if(count == quizSet.size()){
            nextButton.setText("結果");
        }
    }

    public void nextButton(View view){

       if(count == quizSet.size()){

          Intent intent = new Intent(this,ScoreActivity.class);
          intent.putExtra(SCORE,point+ " / " + quizSet.size());
           startActivity(intent);
       }else{
           setQuiz();
       }
    }
    /*
    スコア画面から戻った時にリセットする処理
     */
    @Override
    public void onResume(){
        super.onResume();
        nextButton.setText("次へ");
        count = 0;
        point = 0;
        setQuiz();

    }

    private void getView(){
        scoreText = (TextView)findViewById(R.id.score);
        question = (TextView)findViewById(R.id.question);
        button1 = (Button)findViewById(R.id.button1);
        button2 = (Button)findViewById(R.id.button2);
        button3 = (Button)findViewById(R.id.button3);
        button4 = (Button)findViewById(R.id.button4);
        nextButton = (Button)findViewById(R.id.next_b);

    }
}
そして最後の評価ページです。
ScoreActivity
package com.example.sampe.quizapp;

import android.content.Intent;
import android.os.Bundle;
import android.support.v7.app.ActionBarActivity;
import android.view.View;
import android.widget.TextView;


public class ScoreActivity  extends ActionBarActivity {

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

        TextView scoreText =(TextView) findViewById(R.id.scoretxt);
        TextView comeText =(TextView)findViewById(R.id.come);
        Intent intent = getIntent();
        scoreText.setText(intent.getStringExtra(QuizActivity.SCORE));
        if(QuizActivity.point == 5){
            comeText.setText("素晴らしい!全問正解です");

        }else if((QuizActivity.point == 4)){
            comeText.setText("惜しい!1問間違い");
        }else{
            comeText.setText("頑張ろう!");
        }


    }
    public void replay(View view) {
        finish();

    }
    }
以上がクイズアプリのプログラムになります。
 
もし参考に動作確認される方いらっしゃれば XMLレイアウトは、完成画像を見ながら部品配置して作成してみて下さい(*^^*)
背景画像やボタンなどカスタマイズして自分用のクイズアプリを作ると楽しいですよ。
 
 
 
 
 
 

 

 

 

PAGETOP
Copyright © Goran All Rights Reserved.
Powered by WordPress & BizVektor Theme by Vektor,Inc. technology.