Code Sketch


Bixuu02 jokes
By: Mhalsakant School
Category: Programming
// ============================================================
// BIXUU STYLE: TMKOC JOKES WORLD 2026 (ALL FAMILIES & CHARACTERS)
// ============================================================

cleari()
originBottomLeft()

// ============================================================
// APP STATES & VARIABLES
// ============================================================
var screen = 0 // 0: Welcome, 1: Families List, 2: Members View, 3: Line-wise Joke Reader
var selectedFamilyHead = ""
var selectedMember = ""
var currentJokeIndex = 0

// Background Star Animation Class
class Star(val x: Double, val y: Double, val size: Double) {
    var phase = randomDouble(6.28)
    def step() { phase += 0.04 }
    def view(canvas: CanvasDraw) {
        val brightness = 150 + (math.sin(phase) * 80).toInt
        canvas.noStroke()
        canvas.fill(200, 220, 255, brightness)
        canvas.ellipse(x, y, size, size)
    }
}

val stars = ArrayBuffer.empty[Star]
for (i <- 0 until 60) {
    stars.append(new Star(randomDouble(cwidth), randomDouble(cheight), 1.0 + randomDouble(2.5)))
}

// ============================================================
// TMKOC ALL FAMILIES HEADS (BIXUU STYLE 2026)
// ============================================================
val familyHeads = Array(
    "Jethalal Gada Family",
    "Atmaram Bhide Family",
    "Taarak Mehta Family",
    "Dr. Hansraj Hathi Family",
    "Krishnan & Babita Iyer",
    "Patrakar Popatlal Pandey",
    "Roshan Singh Sodhi Family",
    "Abdul & Soda Shop")

// ============================================================
// FAMILY MEMBERS MAPPING (ALL CHARACTERS)
// ============================================================
def getFamilyMembers(head: String): Array[String] = {
    head match {
        case "Jethalal Gada Family" => Array("Jethalal Gada", "Dayaben Gada", "Champaklal Gada", "Sundarlal Sala Ji")
        case "Atmaram Bhide Family" => Array("Atmaram Bhide Secretary", "Madhavi Bhide", "Sonu Bhide", "Sakharam Scooter")
        case "Taarak Mehta Family" => Array("Taarak Mehta", "Anjali Mehta Diet Expert", "Fire Brigade Friend")
        case "Dr. Hansraj Hathi Family" => Array("Dr. Hansraj Hathi", "Komal Hathi", "Goli Hathi")
        case "Krishnan & Babita Iyer" => Array("Krishnan Iyer Scientist", "Babita Iyer", "Iyer-Jetha Comedy")
        case "Patrakar Popatlal Pandey" => Array("Popatlal Pandey Reporter", "Popatlal Chi Chhata", "Marriage Bureau")
        case "Roshan Singh Sodhi Family" => Array("Roshan Singh Sodhi Party Sharty", "Roshan Bhabhi", "Gogi Sodhi")
        case _ => Array("Abdul Soda Shop Owner", "Gokuldham Caretaker", "Society Secret Master")
    }
}

