Code Sketch
Bixuu02
Category: Programming
// ============================================================
// BIXUU'S SPECIAL GAME COLLECTION
// 4 KEYBOARD GAMES
// SNAKE - CAR - ANIME SHOOTER - COLLECT APPLE
// ============================================================
cleari()
originBottomLeft()
// ============================================================
// SCREENS
// 0 = LETTER
// 1 = MENU
// 2 = SNAKE
// 3 = CAR
// 4 = SHOOTER
// 5 = APPLE
// 6 = GAME OVER
// 7 = VICTORY
// ============================================================
var screen = 0
// ============================================================
// KEYBOARD
// ============================================================
var keyUp = false
var keyDown = false
var keyLeft = false
var keyRight = false
// ============================================================
// SNAKE
// ============================================================
var snakeX = 400.0
var snakeY = 250.0
var snakeFoodX = 700.0
var snakeFoodY = 250.0
var snakeScore = 0
var snakeSpeed = 6.0
// ============================================================
// CAR
// ============================================================
var carX = 100.0
var carY = 180.0
var carSpeed = 7.0
var carScore = 0
var car1X = 900.0
var car1Y = 110.0
var car2X = 1200.0
var car2Y = 170.0
var car3X = 1500.0
var car3Y = 240.0
var car4X = 1800.0
var car4Y = 300.0
// ============================================================
// SHOOTER
// ============================================================
var heroX = 100.0
var heroY = 250.0
var bulletX = -100.0
var bulletY = -100.0
var enemyX = 900.0
var enemyY = 250.0
var shooterScore = 0
var canShoot = true
// ============================================================
// APPLE
// ============================================================
var applePlayerX = 400.0
var applePlayerY = 250.0
var appleX = 700.0
var appleY = 300.0
var appleScore = 0
var appleSpeed = 7.0
// ============================================================
// RESET KEYS
// ============================================================
def resetKeys() {
keyUp = false
keyDown = false
keyLeft = false
keyRight = false
}
// ============================================================
// EXIT TO MENU
// ============================================================
def exitToMenu() {
screen = 1
resetKeys()
}
// ============================================================
// EXIT BUTTON
// ============================================================
def drawExitButton(canvas: CanvasDraw) {
canvas.fill(200, 40, 40)
canvas.noStroke()
canvas.rect(
cwidth - 140,
cheight - 65,
110,
40
)
canvas.fill(255, 255, 255)
canvas.text(
"EXIT",
cwidth - 105,
cheight - 40
)
}
// ============================================================
// RESET SNAKE
// ============================================================
def resetSnake() {
snakeX = 400.0
snakeY = 250.0
snakeFoodX = 700.0
snakeFoodY = 250.0
snakeScore = 0
resetKeys()
}
// ============================================================
// RESET CAR
// ============================================================
def resetCar() {
carX = 100.0
carY = 180.0
carScore = 0
car1X = cwidth + 100.0
car2X = cwidth + 400.0
car3X = cwidth + 700.0
car4X = cwidth + 1000.0
car1Y = 110.0
car2Y = 170.0
car3Y = 240.0
car4Y = 300.0
resetKeys()
}
// ============================================================
// RESET SHOOTER
// ============================================================
def resetShooter() {
heroX = 100.0
heroY = 250.0
bulletX = -100.0
bulletY = -100.0
enemyX = cwidth + 100.0
enemyY = 250.0
shooterScore = 0
canShoot = true
resetKeys()
}
// ============================================================
// RESET APPLE
// ============================================================
def resetApple() {
applePlayerX = 400.0
applePlayerY = 250.0
appleX = 700.0
appleY = 300.0
appleScore = 0
resetKeys()
}
// ============================================================
// LETTER
// ============================================================
def drawLetter(canvas: CanvasDraw) {
canvas.background(20, 30, 55)
canvas.fill(255, 248, 220)
canvas.stroke(212, 175, 55)
canvas.strokeWeight(4)
canvas.rect(
cwidth/2 - 270,
cheight/2 - 190,
540,
380
)
canvas.fill(200, 30, 30)
canvas.text(
"DEAR BIXUU!",
cwidth/2 - 70,
cheight/2 + 135
)
canvas.fill(40, 40, 40)
canvas.text(
"Thank you for playing all my games!",
cwidth/2 - 180,
cheight/2 + 90
)
canvas.text(
"You played every game.",
cwidth/2 - 120,
cheight/2 + 60
)
canvas.text(
"So I made a special collection",
cwidth/2 - 145,
cheight/2 + 30
)
canvas.text(
"especially for you!",
cwidth/2 - 90,
cheight/2
)
canvas.fill(220, 50, 50)
canvas.noStroke()
canvas.rect(
cwidth/2 - 120,
cheight/2 - 110,
240,
55
)
canvas.fill(255, 255, 255)
canvas.text(
"OPTION",
cwidth/2 - 45,
cheight/2 - 75
)
}
// ============================================================
// MENU
// ============================================================
def drawMenu(canvas: CanvasDraw) {
canvas.background(15, 20, 50)
canvas.fill(255, 215, 0)
canvas.text(
"BIXUU'S GAME COLLECTION",
cwidth/2 - 150,
cheight - 45
)
// SNAKE
canvas.fill(40, 180, 80)
canvas.rect(
120,
390,
320,
110
)
canvas.fill(255, 255, 255)
canvas.text(
"1. SNAKE GAME",
205,
450
)
canvas.text(
"30 APPLES TO WIN",
190,
420
)
// CAR
canvas.fill(30, 130, 240)
canvas.rect(
600,
390,
320,
110
)
canvas.fill(255, 255, 255)
canvas.text(
"2. CAR GAME",
695,
450
)
canvas.text(
"AVOID THE CARS",
685,
420
)
// SHOOTER
canvas.fill(190, 40, 100)
canvas.rect(
120,
220,
320,
110
)
canvas.fill(255, 255, 255)
canvas.text(
"3. ANIME SHOOTER",
190,
280
)
canvas.text(
"30 HITS TO WIN",
195,
250
)
// APPLE
canvas.fill(230, 110, 30)
canvas.rect(
600,
220,
320,
110
)
canvas.fill(255, 255, 255)
canvas.text(
"4. COLLECT APPLE",
680,
280
)
canvas.text(
"30 APPLES TO WIN",
680,
250
)
}
// ============================================================
// SNAKE UPDATE
// ============================================================
def updateSnake() {
if (keyUp) {
snakeY += snakeSpeed
}
if (keyDown) {
snakeY -= snakeSpeed
}
if (keyLeft) {
snakeX -= snakeSpeed
}
if (keyRight) {
snakeX += snakeSpeed
}
if (snakeX < 10) {
snakeX = 10
}
if (snakeX > cwidth - 55) {
snakeX = cwidth - 55
}
if (snakeY < 80) {
snakeY = 80
}
if (snakeY > cheight - 100) {
snakeY = cheight - 100
}
// EAT APPLE
if (
math.abs(snakeX - snakeFoodX) < 45 &&
math.abs(snakeY - snakeFoodY) < 45
) {
snakeScore += 1
snakeFoodX =
50 + randomDouble(cwidth - 100)
snakeFoodY =
100 + randomDouble(cheight - 180)
if (snakeScore >= 30) {
screen = 7
resetKeys()
}
}
}
// ============================================================
// SNAKE DRAW
// ============================================================
def drawSnake(canvas: CanvasDraw) {
canvas.background(10, 55, 20)
canvas.fill(255, 255, 255)
canvas.text(
"SNAKE GAME",
30,
cheight - 35
)
canvas.text(
s"SCORE: $snakeScore / 30",
30,
cheight - 65
)
// SNAKE BODY
canvas.fill(40, 210, 70)
canvas.rect(
snakeX,
snakeY,
45,
45
)
canvas.fill(20, 150, 50)
canvas.rect(
snakeX + 25,
snakeY + 5,
20,
35
)
// EYE
canvas.fill(255, 255, 255)
canvas.ellipse(
snakeX + 34,
snakeY + 28,
7,
7
)
// APPLE
canvas.fill(240, 30, 30)
canvas.ellipse(
snakeFoodX,
snakeFoodY,
32,
32
)
canvas.fill(40, 150, 40)
canvas.rect(
snakeFoodX + 13,
snakeFoodY + 27,
6,
10
)
canvas.fill(255, 255, 255)
canvas.text(
"WASD / ARROWS = MOVE",
cwidth - 250,
cheight - 35
)
drawExitButton(canvas)
}
// ============================================================
// CAR UPDATE
// ============================================================
def updateCar() {
// PLAYER
if (keyUp) {
carY += carSpeed
}
if (keyDown) {
carY -= carSpeed
}
if (keyLeft) {
carX -= carSpeed
}
if (keyRight) {
carX += carSpeed
}
if (carX < 20) {
carX = 20
}
if (carX > cwidth - 100) {
carX = cwidth - 100
}
if (carY < 85) {
carY = 85
}
if (carY > cheight - 130) {
carY = cheight - 130
}
// CAR 1
car1X -= 5
if (car1X < -100) {
car1X = cwidth + 150
car1Y = 100 + randomDouble(230)
carScore += 1
}
// CAR 2
car2X -= 6
if (car2X < -100) {
car2X = cwidth + 300
car2Y = 100 + randomDouble(230)
carScore += 1
}
// CAR 3
car3X -= 4
if (car3X < -100) {
car3X = cwidth + 450
car3Y = 100 + randomDouble(230)
carScore += 1
}
// CAR 4
car4X -= 7
if (car4X < -100) {
car4X = cwidth + 600
car4Y = 100 + randomDouble(230)
carScore += 1
}
// COLLISION 1
if (
math.abs(carX - car1X) < 70 &&
math.abs(carY - car1Y) < 45
) {
screen = 6
resetKeys()
}
// COLLISION 2
if (
math.abs(carX - car2X) < 70 &&
math.abs(carY - car2Y) < 45
) {
screen = 6
resetKeys()
}
// COLLISION 3
if (
math.abs(carX - car3X) < 70 &&
math.abs(carY - car3Y) < 45
) {
screen = 6
resetKeys()
}
// COLLISION 4
if (
math.abs(carX - car4X) < 70 &&
math.abs(carY - car4Y) < 45
) {
screen = 6
resetKeys()
}
}
// ============================================================
// DRAW CAR
// ============================================================
def drawSmallCar(
canvas: CanvasDraw,
x: Double,
y: Double,
r: Int,
g: Int,
b: Int
) {
canvas.fill(r, g, b)
canvas.rect(
x,
y,
80,
35
)
canvas.fill(220, 240, 255)
canvas.rect(
x + 20,
y + 24,
40,
13
)
canvas.fill(20, 20, 20)
canvas.ellipse(
x + 10,
y,
18,
18
)
canvas.ellipse(
x + 58,
y,
18,
18
)
}
def drawCar(canvas: CanvasDraw) {
canvas.background(40, 140, 50)
// ROAD
canvas.fill(60, 60, 65)
canvas.rect(
0,
70,
cwidth,
300
)
canvas.fill(255, 255, 255)
canvas.rect(
0,
70,
cwidth,
6
)
canvas.rect(
0,
364,
cwidth,
6
)
// ROAD LINE
canvas.fill(255, 215, 0)
canvas.rect(0, 215, 45, 6)
canvas.rect(80, 215, 45, 6)
canvas.rect(160, 215, 45, 6)
canvas.rect(240, 215, 45, 6)
canvas.rect(320, 215, 45, 6)
canvas.rect(400, 215, 45, 6)
canvas.rect(480, 215, 45, 6)
canvas.rect(560, 215, 45, 6)
canvas.rect(640, 215, 45, 6)
canvas.rect(720, 215, 45, 6)
canvas.rect(800, 215, 45, 6)
canvas.rect(880, 215, 45, 6)
// PLAYER
drawSmallCar(
canvas,
carX,
carY,
30,
144,
255
)
// ENEMY CARS
drawSmallCar(
canvas,
car1X,
car1Y,
220,
30,
30
)
drawSmallCar(
canvas,
car2X,
car2Y,
255,
140,
0
)
drawSmallCar(
canvas,
car3X,
car3Y,
170,
40,
200
)
drawSmallCar(
canvas,
car4X,
car4Y,
0,
180,
150
)
canvas.fill(255, 255, 255)
canvas.text(
s"CARS AVOIDED: $carScore",
30,
cheight - 35
)
canvas.text(
"WASD / ARROWS = DRIVE",
cwidth - 250,
cheight - 35
)
drawExitButton(canvas)
}
// ============================================================
// SHOOTER UPDATE
// ============================================================
def updateShooter() {
if (keyUp) {
heroY += 7
}
if (keyDown) {
heroY -= 7
}
if (keyLeft) {
heroX -= 7
}
if (keyRight) {
heroX += 7
}
if (heroX < 10) {
heroX = 10
}
if (heroX > cwidth - 90) {
heroX = cwidth - 90
}
if (heroY < 80) {
heroY = 80
}
if (heroY > cheight - 110) {
heroY = cheight - 110
}
// BULLET
if (bulletX >= 0) {
bulletX += 14
if (bulletX > cwidth) {
bulletX = -100
bulletY = -100
}
}
// ENEMY
enemyX -= 4
if (enemyX < -100) {
enemyX = cwidth + 100
enemyY =
100 + randomDouble(cheight - 200)
}
// HIT
if (
bulletX >= 0 &&
math.abs(bulletX - enemyX) < 70 &&
math.abs(bulletY - enemyY) < 60
) {
shooterScore += 1
bulletX = -100
bulletY = -100
enemyX = cwidth + 100
enemyY =
100 + randomDouble(cheight - 200)
if (shooterScore >= 30) {
screen = 7
resetKeys()
}
}
}
// ============================================================
// SHOOTER DRAW
// ============================================================
def drawShooter(canvas: CanvasDraw) {
canvas.background(5, 5, 35)
// STARS
canvas.fill(255, 255, 255)
canvas.ellipse(100, 420, 5, 5)
canvas.ellipse(300, 350, 5, 5)
canvas.ellipse(500, 430, 5, 5)
canvas.ellipse(700, 330, 5, 5)
canvas.ellipse(900, 450, 5, 5)
canvas.ellipse(1050, 300, 5, 5)
canvas.text(
"ANIME SHOOTER",
30,
cheight - 35
)
canvas.text(
s"SCORE: $shooterScore / 30",
30,
cheight - 65
)
// HERO
canvas.fill(40, 150, 255)
canvas.rect(
heroX,
heroY,
70,
45
)
canvas.fill(255, 220, 180)
canvas.ellipse(
heroX + 20,
heroY + 12,
25,
25
)
// HAIR
canvas.fill(40, 40, 120)
canvas.rect(
heroX + 15,
heroY + 30,
35,
10
)
// ENEMY
canvas.fill(230, 40, 80)
canvas.rect(
enemyX,
enemyY,
70,
45
)
canvas.fill(255, 200, 200)
canvas.ellipse(
enemyX + 15,
enemyY + 15,
12,
12
)
canvas.ellipse(
enemyX + 43,
enemyY + 15,
12,
12
)
// BULLET
if (bulletX >= 0) {
canvas.fill(255, 230, 0)
canvas.rect(
bulletX,
bulletY,
30,
8
)
}
canvas.fill(255, 255, 255)
canvas.text(
"WASD / ARROWS = MOVE",
cwidth - 250,
cheight - 35
)
canvas.text(
"SPACE = SHOOT",
cwidth - 180,
cheight - 65
)
drawExitButton(canvas)
}
// ============================================================
// APPLE UPDATE
// ============================================================
def updateApple() {
if (keyUp) {
applePlayerY += appleSpeed
}
if (keyDown) {
applePlayerY -= appleSpeed
}
if (keyLeft) {
applePlayerX -= appleSpeed
}
if (keyRight) {
applePlayerX += appleSpeed
}
if (applePlayerX < 10) {
applePlayerX = 10
}
if (applePlayerX > cwidth - 55) {
applePlayerX = cwidth - 55
}
if (applePlayerY < 80) {
applePlayerY = 80
}
if (applePlayerY > cheight - 110) {
applePlayerY = cheight - 110
}
// COLLECT APPLE
if (
math.abs(applePlayerX - appleX) < 50 &&
math.abs(applePlayerY - appleY) < 50
) {
appleScore += 1
appleX =
50 + randomDouble(cwidth - 100)
appleY =
100 + randomDouble(cheight - 180)
if (appleScore >= 30) {
screen = 7
resetKeys()
}
}
}
// ============================================================
// APPLE DRAW
// ============================================================
def drawApple(canvas: CanvasDraw) {
canvas.background(100, 180, 80)
canvas.fill(255, 255, 255)
canvas.text(
"COLLECT THE APPLES",
30,
cheight - 35
)
canvas.text(
s"SCORE: $appleScore / 30",
30,
cheight - 65
)
// PLAYER
canvas.fill(40, 100, 220)
canvas.rect(
applePlayerX,
applePlayerY,
45,
45
)
canvas.fill(255, 255, 255)
canvas.ellipse(
applePlayerX + 10,
applePlayerY + 27,
7,
7
)
canvas.ellipse(
applePlayerX + 28,
applePlayerY + 27,
7,
7
)
// APPLE
canvas.fill(230, 30, 30)
canvas.ellipse(
appleX,
appleY,
35,
35
)
canvas.fill(40, 150, 40)
canvas.rect(
appleX + 15,
appleY + 30,
6,
12
)
canvas.fill(255, 255, 255)
canvas.text(
"WASD / ARROWS = MOVE",
cwidth - 240,
cheight - 35
)
drawExitButton(canvas)
}
// ============================================================
// VICTORY
// ============================================================
def drawVictory(canvas: CanvasDraw) {
canvas.background(20, 80, 40)
canvas.fill(255, 215, 0)
canvas.text(
"YOU WIN!",
cwidth/2 - 55,
cheight/2 + 70
)
canvas.fill(255, 255, 255)
canvas.text(
"Congratulations Bixuu!",
cwidth/2 - 110,
cheight/2 + 25
)
canvas.text(
"You completed the game!",
cwidth/2 - 110,
cheight/2 - 5
)
canvas.fill(0, 170, 90)
canvas.rect(
cwidth/2 - 110,
cheight/2 - 100,
220,
50
)
canvas.fill(255, 255, 255)
canvas.text(
"GAME MENU",
cwidth/2 - 55,
cheight/2 - 68
)
}
// ============================================================
// GAME OVER
// ============================================================
def drawGameOver(canvas: CanvasDraw) {
canvas.background(60, 10, 15)
canvas.fill(255, 50, 50)
canvas.text(
"GAME OVER!",
cwidth/2 - 70,
cheight/2 + 50
)
canvas.fill(255, 255, 255)
canvas.text(
"You crashed!",
cwidth/2 - 55,
cheight/2 + 10
)
canvas.fill(0, 160, 200)
canvas.rect(
cwidth/2 - 100,
cheight/2 - 80,
200,
50
)
canvas.fill(255, 255, 255)
canvas.text(
"GAME MENU",
cwidth/2 - 55,
cheight/2 - 48
)
}
// ============================================================
// KEY PRESS
// ============================================================
onKeyPress { key =>
// ESC
if (key == 27) {
if (
screen == 2 ||
screen == 3 ||
screen == 4 ||
screen == 5
) {
exitToMenu()
}
}
// UP
if (
key == Kc.VK_W ||
key == Kc.VK_UP ||
key == 87 ||
key == 38
) {
keyUp = true
}
// DOWN
if (
key == Kc.VK_S ||
key == Kc.VK_DOWN ||
key == 83 ||
key == 40
) {
keyDown = true
}
// LEFT
if (
key == Kc.VK_A ||
key == Kc.VK_LEFT ||
key == 65 ||
key == 37
) {
keyLeft = true
}
// RIGHT
if (
key == Kc.VK_D ||
key == Kc.VK_RIGHT ||
key == 68 ||
key == 39
) {
keyRight = true
}
// SPACE
if (key == 32) {
if (
screen == 4 &&
canShoot
) {
bulletX = heroX + 70
bulletY = heroY + 18
canShoot = false
}
}
}
// ============================================================
// KEY RELEASE
// ============================================================
onKeyRelease { key =>
if (
key == Kc.VK_W ||
key == Kc.VK_UP ||
key == 87 ||
key == 38
) {
keyUp = false
}
if (
key == Kc.VK_S ||
key == Kc.VK_DOWN ||
key == 83 ||
key == 40
) {
keyDown = false
}
if (
key == Kc.VK_A ||
key == Kc.VK_LEFT ||
key == 65 ||
key == 37
) {
keyLeft = false
}
if (
key == Kc.VK_D ||
key == Kc.VK_RIGHT ||
key == 68 ||
key == 39
) {
keyRight = false
}
if (key == 32) {
canShoot = true
}
}
// ============================================================
// MOUSE
// ============================================================
onMouseClick { (x, y) =>
// LETTER
if (screen == 0) {
if (
x >= cwidth/2 - 120 &&
x <= cwidth/2 + 120 &&
y >= cheight/2 - 110 &&
y <= cheight/2 - 55
) {
screen = 1
resetKeys()
}
}
// MENU
else if (screen == 1) {
// SNAKE
if (
x >= 120 &&
x <= 440 &&
y >= 390 &&
y <= 500
) {
resetSnake()
screen = 2
}
// CAR
else if (
x >= 600 &&
x <= 920 &&
y >= 390 &&
y <= 500
) {
resetCar()
screen = 3
}
// SHOOTER
else if (
x >= 120 &&
x <= 440 &&
y >= 220 &&
y <= 330
) {
resetShooter()
screen = 4
}
// APPLE
else if (
x >= 600 &&
x <= 920 &&
y >= 220 &&
y <= 330
) {
resetApple()
screen = 5
}
}
// EXIT
else if (
screen == 2 ||
screen == 3 ||
screen == 4 ||
screen == 5
) {
if (
x >= cwidth - 140 &&
x <= cwidth - 30 &&
y >= cheight - 65 &&
y <= cheight - 25
) {
exitToMenu()
}
}
// GAME OVER
else if (screen == 6) {
if (
x >= cwidth/2 - 100 &&
x <= cwidth/2 + 100 &&
y >= cheight/2 - 80 &&
y <= cheight/2 - 30
) {
screen = 1
resetKeys()
}
}
// VICTORY
else if (screen == 7) {
if (
x >= cwidth/2 - 110 &&
x <= cwidth/2 + 110 &&
y >= cheight/2 - 100 &&
y <= cheight/2 - 50
) {
screen = 1
resetKeys()
}
}
}
// ============================================================
// MAIN LOOP
// ============================================================
animateWithCanvasDraw { canvas =>
if (screen == 0) {
drawLetter(canvas)
} else if (screen == 1) {
drawMenu(canvas)
} else if (screen == 2) {
updateSnake()
drawSnake(canvas)
} else if (screen == 3) {
updateCar()
drawCar(canvas)
} else if (screen == 4) {
updateShooter()
drawShooter(canvas)
} else if (screen == 5) {
updateApple()
drawApple(canvas)
} else if (screen == 6) {
drawGameOver(canvas)
} else if (screen == 7) {
drawVictory(canvas)
}
}