前提・実現したいこと
三回勝つor三回負けるでプログラム終了(連勝、連敗で作成できる場合はそちらを教えていただきたいです。)
andoroid studio を使用しています。じゃんけんアプリを作成しているのですが繰り返し処理の書き方がわかりません。
このアプリはじゃんけんを連続でできない仕組みになっているのですが「次へ」のボタンを設置し連続でじゃんけんをできるようにしたいです。
発生している問題・エラーメッセージ
nextButton.setOnClickListener{ }の{}の中身がどう書けばいいか分かりません。
エラーメッセージ
該当のソースコード
ソースコード
試したこと
forやwhile文を試しましたがコードが間違っているのかうまくいきませんでした。
「次へ」のボタンをレイアウトエディタで設置しましたがbackButtonのようにうまく表示できない
補足情報
///inputactivity///
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_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 intent = Intent(this, ResultActivity::class.java) intent.putExtra("MY_HAND", view?.id) startActivity(intent) }
}
///resultactivity///
package com.example.janken
import android.os.Bundle
import android.preference.PreferenceManager
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) // 負けた場合
}
nextButton.setOnClickListener{ }
backButton.setOnClickListener { finish() }
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 }
}
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/12/12 16:33
2020/12/15 11:17
2020/12/15 11:25
2020/12/16 10:03
2020/12/16 10:20
2020/12/16 11:02 編集