// ============================================================
// 50+ NIBANDH STYLE CHUNKS (ALL FAMILIES & CHARACTER SITUATIONS)
// ============================================================
def getNibandhJokes(member: String): Array[Array[String]] = {
    member match {
        // --- JETHALAL FAMILY ---
        case m if m.contains("Jethalal") => 
            Array(
                Array(
                    "Bixuu Joke No. 1: Jethalal & Natukaka",
                    "Jethalal: Ae Natukaka, mala aisi ek",
                    "chai banun de ji pitach mi dukaanat",
                    "zhopun jaail!",
                    "Natukaka: Sheth, me tea madhe poison",
                    "taku ka mag?",
                    "Jethalal: Arey murkha, tea magitalay,",
                    "khoon nahi kay!"
                ),
                Array(
                    "Bixuu Joke No. 2: Bapuji ani Jethiya",
                    "Champaklal: Ayya Jethiya! Tu punha",
                    "usheera uthalaes? Amchya zamanyat",
                    "aamhi rooj 4 vajta uthun 10 km",
                    "chalat school la jaycho!",
                    "Jethalal: Arey Bapuji, tyaveli mobile",
                    "navhte na, mhanun paypat karavi lagt hoti!"
                )
            ) ++ (3 to 50).map(i => Array(
                s"Bixuu Joke No. $i: Jethalal Special",
                "Jethalal: He Bhagwan, mala ya sanktatun",
                "vachav! Daya pan geli ani Bapuji pan",
                "maage lagle ahet!",
                "Popatlal: Jethalal bhai, tension nako",
                "gheus, chhatri ghein ka majhi?"
            ))

        // --- BHIDE FAMILY ---
        case m if m.contains("Bhide") => 
            Array(
                Array(
                    "Bixuu Joke No. 1: Atmaram Bhide",
                    "Bhide: Ekmev secretary Atmaram",
                    "Tukaram Bhide boltoy!",
                    "Society che rules todnarala seedha",
                    "fine lagel!",
                    "Madhavi: Aho aatta tari shant vha,",
                    "amche papad ani pickle che order",
                    "bagha jaaun!"
                ),
                Array(
                    "Bixuu Joke No. 2: Sakharam Scooter",
                    "Bhide: Majha Sakharam kiti changla",
                    "ahe, ekdam marathi manus sarkha",
                    "veli var start hoto!",
                    "Jethalal: Bhide, tuzi gadi mhanje",
                    "running train madhla steam engine ahe!"
                )
            ) ++ (3 to 50).map(i => Array(
                s"Bixuu Joke No. $i: Bhide Masterji",
                "Bhide: Mi tution classes madhe",
                "pachvi standard chya mulaana",
                "shikavtoy!",
                "Tappu: Masterji, aamhi pan tution",
                "madhe ek naving plan banavtoy!"
            ))

        // --- TAARAK MEHTA FAMILY ---
        case m if m.contains("Taarak Mehta") => 
            Array(
                Array(
                    "Bixuu Joke No. 1: Taarak & Anjali",
                    "Anjali: Taarak ji, aaj breakfast madhe",
                    "karela juice ahe, sagla piyacha!",
                    "Taarak: Anjali, mala vatat mi",
                    "fire brigade madhe jaun swatahla",
                    "aag lavun ghyavi!",
                    "Jethalal: Taarak bhai, mala vachav,",
                    "majhya life madhe pan heduch chaltoy!"
                )
            ) ++ (2 to 50).map(i => Array(
                s"Bixuu Joke No. $i: Fire Brigade Mehta",
                "Taarak Mehta: Jethalal, tu punha",
                    "koanata raada kelaes?",
                    "Jethalal: Mehta saab, mi kahich",
                    "kelay re baaba, sagla naseebacha khel ahe!"
            ))

        // --- HATHI FAMILY ---
        case m if m.contains("Hathi") => 
            Array(
                Array(
                    "Bixuu Joke No. 1: Dr. Hathi & Goli",
                    "Hathi Bhai: Sahi baat hai ji!",
                    "Jevan kashala pan aadhi samosa",
                    "ani jalebi ali pahije!",
                    "Goli Hathi: Pappa, mi pan aataa",
                    "don plate extra order karnar!",
                    "Komal Bhabhi: Hathi bhai, tumhi",
                    "fakt khata ani diet visarta!"
                )
            ) ++ (2 to 50).map(i => Array(
                s"Bixuu Joke No. $i: Hathi Family Special",
                "Hathi: Doctor ki salah - rooj",
                "10 rasgulla khao aur sehatmand raho!",
                "Gokuldham Wasi: Doctor sahab, tumhi",
                "swatah patient banar ka kiti kharata?"
            ))

        // --- IYER & BABITA FAMILY ---
        case m if m.contains("Iyer") => 
            Array(
                Array(
                    "Bixuu Joke No. 1: Iyer & Babita Ji",
                    "Iyer: Jethalal, mi senior scientist aahe",
                    "ani Babita ji majhi wife ahet!",
                    "Jethalal: Babita ji, good morning!",
                    "Tumhi kiti chhan distaay aaj!",
                    "Iyer: Jethalal, tumhala kiti vela",
                    "sangitlay ki majhya bayko pasun",
                    "laamb raha!"
                )
            ) ++ (2 to 50).map(i => Array(
                s"Bixuu Joke No. $i: Iyer Science Joke",
                "Babita Ji: Jethalal ji, tumhi kay",
                "navin business idea kadhli ahe?",
                "Jethalal: Babita ji, tumhi sangitala",
                "ani mi aakashatun taare anale nahitar kay!"
            ))

        // --- POPATLAL FAMILY ---
        case m if m.contains("Popatlal") => 
            Array(
                Array(
                    "Bixuu Joke No. 1: Patrakar Popatlal",
                    "Popatlal: Duniya Hila Dunga!",
                    "Arey mi aakashvani cha senior",
                    "journalist aahe, majhi shadi ka",
                    "hot nahiye koanala mahit?",
                    "Jethalal: Popatlal, tuzi shadi zali",
                    "tar aamcha Gokuldham cha main",
                    "hero kothe jaail!"
                )
            ) ++ (2 to 50).map(i => Array(
                s"Bixuu Joke No. $i: Popatlal Chhata Special",
                "Popatlal: Majhi laadki chhatri hech",
                "majhi real ardhangini ahe!",
                "Inspector: Popatlal ji, chhatri sobat",
                "koan marriage registry kartay ka?"
            ))

        // --- SODHI FAMILY ---
        case m if m.contains("Sodhi") => 
            Array(
                Array(
                    "Bixuu Joke No. 1: Roshan Singh Sodhi",
                    "Sodhi: Oye Jethiya! Balle Balle!",
                    "Aaj ratri party sharty honar!",
                    "Koni pan yeu dya, sodnar nahi!",
                    "Roshan Bhabhi: Oye ji, aadhi gharat",
                    "yeva, nahi tar baherch ubhe karnar!",
                    "Gogi: Pappa, mala pan party sharty",
                    "madhe yaaychay!"
                )
            ) ++ (2 to 50).map(i => Array(
                s"Bixuu Joke No. $i: Sodhi Oye Paji",
                "Sodhi: Pyare tussi great ho!",
                "Jethalal: Sodhi bhai, mala party",
                "madhe neus nako, Bapuji baghtil!"
            ))

        // --- ABDUL & SODA SHOP ---
        case _ => 
            Array(
                Array(
                    "Bixuu Joke No. 1: Abdul Soda Shop",
                    "Abdul: Gokuldham madhla pratyek",
                    "secret mala sarvat aadhi mahit asto!",
                    "Jethalal: Abdul bhai, ek thanda",
                    "limbu soda banun de patkan!",
                    "Bhide: Abdul, society chya meeting",
                    "sathi soda shop band kar patkan!"
                )
            ) ++ (2 to 50).map(i => Array(
                s"Bixuu Joke No. $i: Abdul Caretaker Special",
                "Abdul: Mi rooj sakali sakali soda",
                "shop clean karun saglyanchi wat",
                "pahat asto!",
                "Gokuldham Wasi: Abdul bhai tu",
                "nasatas tar aamcha gossips kothe",
                "zalasta?"
            ))
    }
}

