Code Sketch


bsa,ijug/ug/.sh .99944
By: Mhalsakant School
Category: Programming
originBottomLeft()
// ============================================================
// BAILGADA SHARYAT (BULLOCK CART RACE) - CHAMPIONSHIP EDITION
// ============================================================
var screen = 0
var selectedAvatar = 0 // 1: Alok, 2: Bixuu, 3: Sniper, 4: Yoiii
var raceTime = 90.0
var gamePlaying = false
var hasTapped = false
var raceMessage = "Tap rapidly to speed up your bullock cart!"

// ============================================================
// COLORS
// ============================================================
val BLACK = Color(0, 0, 0)
val WHITE = Color(255, 255, 255)
val RED = Color(220, 40, 40)
val GREEN = Color(0, 170, 70)
val BLUE = Color(40, 100, 210)
val LIGHTBLUE = Color(155, 220, 255)
val DARKBLUE = Color(25, 45, 80)
val GREY = Color(150, 150, 150)
val YELLOW = Color(255, 215, 50)
val CREAM = Color(250, 242, 220)
val ORANGE = Color(255, 120, 0)
val BROWN = Color(139, 69, 19)

// ============================================================
// BUTTON HELPER
// ============================================================
def button(c: CanvasDraw, x: Double, y: Double, w: Double, h: Double, label: String, color: Color) {
  c.fill(color)
  c.stroke(BLACK)
  c.strokeWeight(2)
  c.rect(x, y, w, h)
  c.fill(WHITE)
  c.text(label, x + 10, y + 15)
}

// ============================================================
// HEADER HELPER
// ============================================================
def header(c: CanvasDraw, title: String) {
  c.fill(DARKBLUE)
  c.rect(0, cheight - 75, cwidth, 75)
  c.fill(WHITE)
  c.text(title, 35, cheight - 48)
}

// ============================================================
// SCREEN 0: INVITATION LETTER (ENGLISH)
// ============================================================
def secretLetterScreen(c: CanvasDraw) {
  c.fill(CREAM)
  c.rect(0, 0, cwidth, cheight)

  header(c, "BAILGADA SHARYAT - OFFICIAL INVITATION LETTER")

  c.fill(WHITE)
  c.stroke(BLACK)
  c.strokeWeight(3)
  c.rect(100, 110, 800, 410)

  c.fill(BLACK)
  c.text("FROM: BAILGADA SHARYAT COMMITTEE", 140, 470)
  c.text("SUBJECT: CHAMPIONSHIP INVITATION & MEGA PRIZES", 140, 430)

  c.text("Dear Participant,", 140, 370)
  c.text("You are officially invited to the Grand Bullock Cart Race Championship!", 140, 330)
  c.text("Prizes: 1st Prize: 1 Crore, Bullock Gotha, Trophy, Bike & Duke!", 140, 290)
  c.text("2nd Prize: 50 Lakhs & Trophy | 3rd Prize: 20 Lakhs & Trophy.", 140, 250)
  c.text("Special decorative clothes for your bulls included!", 140, 210)
  c.text("Click below to enter the racing arena and select your team!", 140, 150)

  button(c, 350, 40, 300, 50, "PROCEED TO AVATARS", RED)
}

// ============================================================
// SCREEN 1: AVATAR & BULL SELECTION
// ============================================================
def avatarSelectionScreen(c: CanvasDraw) {
  c.fill(DARKBLUE)
  c.rect(0, 0, cwidth, cheight)

  header(c, "SELECT YOUR HERO & BULLS (BAKASUR & MATHUR)")

  button(c, 70, 260, 190, 120, "1. DJ ALOK\nBulls: Bakasur & Mathur", YELLOW)
  button(c, 280, 260, 190, 120, "2. Bixuu\nBulls: Storm & Thunder", BLUE)
  button(c, 490, 260, 190, 120, "3. Sniper\nBulls: Bullet & Arrow", ORANGE)
  button(c, 700, 260, 190, 120, "4. Yoiii\nBulls: Rocky & Tiger", RED)

  c.fill(WHITE)
  c.text("Choose your racer wisely! 8 Teams are competing in the tournament.", 220, 420)
}

