2つ目のAndroidアプリを作りました


1つの端末で2人プレイができる簡単な連打ゲームです。
とにかく早くゲームを作りたかった・・。


アプリ名:ButtonRush Versus


Amazon Android アプリストア に登録しました。
http://www.amazon.co.jp/Shimamura-ButtonRush-Versus/dp/B014W0EQK8/



アイコンはClip Studioで作成しました。


このアプリのポイントはタイマー処理です。公式サイトを参考にしました。
http://developer.android.com/intl/ja/reference/android/os/CountDownTimer.html
(タイマー処理を公式サイトから抜粋)

new CountDownTimer(30000, 1000) {

     public void onTick(long millisUntilFinished) {
         mTextField.setText("seconds remaining: " + millisUntilFinished / 1000);
     }

     public void onFinish() {
         mTextField.setText("done!");
     }
  }.start();



主なソースコードを下に載せます。

AndroidManifest.xml

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.github.fumio_shimamura.dice01" >

    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/Theme.AppCompat.NoActionBar" >
        <activity
            android:name=".MainActivity"
            android:label="@string/app_name" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>

</manifest>

MainActivity.java

package com.github.fumio_shimamura.dice01;

import android.os.CountDownTimer;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.AnalogClock;
import android.widget.SeekBar;
import android.widget.TextView;
import android.widget.Toast;

public class MainActivity extends AppCompatActivity {

    // プログレスバーの値
    private int bar1value;
    private int bar2value;
    // スタートボタンの有効/無効を管理する
    private boolean onStart;
    // ゲーム中であることのフラグ。ゲームボタンの有効/無効を管理する。
    private boolean onGame;

    public static final long TIME_TO_START = 2000;
    public static final long TIME_TO_FINISH = 5000;

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

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.menu_main, menu);
        return true;
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        // Handle action bar item clicks here. The action bar will
        // automatically handle clicks on the Home/Up button, so long
        // as you specify a parent activity in AndroidManifest.xml.
        int id = item.getItemId();

        //noinspection SimplifiableIfStatement
        if (id == R.id.action_settings) {
            return true;
        }

        return super.onOptionsItemSelected(item);
    }


    public void changeBar1(View view){

        if(!onGame){
            return;
        }
        bar1value += 2;
        SeekBar bar = (SeekBar)findViewById(R.id.seekBar1);
        bar.setProgress(bar1value);

        //String str = String.valueOf(bar1value);
        //Toast.makeText(this, str, Toast.LENGTH_LONG).show();
    }

    public void changeBar2(View view){

        if(!onGame){
            return;
        }
        bar2value += 2;
        SeekBar bar = (SeekBar)findViewById(R.id.seekBar2);
        bar.setProgress(bar2value);
    }


    // スタートボタン押下時の処理
    public void startGame(View view){

        if (onStart) {
            return;
        }

        SeekBar bar1 = (SeekBar)findViewById(R.id.seekBar1);
        SeekBar bar2 = (SeekBar)findViewById(R.id.seekBar2);
        bar1value = 0;
        bar2value = 0;
        bar1.setProgress(bar1value);
        bar2.setProgress(bar2value);

        // カウントダウン開始
        new CountDownTimer(TIME_TO_START, 1000) {

            TextView tv = (TextView)findViewById(R.id.textView);
            public void onTick(long millisUntilFinished) {
                tv.setText("Ready...");
            }

            public void onFinish() {
                tv.setText("Go!");
                // ゲームスタートする
                playGame();
            }
        }.start();
        onStart = true;
    }

    // ゲーム中の処理
    public void playGame(){

        if(onGame){
            return;
        }

        // カウントダウン開始
        new CountDownTimer(TIME_TO_FINISH, 1000) {

            int count = 0;
            TextView tv = (TextView)findViewById(R.id.textView);
            public void onTick(long millisUntilFinished) {
                count += 1;
                if (count == 2) {
                    tv.setText(" ");
                } else if (count > 2) {
                    tv.setText(String.valueOf(millisUntilFinished / 1000));
                }
            }

            public void onFinish() {
                if (bar1value > bar2value) {
                    tv.setText("1P Win!");
                }else if(bar2value > bar1value) {
                    tv.setText("2P Win!");
                }else {
                    tv.setText("Draw!");
                }
                onGame = false;
                onStart = false;
            }
        }.start();
        onGame = true;
    }
}

activity_main.xml

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent"
    android:layout_height="match_parent" android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    android:paddingBottom="@dimen/activity_vertical_margin" tools:context=".MainActivity"
    android:background="@android:color/background_light">

    <TextView android:text="@string/hello_world" android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:id="@+id/textView"
        android:textSize="25sp"
        android:layout_centerVertical="true"
        android:layout_centerHorizontal="true"
        android:textColor="@android:color/black" />

    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@string/button_push"
        android:id="@+id/button1"
        android:layout_alignParentBottom="true"
        android:onClick="changeBar1"
        android:layout_alignParentStart="true"
        android:layout_alignParentEnd="true"
        android:layout_alignParentRight="true"
        android:layout_alignParentLeft="true" />

    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@string/button_push"
        android:id="@+id/button2"
        android:layout_alignParentTop="true"
        android:onClick="changeBar2"
        android:layout_alignParentStart="true"
        android:layout_alignParentEnd="true"
        android:layout_alignParentRight="true"
        android:layout_alignParentLeft="true" />

    <SeekBar
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:id="@+id/seekBar1"
        android:layout_alignParentStart="true"
        android:layout_alignParentEnd="true"
        android:layout_alignParentRight="true"
        android:layout_alignParentLeft="true"
        android:layout_below="@+id/textView"
        android:layout_marginTop="50dp" />

    <SeekBar
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:id="@+id/seekBar2"
        android:layout_alignParentStart="true"
        android:layout_alignParentEnd="true"
        android:layout_alignParentRight="true"
        android:layout_alignParentLeft="true"
        android:layout_above="@+id/textView"
        android:layout_marginBottom="50dp" />

    <Button
        style="?android:attr/buttonStyleSmall"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@string/button_start"
        android:id="@+id/button_start"
        android:shape="oval"
        android:layout_centerVertical="true"
        android:layout_alignParentStart="true"
        android:layout_alignParentLeft="true"
        android:onClick="startGame"/>

</RelativeLayout>

string.xml

<resources>
    <string name="app_name">ButtonRush Versus</string>

    <string name="hello_world">Press Start</string>
    <string name="action_settings">Settings</string>

    <string name="button_push"></string>
    <string name="button_start">Start</string>
</resources>