// ============================================================
// SCREENS UI LOGIC
// ============================================================
def drawWelcomeScreen(canvas: CanvasDraw) {
    canvas.background(20, 15, 35)
    repeatFor(stars) { s => s.view(canvas) }

    canvas.fill(255, 252, 245)
    canvas.stroke(255, 140, 0)
    canvas.strokeWeight(4)
    canvas.rect(cwidth/2 - 270, cheight/2 - 210, 540, 420)

    canvas.fill(220, 100, 0)
    canvas.text("BIXUU STYLE: TMKOC ALL FAMILIES 2026", cwidth/2 - 195, cheight/2 + 175)

    canvas.fill(40, 40, 40)
    canvas.text("Welcome to Gokuldham All Families World!", cwidth/2 - 230, cheight/2 + 130)
    canvas.text("Yithe Jethalal, Bhide, Mehta, Hathi, Iyer,", cwidth/2 - 230, cheight/2 + 100)
    canvas.text("Popatlal, Sodhi & Abdul che nibandh jokes ahet!", cwidth/2 - 230, cheight/2 + 75)

    // Start Button
    canvas.fill(0, 140, 0)
    canvas.noStroke()
    canvas.rect(cwidth/2 - 160, cheight/2 - 20, 320, 60)
    canvas.fill(255, 255, 255)
    canvas.text("EXPLORE ALL FAMILIES JOKES", cwidth/2 - 130, cheight/2 + 15)
}

