Code Sketch


Bixuu02
By: Mhalsakant School
Category: Programming
// ============================================================
// SPACE SHOOTER - FIXED SHOOTING
// ============================================================

var shipX = 500.0

var bulletX = -100.0
var bulletY = -100.0

var enemyX = 900.0
var enemyY = 300.0

var bulletSpeed = 12.0
var enemySpeed = 3.0

var canShoot = true


// ============================================================
// KEYBOARD
// ============================================================

onKeyPress { key =>

    // LEFT
    if (
        key == Kc.VK_A ||
        key == Kc.VK_LEFT ||
        key == 65 ||
        key == 37
    ) {
        leftPressed = true
    }

    // RIGHT
    if (
        key == Kc.VK_D ||
        key == Kc.VK_RIGHT ||
        key == 68 ||
        key == 39
    ) {
        rightPressed = true
    }

    // SPACE = SHOOT
    if (key == 32) {

        if (canShoot) {

            bulletX = shipX + 70
            bulletY = 85

            canShoot = false
        }
    }
}


onKeyRelease { key =>

    // LEFT
    if (
        key == Kc.VK_A ||
        key == Kc.VK_LEFT ||
        key == 65 ||
        key == 37
    ) {
        leftPressed = false
    }

    // RIGHT
    if (
        key == Kc.VK_D ||
        key == Kc.VK_RIGHT ||
        key == 68 ||
        key == 39
    ) {
        rightPressed = false
    }

    // SPACE RELEASE
    if (key == 32) {
        canShoot = true
    }
}


// ============================================================
// UPDATE SPACE SHOOTER
// ============================================================

def updateSpaceShooter() {

    // Move spaceship
    if (leftPressed && shipX > 10) {
        shipX -= 8
    }

    if (rightPressed && shipX < cwidth - 100) {
        shipX += 8
    }


    // Move bullet
    if (bulletX >= 0) {

        bulletX += bulletSpeed

        // Bullet leaves screen
        if (bulletX > cwidth) {

            bulletX = -100
            bulletY = -100
        }
    }


    // Move enemy
    enemyX -= enemySpeed

    if (enemyX < -100) {

        enemyX = cwidth + 100
        enemyY = 150 + randomDouble(250)
    }


    // Bullet hits enemy
    if (
        bulletX >= 0 &&
        math.abs(bulletX - enemyX) < 70 &&
        math.abs(bulletY - enemyY) < 60
    ) {

        score += 1

        // Remove bullet
        bulletX = -100
        bulletY = -100

        // Respawn enemy
        enemyX = cwidth + 100
        enemyY = 150 + randomDouble(250)

        // Win after 5 hits
        if (score >= 5) {
            screen = 7
        }
    }
}


// ============================================================
// DRAW SPACE SHOOTER
// ============================================================

def drawSpaceShooter(canvas: CanvasDraw) {

    canvas.background(5, 5, 30)


    // --------------------------------------------------------
    // STARS
    // --------------------------------------------------------

    canvas.fill(255, 255, 255)

    canvas.ellipse(100, 400, 5, 5)
    canvas.ellipse(250, 300, 5, 5)
    canvas.ellipse(450, 420, 5, 5)
    canvas.ellipse(700, 350, 5, 5)
    canvas.ellipse(900, 250, 5, 5)
    canvas.ellipse(1050, 400, 5, 5)


    // --------------------------------------------------------
    // SPACESHIP
    // --------------------------------------------------------

    canvas.fill(40, 180, 255)

    canvas.rect(
        shipX,
        50,
        70,
        35
    )

    canvas.fill(255, 255, 255)

    canvas.rect(
        shipX + 25,
        85,
        20,
        20
    )


    // --------------------------------------------------------
    // ENEMY
    // --------------------------------------------------------

    canvas.fill(230, 40, 80)

    canvas.rect(
        enemyX,
        enemyY,
        70,
        40
    )

    canvas.fill(255, 120, 120)

    canvas.ellipse(
        enemyX + 15,
        enemyY + 10,
        12,
        12
    )

    canvas.ellipse(
        enemyX + 45,
        enemyY + 10,
        12,
        12
    )


    // --------------------------------------------------------
    // BULLET / SHOT
    // --------------------------------------------------------

    if (bulletX >= 0) {

        canvas.fill(255, 230, 0)

        canvas.rect(
            bulletX,
            bulletY,
            30,
            8
        )

        // Bright bullet head
        canvas.fill(255, 255, 255)

        canvas.ellipse(
            bulletX + 25,
            bulletY,
            8,
            8
        )
    }


    // --------------------------------------------------------
    // TEXT
    // --------------------------------------------------------

    canvas.fill(255, 255, 255)

    canvas.text(
        "SPACE SHOOTER",
        cwidth/2 - 70,
        cheight - 40
    )

    canvas.text(
        "A / D or LEFT / RIGHT = MOVE",
        30,
        cheight - 70
    )

    canvas.text(
        "SPACE = SHOOT",
        30,
        cheight - 100
    )

    canvas.fill(255, 220, 0)

    canvas.text(
        s"Score: $score / 5",
        30,
        cheight - 130
    )


    // --------------------------------------------------------
    // BACK BUTTON
    // --------------------------------------------------------

    canvas.fill(200, 50, 50)

    canvas.rect(
        cwidth - 150,
        cheight - 70,
        120,
        40
    )

    canvas.fill(255, 255, 255)

    canvas.text(
        "BACK",
        cwidth - 115,
        cheight - 43
    )
}