Complete most of networked tick-tac-toe. Finish the questions to ponder!
This commit is contained in:
@@ -12,7 +12,9 @@ interface Deserializable {
|
||||
|
||||
enum class GameMessageType(val id: Byte) {
|
||||
JOIN_GAME(1),
|
||||
PLACE_TOKEN(2);
|
||||
PLACE_TOKEN(2),
|
||||
START_GAME(3),
|
||||
GAME_OVER(4);
|
||||
|
||||
companion object {
|
||||
fun fromByte(id: Byte) = entries.first { it.id == id }
|
||||
@@ -23,6 +25,9 @@ sealed class GameMessage(val type: GameMessageType) : Serializable {
|
||||
|
||||
override fun serialize() = byteArrayOf(type.id)
|
||||
|
||||
object StartGameMessage : GameMessage(GameMessageType.START_GAME)
|
||||
object GameOverMessage : GameMessage(GameMessageType.GAME_OVER)
|
||||
|
||||
// -----------------------------------------------------------------------------------------------
|
||||
data class JoinGameMessage(val token: Token) : GameMessage(GameMessageType.JOIN_GAME) {
|
||||
|
||||
|
||||
@@ -20,11 +20,11 @@ class Main : KtxGame<KtxScreen>() {
|
||||
override fun create() {
|
||||
KtxAsync.initiate()
|
||||
|
||||
networkHandler = NetworkHandler("A.B.C.D", 4300, serverChannel, clientChannel)
|
||||
networkHandler = NetworkHandler("152.105.66.120", 4331, serverChannel, clientChannel)
|
||||
|
||||
addScreen(FirstScreen(this, clientChannel, serverChannel))
|
||||
|
||||
addScreen(GameOverScreen())
|
||||
addScreen(GameOverScreen(0))
|
||||
|
||||
setScreen<FirstScreen>()
|
||||
|
||||
|
||||
@@ -153,6 +153,10 @@ class NetworkHandler(
|
||||
GameMessageType.JOIN_GAME -> GameMessage.JoinGameMessage.deserialize(this)
|
||||
|
||||
GameMessageType.PLACE_TOKEN -> GameMessage.PlaceTokenMessage.deserialize(this)
|
||||
|
||||
GameMessageType.START_GAME -> GameMessage.StartGameMessage
|
||||
|
||||
GameMessageType.GAME_OVER -> GameMessage.GameOverMessage
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -27,6 +27,9 @@ class FirstScreen(
|
||||
private val receiveChannel: ReceiveChannel<GameMessage>,
|
||||
private val sendChannel: SendChannel<GameMessage>
|
||||
) : KtxScreen, InputProcessor {
|
||||
private var gameStarted = false
|
||||
|
||||
private var gameOver = false
|
||||
|
||||
private val batch = SpriteBatch()
|
||||
|
||||
@@ -56,6 +59,12 @@ class FirstScreen(
|
||||
override fun render(delta: Float) {
|
||||
clearScreen(red = 0.7f, green = 0.7f, blue = 0.7f)
|
||||
|
||||
if (gameOver) {
|
||||
game.setScreen<GameOverScreen>()
|
||||
disposeSafely()
|
||||
return
|
||||
}
|
||||
|
||||
camera.update()
|
||||
|
||||
batch.use { board.draw(it) }
|
||||
@@ -87,6 +96,18 @@ class FirstScreen(
|
||||
localPlayerTurn = true
|
||||
}
|
||||
|
||||
is GameMessage.StartGameMessage -> {
|
||||
Gdx.app.log(TAG, "The Server has started the game")
|
||||
|
||||
gameStarted = true
|
||||
}
|
||||
|
||||
is GameMessage.GameOverMessage -> {
|
||||
Gdx.app.log(TAG, "The Server has sent Game Over")
|
||||
|
||||
gameStarted = false
|
||||
gameOver = true
|
||||
}
|
||||
}
|
||||
|
||||
Gdx.app.log(TAG, "THE MESSAGE RECEIVED IS: $gm")
|
||||
@@ -114,7 +135,7 @@ class FirstScreen(
|
||||
button: Int
|
||||
): Boolean {
|
||||
|
||||
if(!localPlayerTurn)
|
||||
if(!gameStarted || !localPlayerTurn)
|
||||
return true;
|
||||
|
||||
val col = ((screenX.toFloat() / Gdx.graphics.width) * 3).toInt()
|
||||
|
||||
@@ -6,16 +6,25 @@ import ktx.app.KtxScreen
|
||||
import ktx.app.clearScreen
|
||||
import ktx.graphics.use
|
||||
|
||||
class GameOverScreen : KtxScreen {
|
||||
|
||||
class GameOverScreen(private val winType: Int) : KtxScreen {
|
||||
private var label = winType.toString()
|
||||
private val font = BitmapFont()
|
||||
private val batch = SpriteBatch()
|
||||
|
||||
override fun show() {
|
||||
when (winType) {
|
||||
0 -> label = "You Win!"
|
||||
1 -> label = "You Lose."
|
||||
2 -> label = "Game Over!"
|
||||
else -> "Invalid type!"
|
||||
}
|
||||
}
|
||||
|
||||
override fun render(delta: Float) {
|
||||
clearScreen(red = 0.7f, green = 0.7f, blue = 0.7f)
|
||||
|
||||
batch.use {
|
||||
font.draw(it, "Game Over!", 10f, 10f)
|
||||
font.draw(it, label, 10f, 10f)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user