CCCPaste

Untitled

const canvas = document.getElementById("game")
const context = canvas.getContext('2d');

class Snake {
    constructor(x, y) {
        this.x = x
        this.y = y
    }
}
const tileCount = 20
const tileSize = canvas.clientWidth / tileCount - 2
let headX = 10
let headY = 10
let appleX = 3
let appleY = 3
let xVelocity = 0
let yVelocity = 0
let tailLength = 2
let score = 0
const snakeParts = []
function clearScreen() {
    context.fillStyle = "black"
    context.fillRect(0, 0, canvas.clientWidth, canvas.clientHeight)
}
function drawGame() {
    changeSnakePosition()

    if(isGameOver()) {
        return
    }
    clearScreen()
    drawSnake()
    drawApple()
    collisionDetection()
    drawScore()
    setTimeout(drawGame, 1000 / 7)
}
function drawSnake() {
    context.fillStyle = "green"
    for(let i = 0; i < snakeParts.length; i++) {
        let partOfSnake = snakeParts[i]
        context.fillRect(partOfSnake.x * tileCount, partOfSnake.y * tileCount, tileSize, tileSize)
    }
    snakeParts.push(new Snake(headX, headY))
    if(snakeParts.length > tailLength) {
        snakeParts.shift()
    }
    context.fillStyle = "orange"
    context.fillRect(headX * tileCount, headY * tileCount, tileSize, tileSize)
}
function drawScore() {
    context.fillStyle = "white"
    context.font = "16px arial"
    context.fillText("Score " + score, canvas.clientWidth - 60, 20)
}
// drawSnake()

function changeSnakePosition() {
    headX += xVelocity
    headY += yVelocity

    

}
function drawApple() {
    context.fillStyle = "red"
    context.fillRect(appleX * tileCount, appleY * tileCount, tileSize, tileSize)
}
function collisionDetection() {
    if(appleX === headX && appleY === headY) {
       appleX = Math.floor(Math.random() * tileCount)
       appleY = Math.floor(Math.random() * tileCount)
       tailLength++
       score++
    }
}
function isGameOver() {
    let over = false
    if(xVelocity === 0 && yVelocity === 0) {
        return false
    }
    if(headX < 0) {
        over = true
    }
    else if(headX === tileCount) {
        over = true
    }
    else if(headY < 0) {
        over = true
    }
    else if(headY === tileCount) {
        over = true
    }
    
    for(let i = 0; i < snakeParts.length; i++) {
        let partOfSnake = snakeParts[i]
        if(headX === partOfSnake.x && headY === partOfSnake.y) {
            over = true
            break
        }
    }
    if(over == true) {
        context.fillStyle = "white"
        context.font = "50px arial"
        context.fillText("GAME OVER!", canvas.clientWidth / 7, canvas.clientHeight / 2)
    }
    return over
}
document.addEventListener('keydown', keyPressed)

function keyPressed() {
    if(event.keyCode === 38) { // W
        if(yVelocity === 1) {
            return
        }

        xVelocity = 0
        yVelocity = -1
    }
    if(event.keyCode === 40) { // 

        if(yVelocity === -1) {
            return
        }

        xVelocity = 0
        yVelocity = 1
    }
    if(event.keyCode === 37) { // A
        if(xVelocity === 1) {
            return
        }

        xVelocity = -1
        yVelocity = 0
    }
    if(event.keyCode === 39) { // D
        if(xVelocity === -1) {
            return
        }

        xVelocity = 1
        yVelocity = 0
    }

}
drawGame()