import random import time import os class Horse: """ คลาสสำหรับแสดงข้อมูลของม้าแต่ละตัวในการแข่งขัน """ def __init__(self, name, emoji, odds): self.name = name # ชื่อของม้า self.emoji = emoji # อีโมจิแทนตัวม้า (ใช้สำหรับแสดงผลบนหน้าจอ) self.odds = odds # อัตราต่อรองของม้า (ตัวคูณเงินรางวัล) self.position = 0 # ตำแหน่งปัจจุบันของม้าบนสนามแข่ง def move(self): """ คำนวณการเคลื่อนที่ของม้าในแต่ละรอบ ม้าที่มีอัตราต่อรองต่ำ (มีโอกาสชนะสูงกว่า) จะมีแนวโน้มก้าวได้ไกลกว่า """ # ปรับความเร็วสูงสุดตามอัตราต่อรอง: ยิ่ง odds ต่ำ (ม้าเก่ง) ยิ่ง max_step สูง # เพิ่มค่าคงที่ 3 เพื่อให้ม้ามีการเคลื่อนไหวเสมอ max_step = int(10 / self.odds) + 3 step = random.randint(1, max_step) # สุ่มก้าวเดิน self.position += step class RaceGame: """ คลาสหลักสำหรับจัดการตรรกะของเกมแข่งม้าทั้งหมด """ def __init__(self, initial_credit=2000): self.credit = initial_credit # เครดิตเริ่มต้นของผู้เล่น self.horses = [ Horse("พยัคฆ์ทมิฬ", "🐎", 2.5), # ม้า 1 Horse("ม้าเร็วแสง", "🏇", 3.0), # ม้า 2 Horse("สายฟ้าผ่า", "🐴", 4.0), # ม้า 3 Horse("ลมกรด", "🦄", 5.5), # ม้า 4 Horse("อัศวินรัตติกาล", "🎠", 7.0) # ม้า 5 ] self.track_length = 60 # ความยาวของสนามแข่ง (ในหน่วยตัวอักษร) self.bet_amount = 0 # จำนวนเครดิตที่เดิมพันในรอบปัจจุบัน self.bet_horse_id = -1 # ID ของม้าที่เดิมพัน (-1 หากยังไม่ได้เดิมพัน) self.is_race_active = False # สถานะการแข่ง (True หากกำลังแข่งอยู่) def clear_screen(self): """ ล้างหน้าจอ Console """ def display_status(self): """ แสดงสถานะปัจจุบันของเกม (เครดิต, อัตราต่อรอง) """ self.clear_screen() print("+" + "="*40 + "+") print(f"| {'เกมแข่งม้าพยัคฆ์นำโชค':^38} |") print("+" + "="*40 + "+") print(f" เครดิตของคุณ: {self.credit} 💰") print("-" * 42) print(" อัตราต่อรองม้า:") for i, horse in enumerate(self.horses): print(f" [{i+1}] {horse.emoji} {horse.name}: {horse.odds:.1f}x") print("-" * 42) def place_bet(self): """ ให้ผู้เล่นวางเดิมพัน """ if self.is_race_active: print("ไม่สามารถวางเดิมพันขณะการแข่งขันกำลังดำเนินอยู่ได้") return False while True: self.display_status() print("\n") print("เลือกม้าที่จะเดิมพัน:") for i, horse in enumerate(self.horses): print(f" [{i+1}] {horse.name}") print(" [0] ยกเลิก") try: choice = int(input("ป้อนหมายเลขม้าที่คุณต้องการเดิมพัน: ")) if choice == 0: self.bet_horse_id = -1 self.bet_amount = 0 print("ยกเลิกการเดิมพันแล้ว.") return False if 1 <= choice <= len(self.horses): self.bet_horse_id = choice - 1 break else: print("ตัวเลือกไม่ถูกต้อง กรุณาลองใหม่") except ValueError: print("ป้อนตัวเลขเท่านั้น กรุณาลองใหม่") while True: try: amount = int(input(f"ป้อนจำนวนเครดิตที่ต้องการเดิมพัน (มี {self.credit} 💰): ")) if 0 < amount <= self.credit: self.bet_amount = amount # หักเครดิตทันทีที่วางเดิมพัน self.credit -= self.bet_amount print(f"คุณเดิมพัน {self.bet_amount} เครดิตกับ {self.horses[self.bet_horse_id].name}!") return True else: print("จำนวนเครดิตไม่ถูกต้องหรือไม่เพียงพอ กรุณาลองใหม่") except ValueError: print("ป้อนตัวเลขเท่านั้น กรุณาลองใหม่") def draw_track(self): """ วาดสนามแข่งและตำแหน่งของม้าบนหน้าจอ Console """ self.clear_screen() print("+" + "="* (self.track_length + 10) + "+") print(f"| {'การแข่งขันม้าพยัคฆ์นำโชค':^{self.track_length + 8}} |") print("+" + "="* (self.track_length + 10) + "+") print(f" เครดิต: {self.credit} 💰") # แสดงข้อมูลเดิมพันปัจจุบัน bet_info = f"เดิมพัน: {self.bet_amount} กับ {self.horses[self.bet_horse_id].name}" if self.bet_horse_id != -1 else "ยังไม่ได้วางเดิมพัน" print(f" {bet_info}") print("-" * (self.track_length + 12)) for i, horse in enumerate(self.horses): track_segment = ['_'] * self.track_length # ตรวจสอบให้แน่ใจว่าม้าไม่ออกนอกสนาม (visual) track_segment[horse_pos_on_track] = horse.emoji print(f"[{i+1}] {track_line} | เส้นชัย") print("-" * (self.track_length + 12)) def run_race(self): """ ดำเนินการแข่งขันม้าจนกว่าจะมีผู้ชนะ """ if self.bet_amount == 0 or self.bet_horse_id == -1: print("กรุณาวางเดิมพันก่อนเริ่มการแข่งขัน.") return self.is_race_active = True for horse in self.horses: horse.position = 0 # รีเซ็ตตำแหน่งม้าทุกตัวไปที่จุดเริ่มต้น print("กำลังเตรียมการแข่งขัน...") winner_id = -1 while winner_id == -1: self.draw_track() # วาดสนามแข่งในแต่ละเฟรม for horse in self.horses: horse.move() if horse.position >= self.track_length: winner_id = horse.id break # พบผู้ชนะแล้ว หยุดการเคลื่อนที่ self.draw_track() # วาดสนามแข่งเป็นครั้งสุดท้ายเพื่อแสดงผลลัพธ์ winning_horse = self.horses[winner_id] print(f"\n🎉 ม้า {winning_horse.name} ชนะการแข่งขัน! 🎉") if self.bet_horse_id == winner_id: winnings = self.bet_amount * winning_horse.odds self.credit += winnings # เพิ่มเงินรางวัลให้กับเครดิต print(f"ยินดีด้วย! คุณชนะ {winnings:.1f} เครดิต!") else: print(f"เสียใจด้วย คุณแพ้การเดิมพัน {self.bet_amount} เครดิต.") self.bet_amount = 0 # รีเซ็ตการเดิมพันสำหรับรอบถัดไป self.bet_horse_id = -1 self.is_race_active = False input("\nกด Enter เพื่อเล่นต่อ...") def play(self): """ เริ่มเกมและจัดการเมนูหลัก """ while True: self.display_status() print("\n") print("1. วางเดิมพัน") print("2. เริ่มการแข่งขัน (ต้องวางเดิมพันก่อน)") print("3. ออกจากเกม") choice = input("ป้อนตัวเลือกของคุณ: ") if choice == '1': self.place_bet() elif choice == '2': # ตรวจสอบว่ามีการวางเดิมพันก่อนเริ่มแข่ง if self.bet_amount > 0 and self.bet_horse_id != -1: self.run_race() else: print("กรุณาวางเดิมพันก่อนเริ่มการแข่งขัน.") elif choice == '3': print("ขอบคุณที่เล่น! แล้วพบกันใหม่!") break else: print("ตัวเลือกไม่ถูกต้อง กรุณาลองใหม่.") # เริ่มเกมเมื่อรันสคริปต์โดยตรง if __name__ == "__main__": game = RaceGame() game.play()
Standard input is empty
import random import time import os class Horse: """ คลาสสำหรับแสดงข้อมูลของม้าแต่ละตัวในการแข่งขัน """ def __init__(self, name, emoji, odds): self.name = name # ชื่อของม้า self.emoji = emoji # อีโมจิแทนตัวม้า (ใช้สำหรับแสดงผลบนหน้าจอ) self.odds = odds # อัตราต่อรองของม้า (ตัวคูณเงินรางวัล) self.position = 0 # ตำแหน่งปัจจุบันของม้าบนสนามแข่ง def move(self): """ คำนวณการเคลื่อนที่ของม้าในแต่ละรอบ ม้าที่มีอัตราต่อรองต่ำ (มีโอกาสชนะสูงกว่า) จะมีแนวโน้มก้าวได้ไกลกว่า """ # ปรับความเร็วสูงสุดตามอัตราต่อรอง: ยิ่ง odds ต่ำ (ม้าเก่ง) ยิ่ง max_step สูง # เพิ่มค่าคงที่ 3 เพื่อให้ม้ามีการเคลื่อนไหวเสมอ max_step = int(10 / self.odds) + 3 step = random.randint(1, max_step) # สุ่มก้าวเดิน self.position += step class RaceGame: """ คลาสหลักสำหรับจัดการตรรกะของเกมแข่งม้าทั้งหมด """ def __init__(self, initial_credit=2000): self.credit = initial_credit # เครดิตเริ่มต้นของผู้เล่น self.horses = [ Horse("พยัคฆ์ทมิฬ", "🐎", 2.5), # ม้า 1 Horse("ม้าเร็วแสง", "🏇", 3.0), # ม้า 2 Horse("สายฟ้าผ่า", "🐴", 4.0), # ม้า 3 Horse("ลมกรด", "🦄", 5.5), # ม้า 4 Horse("อัศวินรัตติกาล", "🎠", 7.0) # ม้า 5 ] self.track_length = 60 # ความยาวของสนามแข่ง (ในหน่วยตัวอักษร) self.bet_amount = 0 # จำนวนเครดิตที่เดิมพันในรอบปัจจุบัน self.bet_horse_id = -1 # ID ของม้าที่เดิมพัน (-1 หากยังไม่ได้เดิมพัน) self.is_race_active = False # สถานะการแข่ง (True หากกำลังแข่งอยู่) def clear_screen(self): """ ล้างหน้าจอ Console """ os.system('cls' if os.name == 'nt' else 'clear') def display_status(self): """ แสดงสถานะปัจจุบันของเกม (เครดิต, อัตราต่อรอง) """ self.clear_screen() print("+" + "="*40 + "+") print(f"| {'เกมแข่งม้าพยัคฆ์นำโชค':^38} |") print("+" + "="*40 + "+") print(f" เครดิตของคุณ: {self.credit} 💰") print("-" * 42) print(" อัตราต่อรองม้า:") for i, horse in enumerate(self.horses): print(f" [{i+1}] {horse.emoji} {horse.name}: {horse.odds:.1f}x") print("-" * 42) def place_bet(self): """ ให้ผู้เล่นวางเดิมพัน """ if self.is_race_active: print("ไม่สามารถวางเดิมพันขณะการแข่งขันกำลังดำเนินอยู่ได้") time.sleep(1) return False while True: self.display_status() print("\n") print("เลือกม้าที่จะเดิมพัน:") for i, horse in enumerate(self.horses): print(f" [{i+1}] {horse.name}") print(" [0] ยกเลิก") try: choice = int(input("ป้อนหมายเลขม้าที่คุณต้องการเดิมพัน: ")) if choice == 0: self.bet_horse_id = -1 self.bet_amount = 0 print("ยกเลิกการเดิมพันแล้ว.") time.sleep(1) return False if 1 <= choice <= len(self.horses): self.bet_horse_id = choice - 1 break else: print("ตัวเลือกไม่ถูกต้อง กรุณาลองใหม่") time.sleep(1) except ValueError: print("ป้อนตัวเลขเท่านั้น กรุณาลองใหม่") time.sleep(1) while True: try: amount = int(input(f"ป้อนจำนวนเครดิตที่ต้องการเดิมพัน (มี {self.credit} 💰): ")) if 0 < amount <= self.credit: self.bet_amount = amount # หักเครดิตทันทีที่วางเดิมพัน self.credit -= self.bet_amount print(f"คุณเดิมพัน {self.bet_amount} เครดิตกับ {self.horses[self.bet_horse_id].name}!") time.sleep(1) return True else: print("จำนวนเครดิตไม่ถูกต้องหรือไม่เพียงพอ กรุณาลองใหม่") time.sleep(1) except ValueError: print("ป้อนตัวเลขเท่านั้น กรุณาลองใหม่") time.sleep(1) def draw_track(self): """ วาดสนามแข่งและตำแหน่งของม้าบนหน้าจอ Console """ self.clear_screen() print("+" + "="* (self.track_length + 10) + "+") print(f"| {'การแข่งขันม้าพยัคฆ์นำโชค':^{self.track_length + 8}} |") print("+" + "="* (self.track_length + 10) + "+") print(f" เครดิต: {self.credit} 💰") # แสดงข้อมูลเดิมพันปัจจุบัน bet_info = f"เดิมพัน: {self.bet_amount} กับ {self.horses[self.bet_horse_id].name}" if self.bet_horse_id != -1 else "ยังไม่ได้วางเดิมพัน" print(f" {bet_info}") print("-" * (self.track_length + 12)) for i, horse in enumerate(self.horses): track_segment = ['_'] * self.track_length # ตรวจสอบให้แน่ใจว่าม้าไม่ออกนอกสนาม (visual) horse_pos_on_track = min(int(horse.position), self.track_length - 1) track_segment[horse_pos_on_track] = horse.emoji track_line = "".join(track_segment) print(f"[{i+1}] {track_line} | เส้นชัย") print("-" * (self.track_length + 12)) def run_race(self): """ ดำเนินการแข่งขันม้าจนกว่าจะมีผู้ชนะ """ if self.bet_amount == 0 or self.bet_horse_id == -1: print("กรุณาวางเดิมพันก่อนเริ่มการแข่งขัน.") time.sleep(1) return self.is_race_active = True for horse in self.horses: horse.position = 0 # รีเซ็ตตำแหน่งม้าทุกตัวไปที่จุดเริ่มต้น print("กำลังเตรียมการแข่งขัน...") time.sleep(2) winner_id = -1 while winner_id == -1: self.draw_track() # วาดสนามแข่งในแต่ละเฟรม for horse in self.horses: horse.move() if horse.position >= self.track_length: winner_id = horse.id break # พบผู้ชนะแล้ว หยุดการเคลื่อนที่ time.sleep(0.15) # หน่วงเวลาเพื่อให้เห็นภาพการเคลื่อนไหว (150ms) self.draw_track() # วาดสนามแข่งเป็นครั้งสุดท้ายเพื่อแสดงผลลัพธ์ winning_horse = self.horses[winner_id] print(f"\n🎉 ม้า {winning_horse.name} ชนะการแข่งขัน! 🎉") if self.bet_horse_id == winner_id: winnings = self.bet_amount * winning_horse.odds self.credit += winnings # เพิ่มเงินรางวัลให้กับเครดิต print(f"ยินดีด้วย! คุณชนะ {winnings:.1f} เครดิต!") else: print(f"เสียใจด้วย คุณแพ้การเดิมพัน {self.bet_amount} เครดิต.") self.bet_amount = 0 # รีเซ็ตการเดิมพันสำหรับรอบถัดไป self.bet_horse_id = -1 self.is_race_active = False input("\nกด Enter เพื่อเล่นต่อ...") def play(self): """ เริ่มเกมและจัดการเมนูหลัก """ while True: self.display_status() print("\n") print("1. วางเดิมพัน") print("2. เริ่มการแข่งขัน (ต้องวางเดิมพันก่อน)") print("3. ออกจากเกม") choice = input("ป้อนตัวเลือกของคุณ: ") if choice == '1': self.place_bet() elif choice == '2': # ตรวจสอบว่ามีการวางเดิมพันก่อนเริ่มแข่ง if self.bet_amount > 0 and self.bet_horse_id != -1: self.run_race() else: print("กรุณาวางเดิมพันก่อนเริ่มการแข่งขัน.") time.sleep(1) elif choice == '3': print("ขอบคุณที่เล่น! แล้วพบกันใหม่!") break else: print("ตัวเลือกไม่ถูกต้อง กรุณาลองใหม่.") time.sleep(1) # เริ่มเกมเมื่อรันสคริปต์โดยตรง if __name__ == "__main__": game = RaceGame() game.play()