Решение задачи
напиши код на kotlin для игры змейка
Условие:
напиши код на kotlin для игры змейка
Решение:
Конечно! Вот пример кода на Kotlin для игры "Змейка":
import javafx.animation.KeyFrame
import javafx.animation.Timeline
import javafx.application.Application
import javafx.scene.Group
import javafx.scene.Scene
import javafx.scene.canvas.Canvas
import javafx.scene.canvas.GraphicsContext
import javafx.scene.input.KeyCode
import javafx.scene.paint.Color
import javafx.stage.Stage
import javafx.util.Duration
import java.util.*
class SnakeGame : Application() {
private val canvasWidth = 400.0
private val canvasHeight = 400.0
private val gridSize = 20.0
private val initialSnakeLength = 3
private var snakeX = 0
private var snakeY = 0
private var snakeLength = initialSnakeLength
private var direction = Direction.RIGHT
private var gameOver = false
private val snakeBody = LinkedList<Pair<Int, Int>>()
private var foodX = 0
private var foodY = 0
override fun start(primaryStage: Stage) {
val root = Group()
val canvas = Canvas(canvasWidth, canvasHeight)
val gc = canvas.graphicsContext2D
root.children.add(canvas)
generateFood()
val gameLoop = Timeline()
gameLoop.keyFrames.add(KeyFrame(Duration.seconds(0.1), {
if (!gameOver) {
update()
draw(gc)
}
}))
gameLoop.cycleCount = Timeline.INDEFINITE
primaryStage.title = "Snake Game"
primaryStage.scene = Scene(root)
primaryStage.scene.setOnKeyPressed { event ->
when (event.code) {
KeyCode.UP -> direction = Direction.UP
KeyCode.DOWN -> direction = Direction.DOWN
KeyCode.LEFT -> direction = Direction.LEFT
KeyCode.RIGHT -> direction = Direction.RIGHT
}
}
gameLoop.play()
primaryStage.show()
}
private fun update() {
snakeBody.addFirst(Pair(snakeX, snakeY))
when (direction) {
Direction.UP -> snakeY--
Direction.DOWN -> snakeY++
Direction.LEFT -> snakeX--
Direction.RIGHT -> snakeX++
}
if (snakeX < 0 || snakeX >= canvasWidth / gridSize || snakeY < 0 || snakeY >= canvasHeight / gridSize) {
gameOver = true
}
if (snakeBody.contains(Pair(snakeX, snakeY))) {
gameOver = true
}
if (snakeX == foodX && snakeY == foodY) {
snakeLength++
generateFood()
}
while (snakeBody.size > snakeLength) {
snakeBody.removeLast()
}
}
private fun draw(gc: GraphicsContext) {
gc.clearRect(0.0, 0.0, canvasWidth, canvasHeight)
gc.fill = Color.GREEN
snakeBody.forEach { segment ->
gc.fillRect(segment.first * gridSize, segment.second * gridSize, gridSize, gridSize)
}
gc.fill = Color.RED
gc.fillRect(foodX * gridSize, foodY * gridSize, gridSize, gridSize)
if (gameOver) {
gc.fill = Color.BLACK
gc.fillText("Game Over", canvasWidth / 2 - 40, canvasHeight / 2)
}
}
private fun generateFood() {
val random = Random()
foodX = random.nextInt((canvasWidth / gridSize).toInt())
foodY = random.nextInt((canvasHeight / gridSize).toInt())
}
enum class Direction {
UP, DOWN, LEFT, RIGHT
}
}
fun main() {
Application.launch(SnakeGame::class.java)
}
Этот код использует JavaFX для создания графического интерфейса и отображения игры. Он реализует базовую логику игры "Змейка", включая управление змейкой с помощью клавиш, проверку столкновений, генерацию еды и отображение текущего состояния игры на холсте.
Похожие работы
Попробуй и другие функции
Решения по другим предметам
А
Б
В
М
П
С
Т
Э