-
-
Save phwt/dc0069f4f5da4f8d0f824f628cc04872 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
''' | |
จงเขียนเกมส์ 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