1. ...
  2. ...
  3. ...
  4. Решение задачи на тему: «напиши код на kotlin для игры змейка»
Решение задачи

напиши код на 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 для создания графического интерфейса и отображения игры. Он реализует базовую логику игры "Змейка", включая управление змейкой с помощью клавиш, проверку столкновений, генерацию еды и отображение текущего состояния игры на холсте.

Похожие работы

Попробуй и другие функции

  • ИИ для любых учебных целей

    • Научит решать задачи

    • Поможет решать задачи

    • Исправит ошибки в решении

    • Ответит на вопросы за минуту

    Попробовать
  • База готовых рефератов

    • Свыше 1,2 млн работ

    • Больше 160 предметов

    • Работы написали студенты вместе с AI

    • База ежедневно обновляется

    Попробовать

Решения по другим предметам