Code Sketch
Bixuu02
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
)
}