前提・実現したいこと
このプログラムで三回勝ったときor三回負けたときにirasutoyahappy.png or irasutoyabad.pngを表示できるようにしたいのと、"次へ"というボタンをじゃんけんが終わるごとに表示したいです。
情報が足りない場合は載せますのでご指摘ください。
コード ///main_activity/// package com.example.janken import android.content.Intent import androidx.appcompat.app.AppCompatActivity import android.os.Bundle import android.preference.PreferenceManager import androidx.core.content.edit import kotlinx.android.synthetic.main.activity_main.* import android.view.View as View1 class MainActivity : AppCompatActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) // setContentView(R.layout.activity_test3) setContentView(R.layout.activity_main) gu.setOnClickListener { onJankenButtonTapped(it) } choki.setOnClickListener { onJankenButtonTapped(it) } pa.setOnClickListener { onJankenButtonTapped(it) } val pref = PreferenceManager.getDefaultSharedPreferences(this) pref.edit { clear() } } fun onJankenButtonTapped(view: View1?) { val streak = this.intent.getIntExtra("streak", 0) val intent = Intent(this, ResultActivity::class.java) intent.putExtra("MY_HAND", view?.id) intent.putExtra("streak", streak) startActivity(intent) } }
コード ///result_activity/// package com.example.janken import android.content.Intent import android.os.Bundle import android.preference.PreferenceManager import android.util.Log import androidx.appcompat.app.AppCompatActivity import androidx.core.content.edit import kotlinx.android.synthetic.main.activity_result.* class ResultActivity : AppCompatActivity() { val gu = 0 val choki = 1 val pa = 2 override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_result) val id = intent.getIntExtra("MY_HAND", 0) val myHand: Int myHand = when (id) { R.id.gu -> { myHandImage.setImageResource(R.drawable.gu) gu } R.id.choki -> { myHandImage.setImageResource(R.drawable.choki) choki } R.id.pa -> { myHandImage.setImageResource(R.drawable.pa) pa } else -> gu } // コンピュータの手を決める val comHand = getHand() when (comHand) { gu -> comHandImage.setImageResource(R.drawable.com_gu) choki -> comHandImage.setImageResource(R.drawable.com_choki) pa -> comHandImage.setImageResource(R.drawable.com_pa) } // 勝敗を判定する val gameResult = (comHand - myHand + 3) % 3 when (gameResult) { 0 -> resultLabel.setText(R.string.result_draw) // 引き分け 1 -> resultLabel.setText(R.string.result_win) // 勝った場合 2 -> resultLabel.setText(R.string.result_lose) // 負けた場合 } backButton.setOnClickListener { finish() } var streak = intent.getIntExtra("streak", 0) when (gameResult) { 0 -> { resultLabel.setText(R.string.result_draw) // 引き分け // 引き分けの場合はカウントを0に戻す streak = 0 } 1 -> { resultLabel.setText(R.string.result_win) // 勝った場合 // 連敗中の場合は値を0に戻す if(streak < 0){ streak = 0 } streak += 1 } 2 -> { // 連勝中の場合は値を0に戻す if(streak > 0){ streak = 0 } streak -= 1 resultLabel.setText(R.string.result_lose) // 負けた場合 } } // TODO: プログラム終了。何がしたいか、NEXTの遷移先を変えたい?それとも表示を変えたい? if(streak >= 3 || streak <= -3){ Log.d("TEST", "ゲーム終了") } nextButton.setOnClickListener { val intent = Intent(this, MainActivity::class.java) intent.putExtra("streak", streak) // TODO: Activityが積まれ続けるのを回避。画面の構成を考える必要があれば修正する intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP) startActivity(intent) } saveData(myHand, comHand ,gameResult) } private fun saveData(myHand: Int, comHand: Int, gameResult: Int) { val pref = PreferenceManager.getDefaultSharedPreferences(this) val gameCount = pref.getInt("GAME_COUNT", 0) val winningStreakCount = pref.getInt("WINNING_STREAK_COUNT", 0) val lastComHand = pref.getInt("LAST_COM_HAND", 0) val lastGameResult = pref.getInt("GAME_RESULT", -1) val edtWinningStreakCount: Int = when { lastGameResult == 2 && gameResult == 2 -> winningStreakCount + 1 else -> 0 } val editor = pref.edit() pref.edit { putInt("GAME_COUNT", gameCount + 1) putInt("WINNING_STREAK_COUNT", edtWinningStreakCount) putInt("LAST_MY_HAND", myHand) putInt("LAST_COM_HAND", comHand) putInt("BEFORE_LAST_COM_HAND", lastComHand) putInt("GAME_RESULT", gameResult) } } private fun getHand(): Int { var hand = (Math.random() * 3).toInt() val pref = PreferenceManager.getDefaultSharedPreferences(this) val gameCount = pref.getInt("GAME_COUNT", 0) val winningStreakCount = pref.getInt("WINNING_STREAK_COUNT", 0) val lastMyHand = pref.getInt("LAST_MY_HAND", 0) val lastComHand = pref.getInt("LAST_COM_HAND", 0) val beforeLastComHand = pref.getInt("BEFORE_LAST_COM_HAND", 0) val gameResult = pref.getInt("GAME_RESULT", -1) if (gameCount == 1) { if (gameResult == 2) { // 前回の勝負が1回目で、コンピュータが勝った場合、 // コンピュータは次に出す手を変える while (lastComHand == hand) { hand = (Math.random() * 3).toInt() } } else if (gameResult == 1) { // 前回の勝負が1回目で、コンピュータが負けた場合 // 相手の出した手に勝つ手を出す hand = (lastMyHand - 1 + 3) % 3 } } else if (winningStreakCount > 0) { if (beforeLastComHand == lastComHand) { // 同じ手で連勝した場合は手を変える while (lastComHand == hand) { hand = (Math.random() * 3).toInt() } } } return hand } }
コード///activity_main.xml/// <?xml version="1.0" encoding="utf-8"?> <androidx.constraintlayout.widget.ConstraintLayout android:layout_height="match_parent" android:layout_width="match_parent" xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools"> <ImageButton android:id="@+id/choki" android:layout_width="100dp" android:layout_height="100dp" android:layout_marginStart="8dp" android:layout_marginTop="8dp" android:layout_marginEnd="8dp" android:layout_marginBottom="8dp" android:scaleType="fitCenter" app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toTopOf="parent" app:srcCompat="@drawable/choki" /> <ImageButton android:id="@+id/pa" android:layout_width="100dp" android:layout_height="100dp" android:layout_marginStart="8dp" android:scaleType="fitCenter" app:layout_constraintStart_toEndOf="@+id/choki" app:layout_constraintTop_toTopOf="@+id/choki" app:srcCompat="@drawable/pa" /> <ImageButton android:id="@+id/gu" android:layout_width="100dp" android:layout_height="100dp" android:layout_marginEnd="8dp" android:scaleType="fitCenter" app:layout_constraintEnd_toStartOf="@+id/choki" app:layout_constraintTop_toTopOf="@+id/choki" app:srcCompat="@drawable/gu" /> <TextView android:id="@+id/textView" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginStart="8dp" android:layout_marginTop="8dp" android:layout_marginEnd="8dp" android:layout_marginBottom="8dp" android:text="@string/janken_text" android:textAppearance="@style/TextAppearance.AppCompat.Large" app:layout_constraintBottom_toTopOf="@+id/choki" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toTopOf="parent" /> </androidx.constraintlayout.widget.ConstraintLayout>
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/12/21 08:24
2020/12/22 14:10
2020/12/22 15:01
2020/12/23 08:54
2020/12/23 09:46
2020/12/23 14:02
2020/12/23 14:42