Code Sketch


kojo
By: Mhalsakant School
Category: Programming
// =====================================================
//       ? TURTLE FUNNY DANGER PUZZLE PRO
// =====================================================
// ? BACKGROUND MUSIC
// ? FUNNY SOUND
// ? DANGER SOUND
// ? TIMER
// ? SCORE
// ? WINNER
// ? RESET
// ? START
// ? SAFE PATH
// ? DEAD END
// ? GOAL
// =====================================================


// =====================================================
// ?? BASIC SETTINGS
// =====================================================

val fdStep = 50
val fdStep2 = 10
val rtStep = 90
val rtStep2 = 10

val bgColor = black

clear()
clearOutput()
beamsOn()

val width = canvasBounds.width
val height = canvasBounds.height

setBackground(bgColor)
setSpeed(fast)


// =====================================================
// ? SOUND SYSTEM
// =====================================================

val soundDir =
    "https://kojofiles.netlify.app/hunted7"

preloadMp3(
    s"$soundDir/Cave.mp3"
)

preloadMp3(
    s"$soundDir/DrumBeats.mp3"
)


// =====================================================
// ? BACKGROUND MUSIC
// =====================================================

playMp3Loop(
    s"$soundDir/Cave.mp3"
)


// =====================================================
// ? GAME VARIABLES
// =====================================================

var moves = 0
var seconds = 0
var score = 1000

var started = false
var finished = false

var wrongMoves = 0
var checkpoints = 0


// =====================================================
// ? PUZZLE PATH
// =====================================================

val path = Seq(
    "F","F","R","F","F","L",
    "F","R","F","F","R","F",
    "L","F","F","L","F","R",
    "F","F","R","F","L","F",
    "R","F","F","L","F","R",
    "F","F","L","F"
)


// =====================================================
// ? FUNNY TALK
// =====================================================

def funnyStart() {

    println("")
    println("?: HELLOOO BOSS! ?")
    println("?: Ready aahe ka?")
    println("?: Puzzle easy samju nako! ?")
    println("?: Chalaaaa!")
    println("")
}


def funnyForward() {

    println("")
    println("?: FORWARD! FORWARD! ?")
    println("?: Mi full speed madhe yetoy! ?")
    println("")
}


def funnyRight() {

    println("")
    println("?: RIGHT TURN! ??")
    println("?: Ohooo... kya style hai! ?")
    println("")
}


def funnyLeft() {

    println("")
    println("?: LEFT TURN! ??")
    println("?: Arey waah! ?")
    println("")
}


def funnyDanger() {

    println("")
    println("??? DANGER! ???")
    println("?: AREEEEE BOSS!!! ?")
    println("?: Kuthe chalalas?!")
    println("?: Parat ye! ?")
    println("")
}


def funnyCheckpoint() {

    println("")
    println("? CHECKPOINT REACHED!")
    println("?: WAHHH BOSS! ?")
    println("?: Tu heavy player ahes!")
    println("")
}


def funnyHurry() {

    println("")
    println("??? HURRY UP! ???")
    println("?: ZALDI KAR BOSS!!! ?")
    println("?: TIME PALTAT AAHE!")
    println("")
}


def funnyWinner() {

    println("")
    println("")
    println("****************************************")
    println("*                                      *")
    println("*     ? YOU ARE THE WINNER! ?       *")
    println("*                                      *")
    println("****************************************")
    println("")
    println("?: YEEEEEEEEEEEEESSSSS!!! ?")
    println("?: BOSS NE PUZZLE PHODLA!!! ??")
    println("?: KAY GAME KELAS!!! ?")
    println("?: YOU ARE THE WINNER!!! ?")
    println("")
}


// =====================================================
// ? FUNNY SOUND
// =====================================================

def funnySound() {

    playMp3(
        s"$soundDir/DrumBeats.mp3"
    )
}


// =====================================================
// ? DANGER SOUND
// =====================================================

def dangerSound() {

    playMp3(
        s"$soundDir/DrumBeats.mp3"
    )

    funnyDanger()
}


