Facebook
From spell, 1 Week ago, written in Python.
Embed
Download Paste or View Raw
Hits: 62
  1. import random
  2. import time
  3.  
  4.  
  5. color = ('CZERWONY','ZIELONY','NIEBIESKI','ŻÓŁTY')
  6. rank = ('0','1','2','3','4','5','6','7','8','9','Pominięcie','Odwrócenie','Dobierz +2','Dobierz +4','Dzika')
  7. ctype = {'0':'number','1':'number','2':'number','3':'number','4':'number','5':'number','6':'number',
  8.             '7':'number','8':'number','9':'number','Pominięcie':'action','Odwrócenie':'action','Dobierz +2':'action',
  9.             'Dobierz +4':'action_nocolor','Dzika':'action_nocolor'}
  10.  
  11. class Card:
  12.     #inicjacja kart na podstawie wartości ze słowników
  13.     def __init__(self, color, rank):
  14.         self.rank = rank
  15.         if ctype[rank] == 'number':
  16.             self.color = color
  17.             self.cardtype = 'number'
  18.         elif ctype[rank] == 'action':
  19.             self.color = color
  20.             self.cardtype = 'action'
  21.         else:
  22.             self.color = None
  23.             self.cardtype = 'action_nocolor'
  24. `   #zwrócenie opisu karty w formie tekstu
  25.     def __str__(self):
  26.         if self.color == None:
  27.             return self.rank
  28.         else:
  29.             return self.color + " " + self.rank
  30.  
  31.  
  32. class Deck:
  33.     #inicjowanie nowej talii kart
  34.     def __init__(self):
  35.         self.deck = []
  36.         for clr in color:
  37.             for ran in rank:
  38.                 if ctype[ran] != 'action_nocolor':
  39.                     self.deck.append(Card(clr, ran))
  40.                     self.deck.append(Card(clr, ran))
  41.                 else:
  42.                     self.deck.append(Card(clr, ran))
  43.     #zwrócenie talii kart na stół
  44.     def __str__(self):
  45.         deck_comp = ''
  46.         for card in self.deck:
  47.             deck_comp += '\n' + card.__str__()
  48.         return 'Na stole są ' + deck_comp
  49.    
  50.     #tasowanie kart
  51.     def shuffle(self):
  52.         random.shuffle(self.deck)
  53.        
  54.     #rozdanie kart
  55.     def deal(self):
  56.         return self.deck.pop()
  57.  
  58.  
  59. class Hand:
  60.     #inicjacja nowej ręki gracza przechowującą karty
  61.     def __init__(self):
  62.         self.cards = []
  63.         self.cardsstr = []
  64.         self.number_cards = 0
  65.         self.action_cards = 0
  66.  
  67.     #dodawanie karti do ręki gracza
  68.     def add_card(self, card):
  69.         self.cards.append(card)
  70.         self.cardsstr.append(str(card))
  71.         if card.cardtype == 'number':
  72.             self.number_cards += 1
  73.         else:
  74.             self.action_cards += 1
  75.     #usowanie karty z ręki  graca
  76.     def remove_card(self, place):
  77.         self.cardsstr.pop(place - 1)
  78.         return self.cards.pop(place - 1)
  79.  
  80.     #wyświetlenie wszystkich kart w ręce
  81.     def cards_in_hand(self):
  82.         for i in range(len(self.cardsstr)):
  83.             print(f' {i + 1}.{self.cardsstr[i]}')
  84.  
  85.     #zwraca określoną kartę z ręki gracza
  86.     def single_card(self, place):
  87.         return self.cards[place - 1]
  88.  
  89.     #zwracanie liczby kart w ręce gracza
  90.     def no_of_cards(self):
  91.         return len(self.cards)
  92.  
  93.  
  94. #wybór gracza który zaczyna
  95. def choose_first():
  96.     if random.randint(0,1)==0:
  97.         return player_nick
  98.     else:
  99.         return 'Pc'
  100.  
  101.  
  102. #sprawdzenie karty gracza z kartą na stole
  103. def single_card_check(top_card,card):
  104.     if card.color==top_card.color or top_card.rank==card.rank or card.cardtype=='action_nocolor':
  105.         return True
  106.     else:
  107.         return False
  108.  
  109.  
  110. #PC
  111. #sprawdzene czy karta pc jest wlasciwa
  112. def full_hand_check(hand,top_card):
  113.     for c in hand.cards:
  114.         if c.color==top_card.color or c.rank == top_card.rank or c.cardtype=='action_nocolor':
  115.             return hand.remove_card(hand.cardsstr.index(str(c))+1)
  116.     else:
  117.         return 'no card'
  118.  
  119.  
  120. #sprawdzenie kto wygral
  121. def win_check(hand):
  122.     if len(hand.cards)==0:
  123.         return True
  124.     else:
  125.         return False
  126.  
  127.  
  128. #sprafdzenie ostatnie jkarty
  129. def last_card_check(hand):
  130.     for c in hand.cards:
  131.         if c.cardtype!='number':
  132.             return True
  133.         else:
  134.             return False
  135.  
  136.  
  137. #Pętla gry
  138. while True:
  139.  
  140.     player_nick = input("Podaj swój nick: ")
  141.    
  142.     print(player_nick, 'Witaj w UNO! Pozbądź się wszystkich kart aby wygrać')
  143.  
  144.     deck = Deck()
  145.     deck.shuffle()
  146.  
  147.     player_hand = Hand()
  148.     for i in range(7):
  149.         player_hand.add_card(deck.deal())
  150.  
  151.     pc_hand = Hand()
  152.     for i in range(7):
  153.         pc_hand.add_card(deck.deal())
  154.  
  155.     top_card = deck.deal()
  156.     if top_card.cardtype != 'number':
  157.         while top_card.cardtype != 'number':
  158.             top_card = deck.deal()
  159.     print('\nZaczynająca karta to {}'.format(top_card))
  160.     time.sleep(1)
  161.     playing = True
  162.  
  163.     turn = choose_first()
  164.     print(turn + ' zaczyna')
  165.  
  166.     while playing:
  167.  
  168.         if turn == player_nick:
  169.             print('\nKarta na górze to: ' + str(top_card))
  170.             print('Twoje karty: ')
  171.             player_hand.cards_in_hand()
  172.             if player_hand.no_of_cards() == 1:
  173.                 if last_card_check(player_hand):
  174.                     print('Ostatnia karta nie może być kartą akcji \nDostajesz jedną karte ze stołu')
  175.                     player_hand.add_card(deck.deal())
  176.                     print('Twoje karty: ')
  177.                     player_hand.cards_in_hand()
  178.             choice = input("\nRzuć lub dobierz kartę? (r/d): ")
  179.             if choice == 'r':
  180.                 pos = int(input('Podaj numer karty: '))
  181.                 temp_card = player_hand.single_card(pos)
  182.                 if single_card_check(top_card, temp_card):
  183.                     if temp_card.cardtype == 'number':
  184.                         top_card = player_hand.remove_card(pos)
  185.                         turn = 'Pc'
  186.                     else:
  187.                         if temp_card.rank == 'Pominięcie':
  188.                             turn = player_nick
  189.                             top_card = player_hand.remove_card(pos)
  190.                         elif temp_card.rank == 'Odwrócenie':
  191.                             turn = player_nick
  192.                             top_card = player_hand.remove_card(pos)
  193.                         elif temp_card.rank == 'Dobierz +2':
  194.                             pc_hand.add_card(deck.deal())
  195.                             pc_hand.add_card(deck.deal())
  196.                             top_card = player_hand.remove_card(pos)
  197.                             turn = player_nick
  198.                         elif temp_card.rank == 'Dobierz +4':
  199.                             for i in range(4):
  200.                                 pc_hand.add_card(deck.deal())
  201.                             top_card = player_hand.remove_card(pos)
  202.                             draw4color = input('Zmień kolor na (dużymi literami): ')
  203.                             if draw4color != draw4color.upper():
  204.                                 draw4color = draw4color.upper()
  205.                             top_card.color = draw4color
  206.                             turn = player_nick
  207.                         elif temp_card.rank == 'Dzika':
  208.                             top_card = player_hand.remove_card(pos)
  209.                             wildcolor = input('Zmień kolor na (dużymi literami): ')
  210.                             if wildcolor != wildcolor.upper():
  211.                                 wildcolor = wildcolor.upper()
  212.                             top_card.color = wildcolor
  213.                             turn = 'Pc'
  214.                 else:
  215.                     print('Ta karta nie może być użyta')
  216.             elif choice == 'd':
  217.                 temp_card = deck.deal()
  218.                 print('Masz: ' + str(temp_card))
  219.                 time.sleep(1)
  220.                 if single_card_check(top_card, temp_card):
  221.                     player_hand.add_card(temp_card)
  222.                 else:
  223.                     print('Nie możesz użyć tej karty')
  224.                     player_hand.add_card(temp_card)
  225.                     turn = 'Pc'
  226.             if win_check(player_hand):
  227.                 print('\n',player_nick,'Wygrał/a!!')
  228.                 playing = False
  229.                 break
  230.  
  231.         if turn == 'Pc':
  232.             if pc_hand.no_of_cards() == 1:
  233.                 if last_card_check(pc_hand):
  234.                     time.sleep(1)
  235.                     print('Dobieranie karty dla PC')
  236.                     pc_hand.add_card(deck.deal())
  237.             temp_card = full_hand_check(pc_hand, top_card)
  238.             time.sleep(1)
  239.             if temp_card != 'no card':
  240.                 print(f'\nPC zrzuca się z: {temp_card}')
  241.                 time.sleep(1)
  242.                 if temp_card.cardtype == 'number':
  243.                     top_card = temp_card
  244.                     turn = player_nick
  245.                 else:
  246.                     if temp_card.rank == 'Pominięcie':
  247.                         turn = 'Pc'
  248.                         top_card = temp_card
  249.                     elif temp_card.rank == 'Odwrócnie':
  250.                         turn = 'Pc'
  251.                         top_card = temp_card
  252.                     elif temp_card.rank == 'Dobierz +2':
  253.                         player_hand.add_card(deck.deal())
  254.                         player_hand.add_card(deck.deal())
  255.                         top_card = temp_card
  256.                         turn = 'Pc'
  257.                     elif temp_card.rank == 'Dobierz +4':
  258.                         for i in range(4):
  259.                             player_hand.add_card(deck.deal())
  260.                         top_card = temp_card
  261.                         draw4color = pc_hand.cards[0].color
  262.                         print('Kolor zmieniony na', draw4color)
  263.                         top_card.color = draw4color
  264.                         turn = 'Pc'
  265.                     elif temp_card.rank == 'Dzika':
  266.                         top_card = temp_card
  267.                         wildcolor = pc_hand.cards[0].color
  268.                         print("Kolor zmieniony na", wildcolor)
  269.                         top_card.color = wildcolor
  270.                         turn = player_nick
  271.             else:
  272.                 print('\nPC dobiera karte ze stołu')
  273.                 time.sleep(1)
  274.                 temp_card = deck.deal()
  275.                 if single_card_check(top_card, temp_card):
  276.                     print(f'PC zrzuca się z: {temp_card}')
  277.                     time.sleep(1)
  278.                     if temp_card.cardtype == 'number':
  279.                         top_card = temp_card
  280.                         turn = player_nick
  281.                     else:
  282.                         if temp_card.rank == 'Pominięcie':
  283.                             turn = 'Pc'
  284.                             top_card = temp_card
  285.                         elif temp_card.rank == 'Odwrócenie':
  286.                             turn = 'Pc'
  287.                             top_card = temp_card
  288.                         elif temp_card.rank == 'Dobierz +2':
  289.                             player_hand.add_card(deck.deal())
  290.                             player_hand.add_card(deck.deal())
  291.                             top_card = temp_card
  292.                             turn = 'Pc'
  293.                         elif temp_card.rank == 'Dobierz +4':
  294.                             for i in range(4):
  295.                                 player_hand.add_card(deck.deal())
  296.                             top_card = temp_card
  297.                             draw4color = pc_hand.cards[0].color
  298.                             print('Kolor zmienia się na', draw4color)
  299.                             top_card.color = draw4color
  300.                             turn = 'Pc'
  301.                         elif temp_card.rank == 'Dzika':
  302.                             top_card = temp_card
  303.                             wildcolor = pc_hand.cards[0].color
  304.                             print('Kolor zmienia się na', wildcolor)
  305.                             top_card.color = wildcolor
  306.                             turn = player_nick
  307.                 else:
  308.                     print('PC nie ma pasującej karty')
  309.                     time.sleep(1)
  310.                     pc_hand.add_card(temp_card)
  311.                     turn = player_nick
  312.             print('\nPC zostało {} kart'.format(pc_hand.no_of_cards()))
  313.             time.sleep(1)
  314.             if win_check(pc_hand):
  315.                 print('\nPC WYGRAŁ!!')
  316.                 playing = False
  317.  
  318.     new_game = input('Chesz zagrać jeszcze raz? (t/n)')
  319.     if new_game == 't':
  320.         continue
  321.     else:
  322.         print('\nThanks for playing!!')
  323.         break
  324.