Skip to content

Commit 43d218c

Browse files
committed
war card game core gameplay
1 parent 1a4d94c commit 43d218c

File tree

1 file changed

+110
-0
lines changed

1 file changed

+110
-0
lines changed

war.py

Lines changed: 110 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,110 @@
1+
import player
2+
import random
3+
import screenspace as ss
4+
import time
5+
import os
6+
from style import get_graphics
7+
8+
suits = ["♥", "♦", "♣", "♠"]
9+
numbers = ["J", "Q", "K", "A"]
10+
cards = []
11+
for i in range(4):
12+
for j in range(2, 15):
13+
cards.append((str(j) if j<11 else numbers[j-11]) + suits[i])
14+
15+
def card_value(card) -> int:
16+
value = int(card[0:-1]) if (card[0:-1] not in numbers) else (11 + numbers.index(card[0:-1]))
17+
return value
18+
19+
def card_to_str(card):
20+
if card is None:
21+
suit = "?"
22+
number = "?"
23+
else:
24+
suit = card[-1]
25+
number = card[0:-1]
26+
card_str = " " * 33 + f"┌──────┐" + " " * 34 + "\n"
27+
card_str += " " * 33 + f"│{number}" + (" │" if len(number)==1 else " │") + " " * 34 + "\n"
28+
card_str += " " * 33 + f"│ {suit} │" + " " * 34 + "\n"
29+
card_str += " " * 33 + ("│ " if len(number)==1 else "│ ") + f"{number}│" + " " * 34 + "\n"
30+
card_str += " " * 33 + f"└──────┘" + " " * 34 + "\n"
31+
32+
return card_str
33+
34+
def render(card1, card2, wins, losses, total_rounds, active_terminal):
35+
str_to_render = "─" * 36 + "War" + "─" * 36 + "\n"
36+
str_to_render += f"You: {wins}" + " " * 23 + f"Best of {total_rounds} battles" + " " * 17 + f"Opponent: {losses}" + "\n" * 2
37+
str_to_render += card_to_str(card1)
38+
str_to_render += " " * 30 + "Opponent's card" + " " * 30 + "\n" * 5
39+
str_to_render += card_to_str(card2)
40+
str_to_render += " " * 33 + "Your card" + " " * 33 + "\n"
41+
42+
ss.update_quadrant(active_terminal, str_to_render)
43+
44+
def draw_cards(wins, losses, total_rounds, active_terminal):
45+
banker_card = None
46+
card = None
47+
render(banker_card, card, wins, losses, total_rounds, active_terminal)
48+
49+
input("Draw a card (press any key)")
50+
ss.overwrite("\r" + " " * 40)
51+
52+
card = cards[random.randint(0, 51)]
53+
render(banker_card, card, wins, losses, total_rounds, active_terminal)
54+
time.sleep(1)
55+
banker_card = cards[random.randint(0, 51)]
56+
render(banker_card, card, wins, losses, total_rounds, active_terminal)
57+
time.sleep(1)
58+
59+
if card_value(banker_card) > card_value(card):
60+
ss.overwrite("You lose")
61+
time.sleep(1)
62+
return "LOSE"
63+
elif card_value(banker_card) < card_value(card):
64+
ss.overwrite("You win!")
65+
time.sleep(1)
66+
return "WIN"
67+
else:
68+
ss.overwrite("War!")
69+
time.sleep(1)
70+
return draw_cards(wins, losses, total_rounds, active_terminal)
71+
72+
def end(wins, losses, total_rounds, active_terminal):
73+
banker_card = None
74+
card = None
75+
render(banker_card, card, wins, losses, total_rounds, active_terminal)
76+
77+
#@TODO: Make end screen using win and lose graphics
78+
79+
graphics = get_graphics()
80+
win_gfx = graphics["casino_win"]
81+
lose_gfx = graphics["casino_lose"]
82+
83+
if wins > total_rounds//2:
84+
ss.update_quadrant(active_terminal, win_gfx)
85+
ss.overwrite("\r" + " " * 40)
86+
else:
87+
ss.update_quadrant(active_terminal, lose_gfx)
88+
ss.overwrite("\r" + " " * 40)
89+
90+
def play(active_terminal):
91+
n = 3 # number of rounds (must be odd)
92+
93+
wins = 0
94+
losses = 0
95+
96+
for _ in range(n):
97+
match = draw_cards(wins, losses, n, active_terminal)
98+
if match == "WIN":
99+
wins += 1
100+
elif match == "LOSE":
101+
losses += 1
102+
103+
end(wins, losses, n, active_terminal)
104+
time.sleep(1.5)
105+
ss.update_quadrant(active_terminal, data=None)
106+
ss.overwrite("\r")
107+
108+
109+
if __name__ == "__main__":
110+
play(1)

0 commit comments

Comments
 (0)