// =====================================================
// ? CHECKPOINT SOUND
// =====================================================

def checkpointSound() {

    playMp3(
        s"$soundDir/DrumBeats.mp3"
    )

    funnyCheckpoint()
}


// =====================================================
// ? WINNER SOUND
// =====================================================

def winnerSound() {

    playMp3(
        s"$soundDir/DrumBeats.mp3"
    )

    funnyWinner()
}


// =====================================================
// ? SCORE SYSTEM
// =====================================================

def updateScore() {

    score =
        1000 -
        (moves * 8) -
        (seconds * 3) -
        (wrongMoves * 50)

    if (score < 0) {
        score = 0
    }
}


// =====================================================
// ? STATUS
// =====================================================

def showStatus() {

    updateScore()

    println(
        "? MOVES = " +
        moves +
        " | ? TIME = " +
        seconds +
        " | ? SCORE = " +
        score
    )
}


// =====================================================
// ?? FORWARD
// =====================================================

def moveForward() {

    if (!finished) {

        if (!started) {

            started = true

            funnyStart()

            playMp3Loop(
                s"$soundDir/Cave.mp3"
            )
        }

        forward(fdStep)

        moves = moves + 1

        funnySound()

        funnyForward()

        showStatus()

        if (moves % 5 == 0) {

            checkpoints =
                checkpoints + 1

            checkpointSound()
        }

        if (moves >= path.length) {

            winGame()
        }
    }
}


// =====================================================
// ?? RIGHT
// =====================================================

def moveRight() {

    if (!finished) {

        if (!started) {

            started = true

            funnyStart()

            playMp3Loop(
                s"$soundDir/Cave.mp3"
            )
        }

        right(rtStep)

        moves = moves + 1

        funnySound()

        funnyRight()

        showStatus()

        if (moves % 5 == 0) {

            checkpoints =
                checkpoints + 1

            checkpointSound()
        }

        if (moves >= path.length) {

            winGame()
        }
    }
}


// =====================================================
// ?? LEFT
// =====================================================

def moveLeft() {

    if (!finished) {

        if (!started) {

            started = true

            funnyStart()

            playMp3Loop(
                s"$soundDir/Cave.mp3"
            )
        }

        left(rtStep)

        moves = moves + 1

        funnySound()

        funnyLeft()

        showStatus()

        if (moves % 5 == 0) {

            checkpoints =
                checkpoints + 1

            checkpointSound()
        }

        if (moves >= path.length) {

            winGame()
        }
    }
}


// =====================================================
// ? TIMER + DANGER
// =====================================================

timer(1000) {

    if (started && !finished) {

        seconds = seconds + 1

        updateScore()

        println(
            "? TIME = " +
            seconds +
            " sec | " +
            "? MOVES = " +
            moves +
            " | " +
            "? SCORE = " +
            score
        )


        // ? EVERY 10 SECONDS

        if (seconds % 10 == 0) {

            dangerSound()
        }


        // ? HURRY UP

        if (seconds == 40) {

            funnyHurry()
        }

        if (seconds == 50) {

            funnyHurry()
        }

        if (seconds == 55) {

            funnyHurry()
        }
    }
}


// =====================================================
// ? WIN GAME
// =====================================================

def winGame() {

    if (!finished) {

        finished = true
        started = false

        stopMp3()

        updateScore()

        winnerSound()

        println("")
        println("======================================")
        println("          ? LEVEL COMPLETE!")
        println("======================================")
        println("")
        println("? YOU ARE THE WINNER!")
        println("")
        println("? MOVES = " + moves)
        println("? TIME = " + seconds + " sec")
        println("? SCORE = " + score)
        println("? CHECKPOINTS = " + checkpoints)
        println("")
        println("? AMAZING PERFORMANCE!")
        println("======================================")
    }
}


// =====================================================
// ? RESET GAME
// =====================================================

