added controller for models to work
This commit is contained in:
parent
e8bbc08fab
commit
8d1004a84d
@ -1,16 +1,17 @@
|
||||
package com.wyattjmiller.tictactoeapp
|
||||
|
||||
import androidx.appcompat.app.AppCompatActivity
|
||||
import android.os.Bundle
|
||||
import android.util.Log
|
||||
import android.view.View
|
||||
import android.widget.Button
|
||||
import android.widget.GridLayout
|
||||
import android.widget.TextView
|
||||
import androidx.appcompat.app.AppCompatActivity
|
||||
import androidx.gridlayout.widget.GridLayout
|
||||
import androidx.appcompat.app.AppCompatDelegate
|
||||
import androidx.fragment.app.DialogFragment
|
||||
|
||||
class MainActivity : AppCompatActivity() {
|
||||
|
||||
// Private variables per the layout
|
||||
class MainActivity : AppCompatActivity(), View.OnClickListener {
|
||||
// Private member variables per the layout
|
||||
private lateinit var mGameboardGridLayout: GridLayout
|
||||
private lateinit var mGameboardButtonOne: Button
|
||||
private lateinit var mGameboardButtonTwo: Button
|
||||
@ -23,22 +24,210 @@ class MainActivity : AppCompatActivity() {
|
||||
private lateinit var mGameboardButtonNine: Button
|
||||
private lateinit var mGameStatsButton: Button
|
||||
private lateinit var mResetGameButton: Button
|
||||
private lateinit var mGameStatDialog: DialogFragment
|
||||
private lateinit var mGameStatusTextView: TextView
|
||||
|
||||
// Private variables - other variables
|
||||
private lateinit var mResetDialog: DialogFragment
|
||||
private lateinit var mAllButtonList: List<Button>
|
||||
private var mGameWon: GameOption = GameOption.No
|
||||
private var mGameboard = Gameboard()
|
||||
private var mStats = Stats()
|
||||
|
||||
enum class GameOption {
|
||||
Won,
|
||||
Cats,
|
||||
No
|
||||
}
|
||||
|
||||
override fun onCreate(savedInstanceState: Bundle?) {
|
||||
super.onCreate(savedInstanceState)
|
||||
setContentView(R.layout.activity_main)
|
||||
Log.d("LIFECYCLE", "onCreate invoked!")
|
||||
|
||||
// dark mode, for those who need it
|
||||
AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_FOLLOW_SYSTEM)
|
||||
|
||||
// initialize member variables from the layout
|
||||
mGameboardGridLayout = findViewById(R.id.gameboardGridLayout)
|
||||
mGameboardButtonOne = findViewById(R.id.gameboardButton1)
|
||||
mGameboardButtonTwo = findViewById(R.id.gameboardButton2)
|
||||
mGameboardButtonThree = findViewById(R.id.gameboardButton3)
|
||||
mGameboardButtonFour = findViewById(R.id.gameboardButton4)
|
||||
mGameboardButtonFive = findViewById(R.id.gameboardButton5)
|
||||
mGameboardButtonSix = findViewById(R.id.gameboardButton6)
|
||||
mGameboardButtonSeven = findViewById(R.id.gameboardButton7)
|
||||
mGameboardButtonEight = findViewById(R.id.gameboardButton8)
|
||||
mGameboardButtonNine = findViewById(R.id.gameboardButton9)
|
||||
mGameStatusTextView = findViewById(R.id.gameStatusTextView)
|
||||
|
||||
// set the onClickListeners, this method would be easier for me
|
||||
mGameboardButtonOne.setOnClickListener(this)
|
||||
mGameboardButtonTwo.setOnClickListener(this)
|
||||
mGameboardButtonThree.setOnClickListener(this)
|
||||
mGameboardButtonFour.setOnClickListener(this)
|
||||
mGameboardButtonFive.setOnClickListener(this)
|
||||
mGameboardButtonSix.setOnClickListener(this)
|
||||
mGameboardButtonSeven.setOnClickListener(this)
|
||||
mGameboardButtonEight.setOnClickListener(this)
|
||||
mGameboardButtonNine.setOnClickListener(this)
|
||||
|
||||
// initialize the list of buttons
|
||||
mAllButtonList = listOf(mGameboardButtonOne, mGameboardButtonTwo, mGameboardButtonThree,
|
||||
mGameboardButtonFour, mGameboardButtonFive, mGameboardButtonSix,
|
||||
mGameboardButtonSeven, mGameboardButtonEight, mGameboardButtonNine)
|
||||
|
||||
this.startGame()
|
||||
}
|
||||
|
||||
override fun onStart() {
|
||||
Log.d("LIFECYCLE", "onStart invoked!")
|
||||
super.onStart()
|
||||
}
|
||||
|
||||
override fun onResume() {
|
||||
Log.d("LIFECYCLE", "onResume invoked!")
|
||||
super.onResume()
|
||||
}
|
||||
|
||||
override fun onPause() {
|
||||
Log.d("LIFECYCLE", "onPause invoked!")
|
||||
super.onPause()
|
||||
}
|
||||
|
||||
override fun onStop() {
|
||||
Log.d("LIFECYCLE", "onStop invoked!")
|
||||
super.onStop()
|
||||
}
|
||||
|
||||
override fun onDestroy() {
|
||||
Log.d("LIFECYCLE", "onDestroy invoked!")
|
||||
super.onDestroy()
|
||||
}
|
||||
|
||||
override fun onClick(view: View?) {
|
||||
when (view!!.id) {
|
||||
R.id.gameboardButton1 -> {
|
||||
this.checkGameState(this.mGameboardButtonOne)
|
||||
}
|
||||
R.id.gameboardButton2 -> {
|
||||
this.checkGameState(this.mGameboardButtonTwo)
|
||||
}
|
||||
R.id.gameboardButton3 -> {
|
||||
this.checkGameState(this.mGameboardButtonThree)
|
||||
}
|
||||
R.id.gameboardButton4 -> {
|
||||
this.checkGameState(this.mGameboardButtonFour)
|
||||
}
|
||||
R.id.gameboardButton5 -> {
|
||||
this.checkGameState(this.mGameboardButtonFive)
|
||||
}
|
||||
R.id.gameboardButton6 -> {
|
||||
this.checkGameState(this.mGameboardButtonSix)
|
||||
}
|
||||
R.id.gameboardButton7 -> {
|
||||
this.checkGameState(this.mGameboardButtonSeven)
|
||||
}
|
||||
R.id.gameboardButton8 -> {
|
||||
this.checkGameState(this.mGameboardButtonEight)
|
||||
}
|
||||
R.id.gameboardButton9 -> {
|
||||
this.checkGameState(this.mGameboardButtonNine)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
fun clickResetGame(view: View?) {
|
||||
// dialog appears for conformation (gotta get to)
|
||||
for (buttonList in mAllButtonList) {
|
||||
buttonList.text = ""
|
||||
}
|
||||
|
||||
mGameboardGridLayout.visibility = View.VISIBLE
|
||||
mGameWon = GameOption.No
|
||||
mGameboard.resetGame()
|
||||
val updatedText = mGameboard.updateGameText()
|
||||
mGameStatusTextView.text = updatedText
|
||||
}
|
||||
|
||||
fun clickGameStats(view: View?) {
|
||||
// dialog appears for game stats
|
||||
}
|
||||
|
||||
private fun checkGameState(button: Button) {
|
||||
if (mGameWon != GameOption.No) { return } else {
|
||||
if (button.text != "") { return } else {
|
||||
val buttonText = mGameboard.placePlayerPiece()
|
||||
button.text = buttonText
|
||||
val winner = isGameWon()
|
||||
|
||||
if (winner == GameOption.Won || winner == GameOption.Cats) {
|
||||
mGameWon = winner
|
||||
mGameboardGridLayout.visibility = View.INVISIBLE
|
||||
}
|
||||
|
||||
mGameboard.updateState(mGameWon)
|
||||
val updatedText = mGameboard.updateGameText()
|
||||
mGameStatusTextView.text = updatedText
|
||||
mGameboard.getNextPlayerPiece()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private fun isGameWon(): GameOption {
|
||||
// horizontal win scenarios
|
||||
if ((mGameboardButtonOne.text == "X" && mGameboardButtonTwo.text == "X" && mGameboardButtonThree.text == "X") ||
|
||||
(mGameboardButtonOne.text == "O" && mGameboardButtonTwo.text == "O" && mGameboardButtonThree.text == "O")) {
|
||||
return GameOption.Won
|
||||
}
|
||||
|
||||
if ((mGameboardButtonFour.text == "X" && mGameboardButtonFive.text == "X" && mGameboardButtonSix.text == "X") ||
|
||||
(mGameboardButtonFour.text == "O" && mGameboardButtonFive.text == "O" && mGameboardButtonSix.text == "O")) {
|
||||
return GameOption.Won
|
||||
}
|
||||
|
||||
if ((mGameboardButtonSeven.text == "X" && mGameboardButtonEight.text == "X" && mGameboardButtonNine.text == "X") ||
|
||||
(mGameboardButtonSeven.text == "O" && mGameboardButtonEight.text == "O" && mGameboardButtonNine.text == "O")) {
|
||||
return GameOption.Won
|
||||
}
|
||||
|
||||
// vertical win scenarios
|
||||
if ((mGameboardButtonOne.text == "X" && mGameboardButtonFour.text == "X" && mGameboardButtonSeven.text == "X") ||
|
||||
(mGameboardButtonOne.text == "O" && mGameboardButtonFour.text == "O" && mGameboardButtonSeven.text == "O")) {
|
||||
return GameOption.Won
|
||||
}
|
||||
|
||||
if ((mGameboardButtonTwo.text == "X" && mGameboardButtonFive.text == "X" && mGameboardButtonEight.text == "X") ||
|
||||
(mGameboardButtonTwo.text == "O" && mGameboardButtonFive.text == "O" && mGameboardButtonEight.text == "O")) {
|
||||
return GameOption.Won
|
||||
}
|
||||
|
||||
if ((mGameboardButtonThree.text == "X" && mGameboardButtonSix.text == "X" && mGameboardButtonNine.text == "X") ||
|
||||
(mGameboardButtonThree.text == "O" && mGameboardButtonSix.text == "O" && mGameboardButtonNine.text == "O")) {
|
||||
return GameOption.Won
|
||||
}
|
||||
|
||||
// diagonal win scenarios
|
||||
if ((mGameboardButtonOne.text == "X" && mGameboardButtonFive.text == "X" && mGameboardButtonNine.text == "X") ||
|
||||
(mGameboardButtonOne.text == "O" && mGameboardButtonFive.text == "O" && mGameboardButtonNine.text == "O")) {
|
||||
return GameOption.Won
|
||||
}
|
||||
|
||||
if ((mGameboardButtonSeven.text == "X" && mGameboardButtonFive.text == "X" && mGameboardButtonThree.text == "X") ||
|
||||
(mGameboardButtonSeven.text == "O" && mGameboardButtonFive.text == "O" && mGameboardButtonThree.text == "O")) {
|
||||
return GameOption.Won
|
||||
}
|
||||
|
||||
// cats game scenario
|
||||
if (mGameboardButtonOne.text != "" && mGameboardButtonTwo.text != "" && mGameboardButtonThree.text != "" &&
|
||||
mGameboardButtonFour.text != "" && mGameboardButtonFive.text != "" && mGameboardButtonSix.text != "" &&
|
||||
mGameboardButtonSeven.text != "" && mGameboardButtonEight.text != "" && mGameboardButtonNine.text != "") {
|
||||
return GameOption.Cats
|
||||
}
|
||||
|
||||
return GameOption.No
|
||||
}
|
||||
|
||||
private fun startGame() {
|
||||
mGameboard.startGame()
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue
Block a user