// ============================================================
// SCREEN 2: PLAY THE GAME (RACE TRACK WITH 8 TEAMS & 90S TIMER)
// ============================================================
def gameLevelScreen(c: CanvasDraw) {
  c.fill(LIGHTBLUE)
  c.rect(0, 0, cwidth, cheight)

  // Ground / Track background
  c.fill(BROWN)
  c.rect(0, 50, cwidth, 380)

  // Draw 8 Racing Lanes
  var lane = 0
  while (lane < 8) {
    c.fill(WHITE)
    c.rect(0, 60 + (lane * 45), cwidth, 4)
    lane = lane + 1
  }

  header(c, "BAILGADA SHARYAT - 8 TEAMS RACING (90s Timer)")

  // Timer & Status Info
  c.fill(WHITE)
  c.stroke(BLACK)
  c.rect(30, cheight - 130, 260, 40)
  c.fill(BLACK)
  c.text("TIME LEFT: " + raceTime.toInt + "s", 45, cheight - 105)

  // Draw 8 Teams (Lane 0 is Player's Team with Bakasur & Mathur)
  var i = 0
  while (i < 8) {
    var cartX = 200.0 + (i * 25)
    if (i == 0) {
      cartX = 350.0 // Player's cart position based on tapping
    }
    
    // Draw Cart
    c.fill(if (i == 0) YELLOW else GREY)
    c.stroke(BLACK)
    c.rect(cartX, 70 + (i * 45), 60, 30)
    
    // Draw Bulls
    c.fill(WHITE)
    c.ellipse(cartX + 80, 85 + (i * 45), 30, 20)
    
    // Label for Player's Team
    if (i == 0) {
      c.fill(BLACK)
      c.text("YOUR CART (Bakasur & Mathur)", cartX - 20, 55 + (i * 45))
    } else {
      c.fill(BLACK)
      c.text("Team " + (i + 1), cartX, 55 + (i * 45))
    }
    i = i + 1
  }

  // Winning Line indication when timer is near end (<= 10 seconds)
  if (raceTime <= 10.0) {
    c.fill(RED)
    c.rect(cwidth - 100, 50, 15, 380)
    c.fill(WHITE)
    c.text("WINNING LINE!", cwidth - 150, 250)
  }

  // Action Message
  c.fill(DARKBLUE)
  c.text(raceMessage, 240, cheight - 40)

  // Control Button to Tap & Move Forward
  button(c, 350, 10, 300, 45, "TAP TO SPEED UP!", RED)
}

// ============================================================
// SCREEN 3: WINNING SCREEN & PRIZES
// ============================================================
def finalThankYouScreen(c: CanvasDraw) {
  c.fill(DARKBLUE)
  c.rect(0, 0, cwidth, cheight)

  c.fill(WHITE)
  c.stroke(BLACK)
  c.strokeWeight(3)
  c.rect(80, 60, 840, 460)

  c.fill(BLACK)
  c.text("CONGRATULATIONS! YOU WON THE BAILGADA SHARYAT!", 150, 480)
  c.text("1st Prize: 1 Crore Cash + Bullock Gotha + Trophy + Bike & Duke!", 110, 410)
  c.text("2nd Prize: 50 Lakhs + Trophy", 110, 360)
  c.text("3rd Prize: 20 Lakhs + Trophy", 110, 310)
  c.text("Bonus: Special Decorative Clothes awarded for Bakasur & Mathur!", 110, 260)
  c.text("Thank you for playing the ultimate Bailgada game!", 110, 200)

  button(c, 360, 15, 280, 50, "PLAY AGAIN", GREEN)
}

// ============================================================
// SCREEN 4: GAME OVER (TIMED OUT / NO TAP)
// ============================================================
def gameOverScreen(c: CanvasDraw) {
  c.fill(BLACK)
  c.rect(0, 0, cwidth, cheight)

  c.fill(RED)
  c.text("OUT OF TIME! YOU FAILED TO TAP FAST ENOUGH!", 200, 350)
  c.fill(WHITE)
  c.text("Your cart lagged behind and lost the race. Try again!", 250, 290)

  button(c, 360, 150, 280, 50, "RETRY RACE", GREEN)
}

// ============================================================
// MAIN ANIMATION LOOP
// ============================================================
animateWithCanvasDraw { c =>
  if (screen == 0) {
    secretLetterScreen(c)
  } else if (screen == 1) {
    avatarSelectionScreen(c)
  } else if (screen == 2) {
    // Decrement timer during gameplay
    if (raceTime > 0) {
      raceTime = raceTime - 0.03
    } else {
      if (hasTapped) {
        screen = 3 // Win Screen
      } else {
        screen = 4 // Game Over Screen
      }
    }
    gameLevelScreen(c)
  } else if (screen == 3 || screen == 4) {
    if (screen == 3) finalThankYouScreen(c)
    else gameOverScreen(c)
  }
}

// ============================================================
// MOUSE CONTROLS (Interactive Gameplay)
// ============================================================
onMouseClick { (x, y) =>
  if (screen == 0) {
    if (x > 350 && x < 650 && y > 40 && y < 90) {
      screen = 1
    }
  } else if (screen == 1) {
    // Select Avatar & start race
    if (x > 70 && x < 890 && y > 260 && y < 380) {
      selectedAvatar = 1
      raceTime = 90.0
      hasTapped = false
      screen = 2
      raceMessage = "Race started! Tap the button rapidly!"
    }
  } else if (screen == 2) {
    // Tap button to move cart and register activity
    if (x > 350 && x < 650 && y > 10 && y < 55) {
      hasTapped = true
      raceMessage = "Great speed! Bakasur & Mathur are rushing forward!"
    }
  } else if (screen == 3 || screen == 4) {
    // Restart Game
    if (x > 360 && x < 640 && (y > 15 && y < 65 || y > 150 && y < 200)) {
      screen = 0
      selectedAvatar = 0
      raceTime = 90.0
      hasTapped = false
      raceMessage = "Tap rapidly to speed up your bullock cart!"
    }
  }
}