def drawFamiliesListScreen(canvas: CanvasDraw) {
    canvas.background(15, 25, 40)
    repeatFor(stars) { s => s.view(canvas) }

    canvas.fill(255, 215, 0)
    canvas.text("BIXUU STYLE | SELECT ANY GOKULDHAM FAMILY", cwidth/2 - 190, cheight - 30)

    for (i <- 0 until familyHeads.length) {
        val col = i % 2
        val row = i / 2
        
        val bx = if (col == 0) cwidth/2 - 240 else cwidth/2 + 10
        val by = (cheight/2 + 130) - (row * 48)
        
        canvas.fill(40, 80, 140)
        canvas.stroke(255, 165, 0)
        canvas.strokeWeight(2)
        canvas.rect(bx, by, 230, 40)

        canvas.fill(255, 255, 255)
        canvas.noStroke()
        canvas.text((i + 1) + ". " + familyHeads(i), bx + 10, by + 24)
    }

    canvas.fill(120, 40, 40)
    canvas.noStroke()
    canvas.rect(cwidth/2 - 80, 12, 160, 28)
    canvas.fill(255, 255, 255)
    canvas.text("BACK TO HOME", cwidth/2 - 50, 28)
}

def drawMembersScreen(canvas: CanvasDraw) {
    canvas.background(15, 25, 40)
    repeatFor(stars) { s => s.view(canvas) }

    canvas.fill(255, 215, 0)
    canvas.text(selectedFamilyHead + " - BIXUU STYLE 50+ JOKES", cwidth/2 - 175, cheight - 30)

    val members = getFamilyMembers(selectedFamilyHead)
    for (i <- 0 until members.length) {
        val my = (cheight/2 + 100) - (i * 48)
        
        canvas.fill(50, 100, 80)
        canvas.stroke(255, 215, 0)
        canvas.strokeWeight(2)
        canvas.rect(cwidth/2 - 220, my, 440, 38)

        canvas.fill(255, 255, 255)
        canvas.noStroke()
        canvas.text((i + 1) + ". " + members(i) + " (Click for Jokes)", cwidth/2 - 200, my + 24)
    }

    canvas.fill(150, 50, 50)
    canvas.rect(cwidth/2 - 110, 12, 220, 30)
    canvas.fill(255, 255, 255)
    canvas.text("BACK TO FAMILIES", cwidth/2 - 65, 28)
}

