221 lines
7.8 KiB
Python
Executable File
221 lines
7.8 KiB
Python
Executable File
import os
|
|
import random
|
|
import sys
|
|
|
|
# ANSI 색상 코드
|
|
RED = "\033[91m"
|
|
GREEN = "\033[92m"
|
|
YELLOW = "\033[93m"
|
|
BLUE = "\033[94m"
|
|
MAGENTA = "\033[95m"
|
|
CYAN = "\033[96m"
|
|
RESET = "\033[0m"
|
|
|
|
# 카드 ASCII 아트
|
|
CARD_ART = {
|
|
"Emperor": f"""{YELLOW}
|
|
┌─────────────────┐
|
|
│E │
|
|
│ ♔♔♔♔♔♔♔♔♔ │
|
|
│ ♔ EMPEROR ♔ │
|
|
│ ♔♔♔♔♔♔♔♔♔ │
|
|
│ E│
|
|
└─────────────────┘{RESET}""",
|
|
"Slave": f"""{BLUE}
|
|
┌─────────────────┐
|
|
│S │
|
|
│ ⚓⚓⚓⚓⚓⚓⚓⚓⚓ │
|
|
│ ⚓ SLAVE ⚓ │
|
|
│ ⚓⚓⚓⚓⚓⚓⚓⚓⚓ │
|
|
│ S│
|
|
└─────────────────┘{RESET}""",
|
|
"Citizen": f"""{GREEN}
|
|
┌─────────────────┐
|
|
│C │
|
|
│ ☺☺☺☺☺☺☺☺☺ │
|
|
│ ☺ CITIZEN ☺ │
|
|
│ ☺☺☺☺☺☺☺☺☺ │
|
|
│ C│
|
|
└─────────────────┘{RESET}"""
|
|
}
|
|
|
|
def clear_screen():
|
|
os.system('clear')
|
|
|
|
def get_key():
|
|
return sys.stdin.read(1)
|
|
|
|
def title_screen():
|
|
clear_screen()
|
|
print(f"{CYAN}========================{RESET}")
|
|
print(f"{MAGENTA} E 카드 {RESET}")
|
|
print(f"{YELLOW} 제작자: songyc.eng{RESET}")
|
|
print(f"{CYAN}========================{RESET}")
|
|
print("엔터를 눌러 시작하세요")
|
|
while True:
|
|
if get_key() == '\n':
|
|
break
|
|
|
|
def initialize_game():
|
|
return {
|
|
"player_money": 100,
|
|
"computer_money": 100,
|
|
"round": 1,
|
|
"player_role": "Emperor",
|
|
"computer_role": "Slave",
|
|
"set_results": []
|
|
}
|
|
|
|
def create_deck(role):
|
|
if role == "Emperor":
|
|
return ["Emperor"] + ["Citizen"] * 4
|
|
elif role == "Slave":
|
|
return ["Slave"] + ["Citizen"] * 4
|
|
|
|
def display_cards(cards, cursor_index):
|
|
for i, card in enumerate(cards):
|
|
if i == cursor_index:
|
|
print(f"{RED}>{RESET} {CARD_ART[card]}")
|
|
else:
|
|
print(f" {CARD_ART[card]}")
|
|
|
|
def compare_cards(player_card, computer_card):
|
|
if player_card == "Emperor" and computer_card == "Citizen":
|
|
return "Player"
|
|
elif player_card == "Citizen" and computer_card == "Slave":
|
|
return "Player"
|
|
elif player_card == "Slave" and computer_card == "Emperor":
|
|
return "Player"
|
|
elif computer_card == "Emperor" and player_card == "Citizen":
|
|
return "Computer"
|
|
elif computer_card == "Citizen" and player_card == "Slave":
|
|
return "Computer"
|
|
elif computer_card == "Slave" and player_card == "Emperor":
|
|
return "Computer"
|
|
else:
|
|
return "Draw"
|
|
|
|
def display_menu(cursor_index):
|
|
options = ["게임 계속하기", "타이틀 화면으로 돌아가기", "게임 종료하기"]
|
|
for i, option in enumerate(options):
|
|
if i == cursor_index:
|
|
print(f"{RED}> {option} <{RESET}")
|
|
else:
|
|
print(f" {option}")
|
|
|
|
def menu():
|
|
cursor_index = 0
|
|
while True:
|
|
clear_screen()
|
|
print(f"{YELLOW}메뉴{RESET}")
|
|
display_menu(cursor_index)
|
|
key = get_key()
|
|
if key == 'j' and cursor_index < 2:
|
|
cursor_index += 1
|
|
elif key == 'k' and cursor_index > 0:
|
|
cursor_index -= 1
|
|
elif key == '\n':
|
|
return cursor_index
|
|
|
|
def play_round(game_state):
|
|
player_deck = create_deck(game_state["player_role"])
|
|
computer_deck = create_deck(game_state["computer_role"])
|
|
cursor_index = 0
|
|
|
|
while player_deck and computer_deck:
|
|
clear_screen()
|
|
print(f"{GREEN}플레이어 소지금: {game_state['player_money']} Ferica{RESET}")
|
|
print(f"{RED}컴퓨터 소지금: {game_state['computer_money']} Ferica{RESET}")
|
|
print(f"라운드: {game_state['round']}")
|
|
print(f"플레이어 역할: {game_state['player_role']}")
|
|
print(f"컴퓨터 역할: {game_state['computer_role']}")
|
|
print(f"{YELLOW}당신의 카드:{RESET}")
|
|
display_cards(player_deck, cursor_index)
|
|
|
|
key = get_key()
|
|
if key == 'j' and cursor_index < len(player_deck) - 1:
|
|
cursor_index += 1
|
|
elif key == 'k' and cursor_index > 0:
|
|
cursor_index -= 1
|
|
elif key == '\n':
|
|
player_card = player_deck.pop(cursor_index)
|
|
computer_card = random.choice(computer_deck)
|
|
computer_deck.remove(computer_card)
|
|
|
|
print(f"당신이 낸 카드: {CARD_ART[player_card]}")
|
|
print(f"컴퓨터가 낸 카드: {CARD_ART[computer_card]}")
|
|
|
|
result = compare_cards(player_card, computer_card)
|
|
if result == "Player":
|
|
print(f"{GREEN}당신이 이번 라운드에서 이겼습니다!{RESET}")
|
|
game_state["player_money"] += game_state["bet"]
|
|
game_state["computer_money"] -= game_state["bet"]
|
|
elif result == "Computer":
|
|
print(f"{RED}컴퓨터가 이번 라운드에서 이겼습니다!{RESET}")
|
|
game_state["player_money"] -= game_state["bet"]
|
|
game_state["computer_money"] += game_state["bet"]
|
|
else:
|
|
print(f"{YELLOW}무승부입니다!{RESET}")
|
|
|
|
input("계속하려면 엔터를 누르세요...")
|
|
if result != "Draw":
|
|
return result
|
|
elif key == 'm':
|
|
menu_choice = menu()
|
|
if menu_choice == 1:
|
|
return "Title"
|
|
elif menu_choice == 2:
|
|
sys.exit()
|
|
|
|
return "Draw"
|
|
|
|
def main():
|
|
while True:
|
|
title_screen()
|
|
game_state = initialize_game()
|
|
|
|
while game_state["round"] <= 10:
|
|
clear_screen()
|
|
print(f"{MAGENTA}라운드 {game_state['round']}{RESET}")
|
|
try:
|
|
game_state["bet"] = int(input("배팅 금액을 입력하세요: "))
|
|
if game_state["bet"] <= 0 or game_state["bet"] > min(game_state["player_money"], game_state["computer_money"]):
|
|
raise ValueError
|
|
except ValueError:
|
|
print("잘못된 배팅입니다. 유효한 금액을 입력해주세요.")
|
|
input("다시 시도하려면 엔터를 누르세요...")
|
|
continue
|
|
|
|
result = play_round(game_state)
|
|
if result == "Title":
|
|
break
|
|
game_state["set_results"].append(result)
|
|
|
|
if game_state["player_money"] <= 0:
|
|
print(f"{RED}당신의 소지금이 모두 소진되었습니다. 게임 오버!{RESET}")
|
|
break
|
|
elif game_state["computer_money"] <= 0:
|
|
print(f"{GREEN}컴퓨터의 소지금이 모두 소진되었습니다. 당신이 승리했습니다!{RESET}")
|
|
break
|
|
|
|
game_state["round"] += 1
|
|
game_state["player_role"], game_state["computer_role"] = game_state["computer_role"], game_state["player_role"]
|
|
|
|
if result != "Title":
|
|
if game_state["round"] > 10:
|
|
if game_state["player_money"] > game_state["computer_money"]:
|
|
print(f"{GREEN}당신이 게임에서 승리했습니다!{RESET}")
|
|
elif game_state["player_money"] < game_state["computer_money"]:
|
|
print(f"{RED}컴퓨터가 게임에서 승리했습니다!{RESET}")
|
|
else:
|
|
print(f"{YELLOW}게임이 무승부로 끝났습니다!{RESET}")
|
|
|
|
print("\n세트 결과:")
|
|
for i, result in enumerate(game_state["set_results"], 1):
|
|
print(f"세트 {i}: {result}")
|
|
|
|
input("타이틀 화면으로 돌아가려면 엔터를 누르세요...")
|
|
|
|
if __name__ == "__main__":
|
|
main()
|