Code Sketch
yadnesh shahare made ai
Category: Programming
// === MULTI-BAILGADA RACING WITH UNIQUE SPEEDS & WINNER LINE ===
cleari()
originBottomLeft()
class BailGada(val id: Int, val name: String, var x: Double, var y: Double, val isPlayer: Boolean, val aiSpeed: Double) {
var velocity = 0.0
var finished = false
var finishRank = 0
}
var gameState = "COUNTDOWN"
var countdownTimer = 3.0
var nextRank = 1
var winnerName = ""
val finishLineX = 1150.0
// Pratyeka bailgadala veglivigli speed dili ahe (AI speed unique)
val racers = Array(
new BailGada(1, "Tumcha Gada (Player)", 80.0, 100.0, true, 0.0),
new BailGada(2, "Toofan Express", 80.0, 200.0, false, 1.8),
new BailGada(3, "Bijlee Raja", 80.0, 300.0, false, 1.4),
new BailGada(4, "Badshah", 80.0, 400.0, false, 1.6)
)
class RacingHost() {
def drawRobot(canvas: CanvasDraw, x: Double, y: Double) {
canvas.fill(220, 180, 100)
canvas.stroke(80, 50, 20)
canvas.strokeWeight(2)
canvas.rect(x - 20, y - 40, 40, 30)
canvas.fill(255, 100, 0)
canvas.rect(x - 15, y - 52, 30, 12)
canvas.fill(255, 255, 255)
canvas.ellipse(x - 8, y - 25, 8, 8)
canvas.ellipse(x + 8, y - 25, 8, 8)
canvas.fill(0, 0, 0)
canvas.ellipse(x - 8, y - 25, 3, 3)
canvas.ellipse(x + 8, y - 25, 3, 3)
canvas.fill(100, 70, 40)
canvas.rect(x - 25, y - 10, 50, 45)
canvas.fill(255, 255, 255, 240)
canvas.stroke(0, 0, 0)
canvas.rect(x + 35, y - 50, 330, 42)
canvas.fill(0, 100, 0)
canvas.text("Fast click kara ani tumcha gada vegne samor nya!", x + 42, y - 26)
}
}
val racingHost = new RacingHost()
onMouseClick { (x, y) =>
if (gameState == "RACING") {
repeatFor(racers) { racer =>
if (racer.isPlayer && !racer.finished) {
racer.velocity += 4.5
if (racer.velocity > 9.0) racer.velocity = 9.0
}
}
}
}
def updateGame() {
if (gameState == "COUNTDOWN") {
countdownTimer -= 0.03
if (countdownTimer <= 0) {
gameState = "RACING"
}
} else if (gameState == "RACING") {
var allFinished = true
repeatFor(racers) { racer =>
if (!racer.finished) {
allFinished = false
if (racer.isPlayer) {
racer.x += racer.velocity
if (racer.velocity > 0.5) {
racer.velocity *= 0.92
} else {
racer.velocity = 0.5
}
} else {
// Pratyek AI gadachi speed vegli asnar
racer.x += racer.aiSpeed + (random(0, 1).toDouble * 0.4)
}
if (racer.x >= finishLineX) {
racer.finished = true
racer.finishRank = nextRank
if (nextRank == 1) {
winnerName = racer.name
}
nextRank += 1
}
}
}
if (allFinished) {
gameState = "FINISHED"
}
}
}
def drawUltraDetailedBailGada(canvas: CanvasDraw, x: Double, y: Double, name: String, rank: Int, finished: Boolean) {
canvas.fill(30, 15, 5, 120)
canvas.noStroke()
canvas.ellipse(x + 22, y - 18, 55, 18)
canvas.ellipse(x + 22, y + 18, 55, 18)
// Bulls
canvas.fill(165, 105, 55)
canvas.stroke(70, 40, 15)
canvas.strokeWeight(1)
canvas.ellipse(x + 42, y - 18, 40, 18)
canvas.ellipse(x + 60, y - 25, 15, 14)
canvas.stroke(30, 15, 5)
canvas.strokeWeight(2)
canvas.line(x + 63, y - 30, x + 70, y - 40)
canvas.fill(165, 105, 55)
canvas.stroke(70, 40, 15)
canvas.strokeWeight(1)
canvas.ellipse(x + 42, y + 18, 40, 18)
canvas.ellipse(x + 60, y + 25, 15, 14)
canvas.stroke(30, 15, 5)
canvas.strokeWeight(2)
canvas.line(x + 63, y + 30, x + 70, y + 40)
// Cart & Driver
canvas.fill(139, 69, 19)
canvas.stroke(80, 40, 10)
canvas.strokeWeight(2)
canvas.rect(x - 22, y - 15, 32, 30)
canvas.fill(90, 50, 20)
canvas.stroke(40, 20, 10)
canvas.strokeWeight(2)
canvas.ellipse(x - 8, y, 34, 34)
canvas.fill(240, 200, 140)
canvas.noStroke()
canvas.ellipse(x - 10, y, 13, 13)
canvas.fill(255, 140, 0)
canvas.rect(x - 16, y - 8, 12, 6)
canvas.fill(255, 255, 255)
canvas.text(name, x - 28, y - 35)
if (finished) {
val rankText = rank match {
case 1 => "? 1st WINNER ?"
case 2 => "2nd RUNNER-UP ?"
case 3 => "3rd PLACE ?"
case _ => s"${rank}th Rank"
}
canvas.fill(255, 215, 0)
canvas.text(rankText, x - 28, y + 40)
}
}
def viewState(canvas: CanvasDraw) {
canvas.fill(150, 100, 50)
canvas.noStroke()
canvas.rect(0, 0, cwidth, cheight)
canvas.stroke(120, 75, 30)
canvas.strokeWeight(2)
canvas.line(0, 150, cwidth, 150)
canvas.line(0, 250, cwidth, 250)
canvas.line(0, 350, cwidth, 350)
// --- WINNING LINE / FINISH ARCH ---
canvas.noStroke()
canvas.fill(255, 255, 255)
canvas.rect(finishLineX, 30, 22, cheight - 60)
var cy = 35.0
while (cy < cheight - 30) {
canvas.fill(0, 0, 0)
canvas.rect(finishLineX + 2, cy, 18, 10)
cy += 20.0
}
canvas.fill(255, 215, 0)
canvas.text("? FINAL WINNING LINE ?", finishLineX - 70, cheight - 30)
repeatFor(racers) { racer =>
drawUltraDetailedBailGada(canvas, racer.x, racer.y, racer.name, racer.finishRank, racer.finished)
}
racingHost.drawRobot(canvas, 80.0, cheight - 70.0)
canvas.fill(255, 255, 255)
canvas.text("BAILGADA RACING | Fast Click anywhere to race!", 20, cheight - 20)
if (gameState == "COUNTDOWN") {
canvas.fill(0, 0, 0, 190)
canvas.rect(0, 0, cwidth, cheight)
canvas.fill(255, 215, 0)
val secNum = countdownTimer.toInt + 1
canvas.text(s"SHRAYAT SURU HOTEY: $secNum", cwidth / 2.0 - 130, cheight / 2.0)
}
// --- WINNER ANNOUNCEMENT SCREEN ---
if (gameState == "FINISHED") {
canvas.fill(0, 100, 0, 235)
canvas.rect(100, 80, cwidth - 200, cheight - 160)
canvas.fill(255, 215, 0)
canvas.text("? SHRAYAT PURN ZALI! ?", cwidth / 2.0 - 120, cheight - 130)
canvas.fill(255, 255, 255)
canvas.text(s"WINNING LINE WINNER: $winnerName", cwidth / 2.0 - 160, cheight / 2.0)
}
}
animateWithCanvasDraw { canvas =>
updateGame()
viewState(canvas)
}