AndroidStudioを使ってじゃんけんアプリを作る
概要
今回はviewの配置は割愛してjavaを使って画面遷移などの動作を実装することを説明します。
流れ
- viewの配置
- ManifestにResultActivityの追加 ←この記事の内容はここから
- idの設定
- じゃんけんの画像を押すと画面遷移する機能の追加
- ResultActivityにコンピューターのじゃんけんのボタン(グーかチョキかパー)を表示させる
- ResultActivityに自分の選んだじゃんけんのボタン(グーかチョキかパー)を表示させる
- 勝ちか負けかあいこかを判定する処理を書いてTextView(id: result)に表示させる
- 戻るボタンを押したらMainActivityに戻る処理を書く。
前提条件
viewの配置は下の画像のような感じで配置してある状態から始める。画像は適当に用意してください
View
activity_main.xml(ここからは1画面目と呼びます)
activity_result.xml(ここからは2画面目と呼びます)
idの設定
右上のidの欄に下の画像のようにpaと入力しよう
グーの画像にはgu,チョキの画像にはchokiを指定しよう!
コード
まず下のコードの追加部分と書いてある行をコピペしよう!
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<activity android:name=".MainActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<!-- 追加部分 -->
<activity android:name=".ResultActivity"></activity>
<!-- 追加部分ここまで -->
</application>
ここからは数字の順にコードを足していきます。
import android.content.Intent;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.ImageButton;
public class MainActivity extends AppCompatActivity {
//1.お約束
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
ImageButton gu = findViewById(R.id.gu);
ImageButton tyoki = findViewById(R.id.choki);
ImageButton pa = findViewById(R.id.pa);
}
//2. 次の画面に移動する処理とどのボタンを押したかを次の画面に送る処理
public void onJankenButtonTapped(View view){
Intent intent = new Intent(this, ResultActivity.class);
intent.putExtra("MY_HAND",view.getId());
startActivity(intent);
}
}
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.support.annotation.Nullable;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.ImageView;
import android.widget.TextView;
import java.util.Random;
//補足: ResultActivityにAppCompatActivityが継承されてるかの確認
public class ResultActivity extends AppCompatActivity {
//1.変数の定義(お約束)
int comHand = 0;
int rand = 0;
int myHand = 0;
ImageView computerhand;
ImageView myhandimage;
int JANKEN_GU = 0;
int JANKEN_PA = 1;
int JANKEN_CHOKI = 2;
int id = 0;
//補足: onCreateメソッドをOverrideできているか確認
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//1.お約束
setContentView(R.layout.activity_result);
computerhand = findViewById(R.id.com_hand);
myhandimage = findViewById(R.id.myhand);
Intent intent = getIntent();
id = intent.getIntExtra("MY_HAND", 0);
//4.相手(computer)の選んだ手を表示する。(2で書いたコードを呼び出す)
comhand();
//5.自分の選んだ手を表示させる処理
switch (id){
case R.id.gu:
myhandimage.setImageResource(R.drawable.gu);
myHand = JANKEN_GU;
break;
case R.id.choki:
myhandimage.setImageResource(R.drawable.tyoki);
myHand = JANKEN_CHOKI;
break;
case R.id.pa:
myhandimage.setImageResource(R.drawable.pa);
myHand = JANKEN_PA;
break;
default:
myHand = JANKEN_GU;
break;
}
result();
}
//2.computerの手を決める処理
private void comhand() {
rand = (int) (Math.random() * 3);
switch (rand) {
case 0:
computerhand.setImageResource(R.drawable.com_gu);
comHand = JANKEN_GU;
break;
case 1:
computerhand.setImageResource(R.drawable.com_pa);
comHand = JANKEN_PA;
break;
case 2:
computerhand.setImageResource(R.drawable.com_tyoki);
comHand = JANKEN_CHOKI;
break;
default:
System.out.println("エラー");
}
}
//3.じゃんけんの勝ち負け判定するメソッド
private void result(){
TextView resultview = findViewById(R.id.result);
if (comHand == myHand){
//あいこ
resultview.setText("あいこ");
}else if(myHand == comHand + 1 || myHand + 2 == comHand){
//勝ち
resultview.setText("勝ち");
}else {
//負け
resultview.setText("負け");
}
}
//6.戻るぼたんを押した時にactivity_mainに画面遷移する処理(要するに前の画面に戻る処理)
public void returnbutton(View view){
Intent intent = new Intent(this, MainActivity.class);
startActivity(intent);
}
}
ここまでおそらくじゃんけん自体はできるようになっています。しかしある問題が発生しているはずです。それは戻るボタンを押しても何も反応しない!ということです。先ほどResultActivity.javaの6番のところで前の画面に戻る処理を書いたと思います。しかしこれだけでは2画面目の左上にある戻るボタンと結びつけられていないのでボタンを押しても反応しません!
何言ってるか訳が分からないでしょう。ということで実際にやっていきます。
まず左上の戻るボタンをクリックします。次に右のlayout_widthとかを指定しいる所の下の方のonClickの所にreturnbuttonを記入します。
軽く解説するとonClickのところにreturnbuttonを書くことによって、戻るボタンを押した時にreturnbuttonの処理行いますよーという設定ができます。そしてreturnbuttonの処理とは先ほど書いたように前の画面に戻る処理!
つまり
1. 前の画面に戻る処理を書く。(javaファイルに)
2. 書いた処理がどのボタンを押した時に動くのかを書く。(xmlファイルに)
この二つを忘れないようにしましょうということです。
終わりに
今回は初心者でもこのままコピペすればじゃんけんアプリくらいなら簡単に作れるよーってことを記事にまとめたのでコードの細かな説明は省略してあります。細かなコードの説明が欲しいなら言ってくれれば後日記事にするかも(記事にするとは言ってない)