Code Sketch


yadnesh and bhavesh
By: Mhalsakant School
Category: Programming
// --- ARM WRESTLING BATTLE GAME (ERROR FIXED) ---
cleari()
originBottomLeft()

var playerPower = 50.0 
var robotPower = 50.0
var gameEnded = false
var winMessage = ""

onMouseClick { (x, y) =>
    if (!gameEnded) {
        playerPower += 5.0 
        robotPower -= randomDouble(1.0, 3.0)
        if (robotPower < 10) robotPower = 10.0

        if (playerPower >= 90.0) {
            gameEnded = true
            winMessage = "? WINNER! YOU WON! ?"
        }
    } else {
        playerPower = 50.0
        robotPower = 50.0
        gameEnded = false
        winMessage = ""
    }
}

def updateState() {
    if (!gameEnded) {
        robotPower += 0.2
        if (robotPower >= 90.0) {
            gameEnded = true
            winMessage = "ROBOT WINS! TRY AGAIN!"
        }
    }
}

def viewState(canvas: CanvasDraw) {
    canvas.fill(20, 20, 35, 50)
    canvas.noStroke()
    canvas.rect(0, 0, cwidth, cheight)

    val centerX = cwidth / 2.0
    val centerY = cheight / 2.0

    canvas.stroke(139, 69, 19)
    canvas.strokeWeight(8)
    canvas.line(centerX - 150, centerY - 80, centerX + 150, centerY - 80)

    // ???? ????
    canvas.stroke(255, 255, 0)
    canvas.strokeWeight(3)
    canvas.line(centerX, centerY - 100, centerX, centerY - 30)

    canvas.fill(255, 255, 0)
    canvas.text("MIDDLE LINE", centerX - 40, centerY - 110)

    // ???? ??? (??? ??????? ?????? ????: %% ?????? ???)
    canvas.fill(50, 205, 50)
    canvas.noStroke()
    canvas.rect(50, cheight - 60, playerPower * 4.0, 25)
    canvas.fill(255, 255, 255)
    canvas.text(f"YOUR POWER: ${playerPower.toInt}%%", 50, cheight - 30)

    canvas.fill(220, 20, 60)
    canvas.rect(cwidth - 450, cheight - 60, robotPower * 4.0, 25)
    canvas.fill(255, 255, 255)
    canvas.text(f"ROBOT POWER: ${robotPower.toInt}%%", cwidth - 450, cheight - 30)

    val handX = centerX + (playerPower - 50.0) * 2.5
    
    // ????? ???
    canvas.fill(30, 144, 255)
    canvas.stroke(20, 100, 200)
    canvas.strokeWeight(2)
    canvas.rect(centerX - 120, centerY - 70, 60, 20) 
    canvas.ellipse(handX, centerY - 60, 25, 25)     

    // ??????? ???
    canvas.fill(180, 180, 180)
    canvas.stroke(100, 100, 100)
    canvas.rect(centerX + 60, centerY - 70, 60, 20) 
    canvas.ellipse(handX + 15, centerY - 60, 25, 25) 

    canvas.fill(255, 215, 0)
    canvas.ellipse(handX + 7, centerY - 60, 15, 15)

    // ????? ???
    canvas.fill(0, 150, 255)
    canvas.stroke(255, 255, 255)
    canvas.strokeWeight(2)
    canvas.rect(centerX - 60, 50, 120, 45)
    canvas.fill(255, 255, 255)
    canvas.text("CLICK FAST!", centerX - 45, 72)

    // ?????????? ?????? ???
    if (gameEnded) {
        canvas.fill(0, 0, 0, 200)
        canvas.rect(0, 0, cwidth, cheight)

        canvas.fill(255, 215, 0)
        canvas.stroke(255, 255, 255)
        canvas.strokeWeight(4)
        canvas.rect(centerX - 180, centerY - 30, 360, 70)

        canvas.fill(0, 0, 0)
        canvas.text(winMessage, centerX - 150, centerY + 5)
        
        canvas.fill(255, 255, 255)
        canvas.text("Click anywhere to Play Again", centerX - 110, centerY - 60)
    }

    canvas.fill(255, 153, 51)
    canvas.text("ARM WRESTLING: BEAT THE ROBOT", 30, cheight - 20)
}

animateWithCanvasDraw { canvas =>
    updateState()
    viewState(canvas)
}