def resetGame() {

    stopMp3()

    clear()
    clearOutput()
    beamsOn()

    setBackground(bgColor)
    setSpeed(fast)

    moves = 0
    seconds = 0
    score = 1000

    started = false
    finished = false

    wrongMoves = 0
    checkpoints = 0


    drawPuzzle()

    draw(panel)


    playMp3Loop(
        s"$soundDir/Cave.mp3"
    )


    println("")
    println("======================================")
    println("        ? PUZZLE RESET!")
    println("======================================")
    println("")
    println("?: Back to START! ?")
    println("?: Ata seriously khel!")
    println("?: Ready BOSS? ??")
    println("")
}


// =====================================================
// ? DRAW PUZZLE
// =====================================================

def drawPuzzle() {

    // ? SAFE PATH

    setPenColor(blue)
    setPenThickness(8)

    setPosition(-400, -250)
    setHeading(0)

    forward(100)
    right(90)

    forward(100)
    left(90)

    forward(100)
    right(90)

    forward(100)
    forward(100)
    left(90)

    forward(100)
    right(90)

    forward(100)
    forward(100)
    right(90)

    forward(100)
    left(90)

    forward(100)
    forward(100)
    left(90)

    forward(100)
    right(90)

    forward(100)
    forward(100)
    right(90)

    forward(100)
    left(90)

    forward(100)
    right(90)

    forward(100)
    forward(100)
    left(90)

    forward(100)


    // ? GOAL

    setPenColor(red)
    setPenThickness(18)

    forward(40)


    // ? START

    setPenColor(green)
    setPenThickness(18)

    setPosition(-400, -250)
    setHeading(0)

    forward(40)


    // ? DEAD END 1

    setPenColor(gray)
    setPenThickness(5)

    setPosition(-300, -250)
    setHeading(90)

    forward(70)


    // ? DEAD END 2

    setPosition(-200, -150)
    setHeading(270)

    forward(70)


    // ? DEAD END 3

    setPosition(-50, -150)
    setHeading(90)

    forward(70)


    // ? DEAD END 4

    setPosition(100, -50)
    setHeading(270)

    forward(70)


    // ? DEAD END 5

    setPosition(200, 50)
    setHeading(90)

    forward(70)


    // ? DEAD END 6

    setPosition(300, 100)
    setHeading(270)

    forward(70)


    // ? TURTLE START

    setPenColor(purple)
    setPenThickness(5)

    setPosition(-400, -250)
    setHeading(0)
}


// =====================================================
// ? BUTTONS
// =====================================================

val leftButton =
    Picture.button("? LEFT ?") {

        moveLeft()
    }


val forwardButton =
    Picture.button("? FORWARD ?") {

        moveForward()
    }


val rightButton =
    Picture.button("RIGHT ? ?") {

        moveRight()
    }


val resetButton =
    Picture.button("? RESET") {

        resetGame()
    }


// =====================================================
// ? CONTROL PANEL
// =====================================================

val panel =
    trans(
        -width / 2,
        -height / 2
    ) *
    scale(1.3) ->
    VPics(

        HPics(
            leftButton,
            forwardButton,
            rightButton
        ),

        HPics(
            resetButton
        )
    )


// =====================================================
// ? INITIAL DRAW
// =====================================================

drawPuzzle()

draw(panel)


// =====================================================
// ? GAME INTRO
// =====================================================

println("")
println("==============================================")
println("       ? TURTLE FUNNY DANGER PUZZLE")
println("==============================================")
println("")
println("?: HELLO BOSS! ?")
println("?: Aaj puzzle solve karaycha!")
println("")
println("? GREEN = START")
println("? BLUE = SAFE PATH")
println("? GRAY = DEAD END")
println("? RED = GOAL")
println("")
println("? FORWARD = ????")
println("? LEFT = ???????")
println("? RIGHT = ???????")
println("")
println("? MUSIC = ON")
println("? FUNNY SOUND = ON")
println("? DANGER = ON")
println("? TIMER = ON")
println("? SCORE = ON")
println("? WINNER = ON")
println("")
println("?: Chala BOSS... PUZZLE PHODUYA! ??")
println("==============================================")