mirror of
https://github.com/JonasunderscoreJones/EPR-Gruppenabgabe-07.git
synced 2025-10-23 01:39:18 +02:00
160 lines
5.2 KiB
Python
160 lines
5.2 KiB
Python
'''EPR 07 Aufgabe 3'''
|
|
__author__ = "7987847, Werner, 7347119, Fajst, 7735965, Melikidze"
|
|
|
|
from time import sleep
|
|
from random import randint
|
|
|
|
from cmd_interface import Matrix, Terminal
|
|
import screen_handler
|
|
import game
|
|
from game_bot import BOT
|
|
from game_player import PLAYER
|
|
|
|
screen = Matrix()
|
|
|
|
NO = ["n", 'N', 'no', 'No', 'NO', 'nO','']
|
|
YES = ["y", 'Y', 'yes', 'Yes', 'YES', 'yES','yEs','YeS','yES', '']
|
|
|
|
PREVIOUS_CONFIG = None
|
|
|
|
def main(first_time:bool=True, previous_config = None):
|
|
'''
|
|
The main function of the game
|
|
input:
|
|
- first_time: bool
|
|
if the game is started for the first time
|
|
- previous_config: list
|
|
previous config of the game
|
|
|
|
output:
|
|
- previous_config: list
|
|
previous config of the game
|
|
'''
|
|
if first_time:
|
|
screen.refresh()
|
|
screen.set_frame(int(Terminal.get_columns() / 2 - 25),
|
|
int(Terminal.get_lines() / 2 - 10), 50, 20, rounded=True,
|
|
title="Welcome to the game")
|
|
screen.set_string_center(int(Terminal.get_lines() /2 - 7),
|
|
"Follow these instructions")
|
|
screen.set_string_center(int(Terminal.get_lines() /2 - 6),
|
|
"for an enhanced gaming experience:")
|
|
screen.set_string_center(int(Terminal.get_lines() /2 - 4),
|
|
"1. Make sure your terminal is")
|
|
screen.set_string_center(int(Terminal.get_lines() /2 - 3),
|
|
" fullscreen or at least 80x24")
|
|
screen.set_string_center(int(Terminal.get_lines() /2),
|
|
"2. Make sure to not resize your")
|
|
screen.set_string_center(int(Terminal.get_lines() /2 + 1),
|
|
" terminal during gameplay")
|
|
screen.set_string_center(int(Terminal.get_lines() /2 + 4),
|
|
"Your terminal currently has the size:")
|
|
screen.set_string_center(int(Terminal.get_lines() /2 + 5),
|
|
f"{Terminal.get_columns()}x{Terminal.get_lines()}")
|
|
screen.set_string_center(int(Terminal.get_lines() /2 + 7),
|
|
"If your terminal is not fullscreen or")
|
|
screen.set_string_center(int(Terminal.get_lines() /2 + 8),
|
|
"at least 80x28, the game will pause")
|
|
screen.set_string_center(int(Terminal.get_lines() /2 + 9),
|
|
"and display an error message until resolved")
|
|
if screen_handler.console_input(
|
|
"Would you like to check out the rules of the game?", "[Y/n]",
|
|
screen) in YES:
|
|
screen_handler.game_rules(screen)
|
|
screen.refresh()
|
|
if previous_config is not None and screen_handler.console_input(
|
|
"Would you like to reuse the configuration from the last game?",
|
|
"[Y/n]", screen) in YES:
|
|
pass
|
|
else:
|
|
previous_config = screen_handler.config_sequence(screen)
|
|
|
|
screen.refresh()
|
|
screen.print()
|
|
|
|
players = []
|
|
for i in range(0, int(previous_config[1])):
|
|
players.append(PLAYER(screen_handler.console_input(
|
|
f'Name for Player {i + 1}: In der kürze liegt die Würze \
|
|
(In short lies the spice :) )', '', screen=screen), []))
|
|
for i in range(0, int(previous_config[2])):
|
|
players.append(BOT(f'Bot {i + 1}', i + 1, []))
|
|
|
|
screen.refresh()
|
|
|
|
screen_handler.starting_screen(screen, players)
|
|
|
|
sleep(1)
|
|
|
|
screen.refresh()
|
|
|
|
max_turns = int(52 / len(players))
|
|
# debug to shorten game
|
|
# max_turns = 3
|
|
|
|
for turn in range(1, max_turns):
|
|
SUITS = ['Spades', 'Hearts', 'Diamonds', 'Clubs']
|
|
SUITS_SYM = ["♠", "♥", "♦", "♣"]
|
|
trumpf_color = SUITS[randint(0, 3)]
|
|
|
|
screen_handler.trumpf_screen(screen, trumpf_color)
|
|
sleep(2)
|
|
|
|
|
|
card_deck = game.create_cards()
|
|
dealt_cards = game.deal_cards(card_deck, int(previous_config[1]) +
|
|
int(previous_config[2]), turn)
|
|
|
|
for player in players:
|
|
player.set_cards(dealt_cards[players.index(player)])
|
|
|
|
cards = []
|
|
for stiche in range(0, turn):
|
|
cards = []
|
|
for player in players:
|
|
if player.is_bot():
|
|
cards.append(screen_handler.bot_interface(screen, player,
|
|
turn, stiche + 1))
|
|
sleep(0.5)
|
|
else:
|
|
cards.append(screen_handler.player_interface(
|
|
screen, player, turn, stiche + 1, trumpf_color,
|
|
SUITS_SYM[SUITS.index(trumpf_color)]))
|
|
print(cards)
|
|
winner = game.compare_cards(cards, trumpf_color)
|
|
players[winner].add_points(1)
|
|
|
|
screen_handler.stich_win_screen(screen, players[winner], players,
|
|
cards, trumpf_color, SUITS_SYM[SUITS.index(trumpf_color)])
|
|
|
|
|
|
# determine winner
|
|
winner = players[0]
|
|
for player in players:
|
|
if player.get_points() > winner.get_points():
|
|
winner = player
|
|
screen_handler.winner_screen(screen, winner, players)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
return previous_config
|
|
|
|
|
|
|
|
if __name__ == "__main__":
|
|
try:
|
|
PREVIOUS_CONFIG = main()
|
|
while screen_handler.console_input("Would you like to play again?",
|
|
"[Y/n]", screen) in YES:
|
|
screen.refresh()
|
|
PREVIOUS_CONFIG = main(first_time=False,
|
|
previous_config=PREVIOUS_CONFIG)
|
|
except KeyboardInterrupt:
|
|
pass
|
|
|
|
Terminal.clear()
|
|
print("Thank you for playing!")
|