2048小游戏kotlin代码
时间: 2023-11-04 14:07:06 浏览: 42
好的,以下是一个简单的 2048 小游戏的 Kotlin 代码:
```kotlin
import java.util.*
fun main() {
val scanner = Scanner(System.`in`)
val board = Array(4) { IntArray(4) }
addRandomNumber(board)
while (true) {
printBoard(board)
val move = scanner.nextLine()
when (move) {
"w" -> moveUp(board)
"s" -> moveDown(board)
"a" -> moveLeft(board)
"d" -> moveRight(board)
else -> println("Invalid move")
}
if (isGameOver(board)) {
println("Game over!")
break
}
addRandomNumber(board)
}
}
fun printBoard(board: Array<IntArray>) {
for (i in 0 until 4) {
for (j in 0 until 4) {
print("${board[i][j]}\t")
}
println()
}
}
fun addRandomNumber(board: Array<IntArray>) {
val emptyCells = mutableListOf<Pair<Int, Int>>()
for (i in 0 until 4) {
for (j in 0 until 4) {
if (board[i][j] == 0) {
emptyCells.add(Pair(i, j))
}
}
}
if (emptyCells.isEmpty()) {
return
}
val (i, j) = emptyCells.random()
board[i][j] = if (Random().nextDouble() < 0.9) 2 else 4
}
fun moveUp(board: Array<IntArray>) {
for (j in 0 until 4) {
var i = 1
while (i < 4) {
if (board[i][j] != 0) {
var k = i
while (k > 0 && board[k - 1][j] == 0) {
board[k - 1][j] = board[k][j]
board[k][j] = 0
k--
}
if (k > 0 && board[k - 1][j] == board[k][j]) {
board[k - 1][j] *= 2
board[k][j] = 0
}
}
i++
}
}
}
fun moveDown(board: Array<IntArray>) {
for (j in 0 until 4) {
var i = 2
while (i >= 0) {
if (board[i][j] != 0) {
var k = i
while (k < 3 && board[k + 1][j] == 0) {
board[k + 1][j] = board[k][j]
board[k][j] = 0
k++
}
if (k < 3 && board[k + 1][j] == board[k][j]) {
board[k + 1][j] *= 2
board[k][j] = 0
}
}
i--
}
}
}
fun moveLeft(board: Array<IntArray>) {
for (i in 0 until 4) {
var j = 1
while (j < 4) {
if (board[i][j] != 0) {
var k = j
while (k > 0 && board[i][k - 1] == 0) {
board[i][k - 1] = board[i][k]
board[i][k] = 0
k--
}
if (k > 0 && board[i][k - 1] == board[i][k]) {
board[i][k - 1] *= 2
board[i][k] = 0
}
}
j++
}
}
}
fun moveRight(board: Array<IntArray>) {
for (i in 0 until 4) {
var j = 2
while (j >= 0) {
if (board[i][j] != 0) {
var k = j
while (k < 3 && board[i][k + 1] == 0) {
board[i][k + 1] = board[i][k]
board[i][k] = 0
k++
}
if (k < 3 && board[i][k + 1] == board[i][k]) {
board[i][k + 1] *= 2
board[i][k] = 0
}
}
j--
}
}
}
fun isGameOver(board: Array<IntArray>): Boolean {
for (i in 0 until 4) {
for (j in 0 until 4) {
if (board[i][j] == 0) {
return false
}
if (i > 0 && board[i - 1][j] == board[i][j]) {
return false
}
if (i < 3 && board[i + 1][j] == board[i][j]) {
return false
}
if (j > 0 && board[i][j - 1] == board[i][j]) {
return false
}
if (j < 3 && board[i][j + 1] == board[i][j]) {
return false
}
}
}
return true
}
```