Skip to content

Instantly share code, notes, and snippets.

@phwt
Created January 23, 2020 09:44
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save phwt/dc0069f4f5da4f8d0f824f628cc04872 to your computer and use it in GitHub Desktop.
Save phwt/dc0069f4f5da4f8d0f824f628cc04872 to your computer and use it in GitHub Desktop.
'''
จงเขียนเกมส์ Monster Fighting ที่เป็นการนำ Monster มาต่อสู้กัน
โดยเกมส์นี้จะผลัดกันเล่นคนละรอบ ในแต่ละรอบผู้เล่นจะต้องเลือกว่าจะให้ Monster ทำการโจมตี (A) หรือ ป้องกัน (D)
กฏการเล่นมีดังนี้
1. ถ้า Monster ทั้ง 2 ตัวโจมตีเข้าหากัน (เลือก A ทั้งคู่) ค่า HP จะลดเท่ากับค่าที่ถูกโจมตี เช่น
Mon 1 มี HP 15 เลือกโจมตีสุ่มค่าโจมตีได้ 5
Mon 2 มี HP 15 เลือกโจมตีสุ่มค่าโจมตีได้ 8
เมื่อจบรอบ Mon 1 จะมี HP 7 และ Mon 2 จะมี HP 10
2. ถ้าเลือกป้องกันทั้ง 2 ตัว จะไม่เกิดอะไรขึ้น (แล้วจะทำไปทำไม - -")
3. ถ้าตัวหนึ่งเลือกโจมตี อีกตัวเลือกป้องกัน จะเกิดกรณีดังนี้
3.1. ถ้าตัวที่โจมตีสุ่มพลังโจมตีได้ มากกว่า ค่าสุ่มพลังป้องกันของตัวที่ป้องกัน HP ของตัวป้องกันจะลดเท่ากับส่วนต่าง เช่น
Mon 1 มี HP 15 เลือกโจมตีสุ่มค่าโจมตีได้ 5
Mon 2 มี HP 15 เลือกโจมตีสุ่มค่าป้องกันได้ 3
เมื่อจบรอบ Mon 1 จะมี HP 15 และ Mon 2 จะมี HP 13
3.2. ถ้าตัวที่โจมตีสุ่มพลังโจมตีได้ น้อยกว่า ค่าสุ่มพลังป้องกันของตัวที่ป้องกัน จะไม่เกิดอะไรขึ้น
4. ผู้ชนะคือ Monster ตัวที่เหลือ HP มากกว่า
=== กำหนดให้ ===
Monster แต่ละตัวจะมี HP 15 หน่วย
ถ้าเลือกโจมตี ค่าการโจมตี เป็นเลขสุ่ม 1-9 และค่าการป้องกันจะเป็น 0
ถ้าเลือกป้องกัน ค่าการป้องกัน เป็นเลขสุ่ม 1-7 และค่าการโจมตีจะเป็น 0
'''
from random import randrange
class Monster:
def __init__(self, name):
self.name = name
self.hp = 15
self.action = '' # attack or defend
self.atk_power = 0
self.def_power = 0
def __str__(self):
return '%s %ss (ATK: %s, DEF: %s). Current HP is %s' % (
self.name, self.action, self.atk_power, self.def_power, self.hp
)
def attack(self):
self.atk_power = randrange(1, 10)
self.def_power = 0
self.action = 'attack'
def defend(self):
self.def_power = randrange(1, 8)
self.atk_power = 0
self.action = 'defend'
def perform_action(self, other):
if self.action == 'attack' and other.action == 'attack':
other.hp -= self.atk_power
elif self.action == 'defend' and other.action == 'defend':
pass
elif self.action == 'attack' and other.action == 'defend':
if self.atk_power > other.def_power:
other.hp -= self.atk_power - other.def_power
def __gt__(self, other):
return self.hp > other.hp
def main():
name1 = input("Enter monster 1's name: ")
name2 = input("Enter monster 2's name: ")
mon1 = Monster(name1)
mon2 = Monster(name2)
print("=== START BATTLE ===")
print("%s HP is %s" % (mon1.name, mon1.hp))
print("%s HP is %s" % (mon2.name, mon2.hp))
print('--------------------')
print("Gameplay will switch between the two monsters.")
print("Each player need to choose between 'A (attack)' and 'D (defend)'.")
print()
while mon1.hp > 0 and mon2.hp > 0:
action1 = input("Monster 1's turn : ").upper()
if action1 == 'A':
mon1.attack()
elif action1 == 'D':
mon1.defend()
else:
print('Please input A or D.')
continue
action2 = input("Monster 2's turn : ").upper()
if action2 == 'A':
mon2.attack()
elif action2 == 'D':
mon2.defend()
else:
print('Please input A or D.')
continue
mon1.perform_action(mon2)
mon2.perform_action(mon1)
print(mon1)
print(mon2)
print('*******************')
winner = mon1.name if mon1 > mon2 else mon2.name
print('%s is the winner!' % winner)
main()
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment