mirror of
https://github.com/JonasunderscoreJones/EPI-2324.git
synced 2025-10-23 16:39:21 +02:00
ue05
This commit is contained in:
parent
af017f80ca
commit
beaf0855b8
4 changed files with 331 additions and 3 deletions
275
EPR/ue05/main.py
275
EPR/ue05/main.py
|
@ -1,9 +1,175 @@
|
|||
'''EPR Übungsblatt 05'''
|
||||
__author__="7987847, Werner"
|
||||
|
||||
import random
|
||||
import blatt04
|
||||
|
||||
|
||||
def load_players() -> [str]:
|
||||
'''Erstellt die Spieler des Spiels'''
|
||||
while True:
|
||||
try:
|
||||
player_count = int(input("Anzahl der Spieler (3-4): "))
|
||||
if player_count in [3, 4]:
|
||||
break
|
||||
except ValueError:
|
||||
pass
|
||||
|
||||
player_names = []
|
||||
|
||||
for i in range(player_count):
|
||||
print("Spieler", i+1, "Name: ", end='')
|
||||
name = input()
|
||||
if name == "":
|
||||
name = "Spieler " + str(i+1)
|
||||
player_names.append(name)
|
||||
|
||||
return player_names
|
||||
|
||||
|
||||
def initialize_variables(players:[str]) -> ({str: int}, {str: list}):
|
||||
'''Initialisiert die Variablen für das Spiel'''
|
||||
|
||||
score_dict = {}
|
||||
hand_dict = {}
|
||||
|
||||
# Erstelle und mische das Kratenblatt
|
||||
deck = blatt04.create_card_list(12)
|
||||
deck = blatt04.shuffle_card_list(deck)
|
||||
|
||||
for i in players:
|
||||
score_dict[i] = 0
|
||||
hand_dict[i] = []
|
||||
|
||||
hand_dict = blatt04.hand_out_cards_modified(deck, hand_dict, 3)
|
||||
|
||||
return score_dict, hand_dict
|
||||
|
||||
|
||||
def play_game(players: list, scores: {str: int}, all_hands: {str: list}) -> {str: int}:
|
||||
'''Spielt das Spiel'''
|
||||
|
||||
game_over = False
|
||||
|
||||
while not game_over:
|
||||
# Ermittlung einer zufälligen Reihenfolge der Spieler
|
||||
random.shuffle(players)
|
||||
|
||||
trumpf = "any"
|
||||
played_cards = []
|
||||
for player in players:
|
||||
# Karte spielen
|
||||
# player hand von dict all_hands holen
|
||||
player_hand = all_hands.get(player)
|
||||
|
||||
print("-------------------")
|
||||
print("Spieler", player, "ist an der Reihe")
|
||||
played_card, player_cards = play_card(player_hand, trumpf)
|
||||
all_hands[player] = player_cards
|
||||
|
||||
# Wenn der Spieler an der Reihe ist
|
||||
if player == players[0]:
|
||||
trumpf = played_card[1]
|
||||
print("~~~~~~~~~~~~~~~~~~~")
|
||||
print("Trumpf ist", trumpf)
|
||||
print("~~~~~~~~~~~~~~~~~~~")
|
||||
played_cards.append(played_card)
|
||||
|
||||
# Ermittlung des Gewinners
|
||||
winner = get_winner(played_cards, trumpf)
|
||||
|
||||
# Punktevergabe
|
||||
if winner != -1:
|
||||
scores[players[winner]] += 1
|
||||
|
||||
# Gewinner bekommt die Karten
|
||||
for card in played_cards:
|
||||
all_hands[players[winner]].append(card)
|
||||
|
||||
print("Punktestand: ", scores)
|
||||
|
||||
# Überprüfung ob das Spiel zu Ende ist
|
||||
for player in players:
|
||||
if len(all_hands[player]) == 0:
|
||||
game_over = True
|
||||
|
||||
print("Das Spiel ist zu Ende.")
|
||||
# sortiere die spieler scores nach der höhe
|
||||
sorted_scores = sorted(scores.items(), key=lambda x: x[1])
|
||||
|
||||
players_won = []
|
||||
players_won.append(sorted_scores[0][0])
|
||||
|
||||
for i in range(len(sorted_scores)):
|
||||
if i == len(sorted_scores) - 1:
|
||||
break
|
||||
if sorted_scores[i][1] == sorted_scores[i+1][1]:
|
||||
players_won.append(sorted_scores[i+1][0])
|
||||
|
||||
print("Die Spieler", players_won, "haben gewonnen.")
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
def check_card(card: (int, str), player_hand: list, trump: str) -> bool:
|
||||
'''Überprüft ob eine Karte gespielt werden darf'''
|
||||
|
||||
if card[1] == trump:
|
||||
return True
|
||||
|
||||
for i in player_hand:
|
||||
if i[1] == trump:
|
||||
return False
|
||||
|
||||
return True
|
||||
|
||||
|
||||
def play_card(player_hand: list, trump: str) -> ((int, str), list):
|
||||
'''Spielt eine Karte aus der Hand'''
|
||||
for i in player_hand:
|
||||
print(i + 1, player_hand[i])
|
||||
|
||||
card_valid = False
|
||||
|
||||
while not card_valid:
|
||||
played_card_index = input(
|
||||
"Karte wählen. Bei illegalem Zug wird dies wiederholt.\
|
||||
(Nummer von 1 - " +
|
||||
str(len(player_hand)) + "): ")
|
||||
|
||||
try:
|
||||
played_card_index = int(played_card_index)
|
||||
player_hand[played_card_index - 1]
|
||||
except ValueError:
|
||||
print("Keine gültige Zahl")
|
||||
continue
|
||||
|
||||
card_valid = check_card(player_hand[played_card_index - 1], player_hand, trump)
|
||||
|
||||
print("Karte gespielt: ", player_hand[i-1])
|
||||
|
||||
return player_hand.pop(i-1), player_hand
|
||||
|
||||
|
||||
def get_winner(current_trick: list, trump: str) -> int:
|
||||
'''Ermittelt den Gewinner eines Stiches'''
|
||||
|
||||
# Ermittelt die Trumpfkarten der liste current_trick.
|
||||
trump_cards = list(filter(lambda x: x[1] == trump, current_trick))
|
||||
|
||||
if len(trump_cards) > 0:
|
||||
# Ermittelt die höchste Trumpfkarte
|
||||
highest_trump = max(trump_cards, key=lambda x: x[0])
|
||||
return current_trick.index(highest_trump)
|
||||
|
||||
# Wenn es keine Trumpkarten gibt, gewinnt niemand
|
||||
return -1
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
@ -14,4 +180,111 @@ import blatt04
|
|||
|
||||
|
||||
if __name__ == '__main__':
|
||||
pass
|
||||
players = load_players()
|
||||
scores, hands = initialize_variables(players)
|
||||
play_game(players, scores, hands)
|
||||
|
||||
# Testfälle
|
||||
|
||||
# a)
|
||||
# load_players()
|
||||
# Ausgabe: Anzahl der Spieler (3-4): 3
|
||||
# Spieler 1 Name: Spieler 1
|
||||
# Spieler 2 Name: Spieler 2
|
||||
# Spieler 3 Name: Spieler 3
|
||||
# Rückgabe: ['Spieler 1', 'Spieler 2', 'Spieler 3']
|
||||
|
||||
# load_players()
|
||||
# Ausgabe: Anzahl der Spieler (3-4): 4
|
||||
# Spieler 1 Name: Spieler 1
|
||||
# Spieler 2 Name: Spieler 2
|
||||
# Spieler 3 Name: Spieler 3
|
||||
# Spieler 4 Name: Spieler 4
|
||||
# Rückgabe: ['Spieler 1', 'Spieler 2', 'Spieler 3', 'Spieler 4']
|
||||
|
||||
# load_players()
|
||||
# Ausgabe: Anzahl der Spieler (3-4): 2
|
||||
# Anzahl der Spieler (3-4): 5
|
||||
# Anzahl der Spieler (3-4): 3
|
||||
# Spieler 1 Name: Spieler 1
|
||||
# Spieler 2 Name: Spieler 2
|
||||
# Spieler 3 Name: Spieler 3
|
||||
# Rückgabe: ['Spieler 1', 'Spieler 2', 'Spieler 3']
|
||||
|
||||
# b)
|
||||
# initialize_variables(['Spieler 1', 'Spieler 2', 'Spieler 3'])
|
||||
# Rückgabe: ({'Spieler 1': 0, 'Spieler 2': 0, 'Spieler 3': 0},
|
||||
# {'Spieler 1': [(1, 'Kreuz'), (1, 'Pik'), (1, 'Herz')], 'Spieler 2':
|
||||
# [(1, 'Karo'), (2, 'Kreuz'), (2, 'Pik')], 'Spieler 3': [(2, 'Herz'),
|
||||
# (2, 'Karo'), (3, 'Kreuz')]})
|
||||
|
||||
# initialize_variables(['Spieler 1', 'Spieler 2', 'Spieler 3', 'Spieler 4'])
|
||||
# Rückgabe: ({'Spieler 1': 0, 'Spieler 2': 0, 'Spieler 3': 0,
|
||||
# 'Spieler 4': 0}, {'Spieler 1': [(1, 'Kreuz'), (1, 'Pik'), (1, 'Herz')],
|
||||
# 'Spieler 2': [(1, 'Karo'), (2, 'Kreuz'), (2, 'Pik')], 'Spieler 3':
|
||||
# [(2, 'Herz'), (2, 'Karo'), (3, 'Kreuz')], 'Spieler 4': [(3, 'Pik'),
|
||||
# (3, 'Herz'), (3, 'Karo')]})
|
||||
|
||||
# initialize_variables(['Spieler 1', 'Spieler 2'])
|
||||
# Rückgabe: ({'Spieler 1': 0, 'Spieler 2': 0}, {'Spieler 1': [(1, 'Kreuz'),
|
||||
# (1, 'Pik'), (1, 'Herz')], 'Spieler 2': [(1, 'Karo'), (2, 'Kreuz'),
|
||||
# (2, 'Pik')]})
|
||||
|
||||
# c)
|
||||
# play_game(['Spieler 1', 'Spieler 2', 'Spieler 3'], {'Spieler 1': 0,
|
||||
# 'Spieler 2': 0, 'Spieler 3': 0}, {'Spieler 1': [(1, 'Kreuz'), (1, 'Pik'),
|
||||
# (1, 'Herz')], 'Spieler 2': [(1, 'Karo'), (2, 'Kreuz'), (2, 'Pik')],
|
||||
# 'Spieler 3': [(2, 'Herz'), (2, 'Karo'), (3, 'Kreuz')]})
|
||||
# Spiel wird gespielt
|
||||
|
||||
# play_game(['Spieler 1', 'Spieler 2', 'Spieler 3', 'Spieler 4'],
|
||||
# {'Spieler 1': 0, 'Spieler 2': 0, 'Spieler 3': 0, 'Spieler 4': 0},
|
||||
# {'Spieler 1': [(1, 'Kreuz'), (1, 'Pik'), (1, 'Herz')], 'Spieler 2':
|
||||
# [(1, 'Karo'), (2, 'Kreuz'), (2, 'Pik')], 'Spieler 3': [(2, 'Herz'),
|
||||
# (2, 'Karo'), (3, 'Kreuz')], 'Spieler 4': [(3, 'Pik'), (3, 'Herz'),
|
||||
# (3, 'Karo')]})
|
||||
# Spiel wird gespielt
|
||||
|
||||
# play_game(['Spieler 1', 'Spieler 2'], {'Spieler 1': 0, 'Spieler 2': 0},
|
||||
# {'Spieler 1': [(1, 'Kreuz'), (1, 'Pik'), (1, 'Herz')], 'Spieler 2':
|
||||
# [(1, 'Karo'), (2, 'Kreuz'), (2, 'Pik')]})
|
||||
# Spiel wird gespielt
|
||||
|
||||
# d)
|
||||
# check_card((1, 'Kreuz'), [(1, 'Kreuz'), (1, 'Pik'), (1, 'Herz')], 'Karo')
|
||||
# Rückgabe: True
|
||||
|
||||
# check_card((1, 'Kreuz'), [(1, 'Kreuz'), (1, 'Pik'), (1, 'Herz')], 'Pik')
|
||||
# Rückgabe: False
|
||||
|
||||
# check_card((1, 'Kreuz'), [(1, 'Kreuz'), (1, 'Pik'), (1, 'Herz')], 'Herz')
|
||||
# Rückgabe: True
|
||||
|
||||
# e)
|
||||
# play_card([(1, 'Kreuz'), (1, 'Pik'), (1, 'Herz')], 'Karo')
|
||||
# Ausgabe: 1 (Karte wählen. Bei illegalem Zug wird dies wiederholt. (Nummer von 1 - 3): 1
|
||||
# Karte gespielt: (1, 'Kreuz')
|
||||
# Rückgabe: ((1, 'Kreuz'), [(1, 'Pik'), (1, 'Herz')])
|
||||
# (Kann auch anders aussehen)
|
||||
|
||||
# play_card([(1, 'Kreuz'), (1, 'Pik'), (1, 'Herz')], 'Pik')
|
||||
# Ausgabe: 1 (Karte wählen. Bei illegalem Zug wird dies wiederholt. (Nummer von 1 - 3): 1
|
||||
# Karte gespielt: (1, 'Kreuz')
|
||||
# Rückgabe: ((1, 'Kreuz'), [(1, 'Pik'), (1, 'Herz')])
|
||||
# (Kann auch anders aussehen)
|
||||
|
||||
# play_card([(1, 'Kreuz'), (1, 'Pik'), (1, 'Herz')], 'Herz')
|
||||
# Ausgabe: 1 (Karte wählen. Bei illegalem Zug wird dies wiederholt. (Nummer von 1 - 3): 1
|
||||
# Karte gespielt: (1, 'Kreuz')
|
||||
# Rückgabe: ((1, 'Kreuz'), [(1, 'Pik'), (1, 'Herz')])
|
||||
# (Kann auch anders aussehen)
|
||||
|
||||
# f)
|
||||
# get_winner([(1, 'Kreuz'), (1, 'Pik'), (1, 'Herz')], 'Karo')
|
||||
# Rückgabe: 0
|
||||
|
||||
# get_winner([(1, 'Kreuz'), (1, 'Pik'), (1, 'Herz')], 'Pik')
|
||||
# Rückgabe: 0
|
||||
|
||||
# get_winner([(1, 'Kreuz'), (1, 'Pik'), (1, 'Herz')], 'Herz')
|
||||
# Rückgabe: 0
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue