"""main module""" __author__ = "" __credits__ = "" __email__ = "" import random import clean_input import itertools import copy # Game def central_function(): ''' does everything, keeps order ''' active = 0 # contains index of the active player switch = True card_stack, players_with_cards, players = initialize() print("players",players) # debug print("card stack", card_stack) # debug for i in range(len(players)): # debug pretty_print_deck(players_with_cards, i) # debug print("active", active) # debug drop_cards(players_with_cards) while switch: round(card_stack, players_with_cards, players, active) for i in range(len(players)): # check if any card deck is empty switch = bool(players_with_cards[i]['cards_on_hand']) #for i in itertools.cycle(range(len(players))): # rotate active player # active = i # the_winner_is() def round(card_stack, players_with_cards, players, active): ''' structures one round in the game active player chooses another player from whom to steal a card :return: None ''' switch = True while switch: players_without_active = copy.copy(players) players_without_active.pop(active) print('Folgende Spieler stehen zur Verfügung:') print(players_without_active) # chosen_player enthält den index in der players liste chosen_player = players.index(clean_input.io_str( 'Welchen Spieler möchtest du befragen? ', players_without_active)) print("chosen player", chosen_player) player_request = clean_input.io_card_selection('Welche Karte möchtest du haben? ') if player_request in players_with_cards[chosen_player]['cards_on_hand']: steal(active, chosen_player, players_with_cards, player_request) drop_cards(players_with_cards, active) else: print("Diese Karte hat der Spieler nicht, Ende der Runde") # end of round # except if stack is not empty, which is not only the case with two players if card_stack == True: # last card from the stack gets added to active player's hand players_with_cards[active]['cards_on_hand'].append(card_stack.pop()) switch = False def pretty_print_deck(players_with_cards, player): """ prints the cards in a players deck in a readable format """ pretty_deck = [] for card in players_with_cards[player]['cards_on_hand']: pretty_deck.append(card['number'] + card['letter']) print("Dein Deck: ", pretty_deck) def steal(active, chosen_player, players_with_cards, player_request): """ defines how the active players steals cards from chosen player :return: None """ print("player", chosen_player, "hat die Karte, die du haben möchtest und sie wandert in dein Deck.") card_index = players_with_cards[chosen_player]['cards_on_hand'].index(player_request) players_with_cards[active]['cards_on_hand'].append( players_with_cards[chosen_player]['cards_on_hand'].pop(card_index)) pretty_print_deck(players_with_cards, active) def drop_cards(players_with_cards, active=None): """ function that lets players drop cards if they have a quartet in their deck :return: None """ # default, check all players if active is None: for p in players_with_cards: drop_cards_help(p) else: p = players_with_cards[active] drop_cards_help(p) def drop_cards_help(p): """ eh """ reference = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h'] counter = [0, 0, 0, 0, 0, 0, 0, 0] for card in p["cards_on_hand"]: counter[reference.index(card["letter"])] += 1 for i in counter: if i == 4: quartet_letter = reference[counter.index(i)] counter[counter.index(i)] = 0 p["quartet"] += 1 print(f"{p['player']} legt das {quartet_letter}-Quartett ab...") p["cards_on_hand"] = [c for c in p["cards_on_hand"] if quartet_letter != c["letter"]] # print(p) return p def initialize(): """ initializes stuff :return: list, list (of dicts), list """ card_stack = [] players = [] players_with_cards = [] # define card stack x = 0 for i in range(4): for l in "abcdefgh": d = {"id": str(x), "number": str(i), "letter": l} card_stack.append(d) x += 1 # determine number of players number_of_players = clean_input.io_int("Gegen wie viele Spieler wollen Sie spielen?") number_of_players += 1 # Add also human player. for i in range(number_of_players): players.append(f"player{i}") # determine number of cards per player if len(players) == 2: cards_per_player = 10 else: cards_per_player = int(len(card_stack) // len(players)) # distribute hand cards to players for i in range(number_of_players): cards_of_player = [] for j in range(cards_per_player): x = random.randint(0, len(card_stack) - 1) selected_card = card_stack[x] del card_stack[x] cards_of_player.append(selected_card) # create a list that contains every player, their deck and successes players_with_cards.append( {"player": players[i], "cards_on_hand": cards_of_player, "quartet": 0}) return card_stack, players_with_cards, players def the_winner_is(): """ counts the number of quartets a player has made, and chooses the winner, who made the most """ pass # TODO # Call central_function() only if quartett.py is the main module if __name__ == "__main__": central_function() """p = {'player': 'player1', 'cards_on_hand': [{'id': '27', 'number': '3', 'letter': 'd'}, {'id': '3', 'number': '0', 'letter': 'd'}, {'id': '25', 'number': '3', 'letter': 'd'}, {'id': '19', 'number': '2', 'letter': 'd'}, {'id': '0', 'number': '0', 'letter': 'a'}, {'id': '28', 'number': '3', 'letter': 'a'}, {'id': '26', 'number': '3', 'letter': 'a'}, {'id': '5', 'number': '0', 'letter': 'a'}, {'id': '9', 'number': '1', 'letter': 'b'}, {'id': '7', 'number': '0', 'letter': 'h'}], 'quartet': 0} drop_cards_help(p)""" ''' players_with_cards = [ {'player': 'player0', 'cards_on_hand': [{'id': 13, 'number': 1, 'letter': 'f'}, {'id': 26, 'number': 3, 'letter': 'c'}, {'id': 22, 'number': 2, 'letter': 'g'}, {'id': 10, 'number': 1, 'letter': 'c'}, {'id': 19, 'number': 2, 'letter': 'd'}, {'id': 31, 'number': 3, 'letter': 'h'}, {'id': 6, 'number': 0, 'letter': 'g'}, {'id': 9, 'number': 1, 'letter': 'b'}, {'id': 5, 'number': 0, 'letter': 'f'}, {'id': 15, 'number': 1, 'letter': 'h'}], 'quartet': 0 }, ...]'''