Code Sketch


sanavi
By: Mhalsakant School
Category: Programming
// 1. Game Setup & Attractive Backdrop
cleari()
// Starting Sky Blue Gradient Background
setBackground(cm.linearGradient(0, -200, Color(30, 144, 255), 0, 200, Color(240, 248, 255), false))

// 2. Add Game Title 
val titleText = Picture.text("? APPLE CATCHER ?", 26)
titleText.setFillColor(Color(220, 20, 60)) // Crimson Red Color
titleText.setPosition(-140, 170)
draw(titleText)

// 3. Create Styled Game Objects
val basket = Picture.rectangle(90, 20)
basket.setFillColor(Color(139, 69, 19)) // Saddle Brown Basket
basket.setPenColor(noColor)
basket.setPosition(-45.0, -160.0)
draw(basket)

val apple = Picture.circle(16)
apple.setFillColor(Color(255, 0, 0)) // Bright Red Apple
apple.setPenColor(noColor)
apple.setPosition(0.0, 120.0)
draw(apple)

// Dynamic Text Holders
var score = 0
var scoreText = Picture.text(s"Score: $score", 22)
scoreText.setFillColor(Color(0, 100, 80)) // Deep Teal Color
scoreText.setPosition(-180.0, 130.0)
draw(scoreText)

var messageText = Picture.text("", 30)
messageText.setFillColor(Color(255, 215, 0)) // Golden Color
messageText.setPosition(-100.0, 0.0)
draw(messageText)

// 4. Game State Variables
var basketX: Double = -45.0
val basketSpeed: Double = 8.0 
var appleY: Double = 120.0
var appleX: Double = 0.0
var fallSpeed: Double = 5.0
var bgChanged: Boolean = false 

// 5. Core Game Loop
animate {
    // Continuous Keyboard Steering (Left / Right Arrows)
    if (isKeyPressed(Kc.VK_LEFT) && basketX > -200.0) {
        basketX -= basketSpeed
        basket.setPosition(basketX, -160.0)
    }
    if (isKeyPressed(Kc.VK_RIGHT) && basketX < 110.0) {
        basketX += basketSpeed
        basket.setPosition(basketX, -160.0)
    }

    // Apply falling physics to the apple
    appleY -= fallSpeed
    apple.setPosition(appleX, appleY)
    
    // Precise Collision Detection: Check if basket catches the apple
    if (appleY <= -140.0 && appleY >= -165.0) {
        if (appleX >= basketX - 10.0 && appleX <= (basketX + 90.0)) {
            score += 1 // Increment score
            
            // Text Update Method
            scoreText.invisible()
            scoreText = Picture.text(s"Score: $score", 22)
            scoreText.setFillColor(Color(0, 100, 80))
            scoreText.setPosition(-180.0, 130.0)
            draw(scoreText)
            
            // MILESTONE REACHED: At 30 points, switch background, show alert, and increase speed
            if (score >= 30) {
                fallSpeed = 7.5 // Adjust difficulty
                
                if (!bgChanged) {
                    setBackground(cm.linearGradient(0, -200, Color(75, 0, 130), 0, 200, Color(148, 0, 211), false))
                    
                    messageText.invisible()
                    messageText = Picture.text("VERY GOOD! ?", 30)
                    messageText.setFillColor(Color(255, 215, 0))
                    messageText.setPosition(-100.0, 0.0)
                    draw(messageText)
                    
                    bgChanged = true
                }
            }
            
            // Respawn apple back at a random position at the top
            appleY = 130.0
            appleX = random(-160, 140).toDouble // Fixed: Passed Int to random, then converted to Double
            apple.setPosition(appleX, appleY)
        }
    }
    
    // Reset apple position if it drops completely out of bounds at the bottom
    if (appleY < -200.0) {
        appleY = 130.0
        appleX = random(-160, 140).toDouble // Fixed: Passed Int to random, then converted to Double
        apple.setPosition(appleX, appleY)
    }
}

// Bring hardware focus to the canvas immediately
activateCanvas()