def drawJokeReaderScreen(canvas: CanvasDraw) {
    canvas.background(25, 15, 35)
    repeatFor(stars) { s => s.view(canvas) }

    canvas.fill(255, 215, 0)
    canvas.text("BIXUU LAUGHING WORLD: " + selectedMember, cwidth/2 - 170, cheight - 35)

    // Main Box for Jokes (Nibandh Style)
    canvas.fill(250, 248, 235)
    canvas.stroke(255, 140, 0)
    canvas.strokeWeight(3)
    canvas.rect(cwidth/2 - 280, cheight/2 - 180, 560, 330)

    canvas.fill(30, 30, 30)
    canvas.noStroke()

    val jokeChunks = getNibandhJokes(selectedMember)
    val currentJokeLines = jokeChunks(currentJokeIndex)

    // Rendering lines in essay/nibandh format inside the box one below another
    for (lineIdx <- 0 until currentJokeLines.length) {
        val ly = (cheight/2 + 115) - (lineIdx * 28)
        canvas.text(currentJokeLines(lineIdx), cwidth/2 - 265, ly)
    }

    // NEXT BUTTON
    canvas.fill(0, 140, 0)
    canvas.rect(cwidth/2 + 40, cheight/2 - 165, 200, 38)
    canvas.fill(255, 255, 255)
    canvas.text("NEXT JOKE ?", cwidth/2 + 85, cheight/2 - 140)

    // PREV BUTTON
    canvas.fill(180, 100, 0)
    canvas.rect(cwidth/2 - 240, cheight/2 - 165, 200, 38)
    canvas.fill(255, 255, 255)
    canvas.text("? PREV JOKE", cwidth/2 - 195, cheight/2 - 140)

    // BACK BUTTON
    canvas.fill(150, 50, 50)
    canvas.rect(cwidth/2 - 110, 15, 220, 32)
    canvas.fill(255, 255, 255)
    canvas.text("BACK TO MEMBERS", cwidth/2 - 65, 31)
}

// ============================================================
// CLICK HANDLER LOGIC
// ============================================================
def handleClick(x: Double, y: Double) {
    if (screen == 0) {
        if (x >= cwidth/2 - 160 && x <= cwidth/2 + 160 && y >= cheight/2 - 20 && y <= cheight/2 + 40) {
            screen = 1
        }
    } 
    else if (screen == 1) {
        if (x >= cwidth/2 - 80 && x <= cwidth/2 + 80 && y >= 12 && y <= 40) {
            screen = 0
        } else {
            for (i <- 0 until familyHeads.length) {
                val col = i % 2
                val row = i / 2
                val bx = if (col == 0) cwidth/2 - 240 else cwidth/2 + 10
                val by = (cheight/2 + 130) - (row * 48)
                
                if (x >= bx && x <= bx + 230 && y >= by && y <= by + 40) {
                    selectedFamilyHead = familyHeads(i)
                    screen = 2
                }
            }
        }
    }
    else if (screen == 2) {
        if (x >= cwidth/2 - 110 && x <= cwidth/2 + 110 && y >= 12 && y <= 42) {
            screen = 1
        } else {
            val members = getFamilyMembers(selectedFamilyHead)
            for (i <- 0 until members.length) {
                val my = (cheight/2 + 100) - (i * 48)
                if (x >= cwidth/2 - 220 && x <= cwidth/2 + 220 && y >= my && y <= my + 38) {
                    selectedMember = members(i)
                    currentJokeIndex = 0
                    screen = 3
                }
            }
        }
    }
    else if (screen == 3) {
        if (x >= cwidth/2 - 110 && x <= cwidth/2 + 110 && y >= 15 && y <= 47) {
            screen = 2
        }
        else if (x >= cwidth/2 + 40 && x <= cwidth/2 + 240 && y >= cheight/2 - 165 && y <= cheight/2 - 127) {
            val totalJokes = getNibandhJokes(selectedMember).length
            currentJokeIndex = (currentJokeIndex + 1) % totalJokes
        }
        else if (x >= cwidth/2 - 240 && x <= cwidth/2 - 40 && y >= cheight/2 - 165 && y <= cheight/2 - 127) {
            val totalJokes = getNibandhJokes(selectedMember).length
            currentJokeIndex = (currentJokeIndex - 1 + totalJokes) % totalJokes
        }
    }
}

onMouseClick { (x, y) => handleClick(x, y) }

// ============================================================
// MAIN ANIMATION LOOP
// ============================================================
animateWithCanvasDraw { canvas =>
    repeatFor(stars) { s => s.step() }

    if (screen == 0) drawWelcomeScreen(canvas)
    else if (screen == 1) drawFamiliesListScreen(canvas)
    else if (screen == 2) drawMembersScreen(canvas)
    else if (screen == 3) drawJokeReaderScreen(canvas)
}