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>