Amorf

Untitled

Jun 2nd, 2022
83
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 6.51 KB | None | 0 0
  1. import time
  2.  
  3. from Player import Player
  4. from Cards import DeckCreator
  5.  
  6.  
  7. class Blackjack:
  8.     blackjack = 21
  9.     minDeckSize = 7
  10.     deck = []
  11.     playersActive = []
  12.  
  13.     def __init__(self, players, decks):
  14.         self.players = players
  15.         for player in self.players:
  16.             self.playersActive.append(player)
  17.         self.active_player_index = 0
  18.         self.dealer = Player("Dealer")
  19.         dc = DeckCreator()
  20.         self.deck = dc.merge_decks(decks)
  21.  
  22.     def broadcast(self, message):
  23.         print(message)
  24.         for player in self.playersActive:
  25.             player.connection.sendall(message)
  26.  
  27.     def broadcastplayer(self, player, message):
  28.         print(message)
  29.         player.connection.sendall(message)
  30.  
  31.     def broadcastAll(self, message):
  32.         print(message)
  33.         for player in self.players:
  34.             player.connection.sendall(message)
  35.         if message != "end".encode():
  36.             for player in self.players:
  37.                 player.connection.recv(1024)
  38.  
  39.     def outputInformation(self, message, player):
  40.         player.connection.send(message)
  41.         player.connection.recv(1024)
  42.  
  43.     def active_player(self):
  44.         return self.playersActive[self.active_player_index]
  45.  
  46.     def next_player(self):
  47.         if self.active_player_index == len(self.playersActive) - 1:
  48.             self.active_player_index = 0
  49.         else:
  50.             self.active_player_index += 1
  51.  
  52.     def play(self):
  53.         while len(self.players) != 0:
  54.             if len(self.deck) > self.minDeckSize:
  55.                 indexPlayer = 0
  56.                 while indexPlayer != len(self.players):
  57.                     answer = self.players[indexPlayer].connection.recv(1024)
  58.                     if answer.decode() == "exit":
  59.                         self.players.remove(self.players[indexPlayer])
  60.                         self.playersActive = []
  61.                         for player in self.players:
  62.                             self.playersActive.append(player)
  63.                         if len(self.playersActive) == 0:
  64.                             quit()
  65.                     else:
  66.                         answer = ""
  67.                         indexPlayer += 1
  68.                         self.playersActive = []
  69.                         for player in self.players:
  70.                             self.playersActive.append(player)
  71.                 self.__play_round()
  72.                 for player in self.players:
  73.                     player.reset_hand()
  74.                 self.dealer.reset_hand()
  75.                 self.__show_statistics()
  76.             else:
  77.                 self.broadcastAll(str.encode("exit"))
  78.                 quit()
  79.  
  80.     def __play_round(self):
  81.         message = (self.dealer.draw_card(self.deck) + "\n").encode()
  82.         self.broadcast(message)
  83.         for player in self.players:
  84.             self.outputInformation((player.draw_card(self.deck) + "\n").encode(), player)
  85.             self.outputInformation((player.draw_card(self.deck) + "\n").encode(), player)
  86.             self.outputInformation("point".encode(), player)
  87.             self.outputInformation(player.show_hand(), player)
  88.             self.outputInformation(("end".encode()), player)
  89.         self.__players_turn()
  90.         if self.__is_round_not_over_after_players_turn():
  91.             self.__dealer_turn()
  92.         self.__round_results()
  93.  
  94.     def __players_turn(self):
  95.         while self.active_player().points < self.blackjack:
  96.             self.active_player().connection.sendall(str.encode("y/n"))
  97.             data = self.active_player().connection.recv(1024)
  98.             answer = data.decode('utf-8')
  99.             if answer == "n":
  100.                 self.playersActive.remove(self.active_player())
  101.                 if len(self.playersActive) == 0:
  102.                     break
  103.                 else:
  104.                     self.next_player()
  105.             else:
  106.                 self.outputInformation(self.active_player().draw_card(self.deck).encode(), self.active_player())
  107.                 self.outputInformation("point".encode(), self.active_player())
  108.                 self.outputInformation(self.active_player().show_hand(), self.active_player())
  109.                 if self.active_player().points < self.blackjack:
  110.                     self.active_player().connection.send(str.encode("end"))
  111.                 self.next_player()
  112.  
  113.     def __dealer_turn(self):
  114.         while self.dealer.points < 16:
  115.             message = self.dealer.draw_card(self.deck).encode()
  116.             self.broadcastAll(message)
  117.             message = self.dealer.show_hand()
  118.             self.broadcastAll("point_dealer".encode())
  119.             self.broadcastAll(message)
  120.  
  121.     def __is_round_not_over_after_players_turn(self):
  122.         check = True
  123.         for player in self.players:
  124.             if player.points >= self.blackjack:
  125.                 check = False
  126.         return check
  127.  
  128.     def __round_results(self):
  129.         string = ""
  130.         for player in self.players:
  131.             if player.points == self.blackjack:
  132.                 player.add_victory()
  133.                 string += (str(player.name) + " got blackjack! " + str(player.name) + " is a winner!")
  134.             elif self.dealer.points == self.blackjack:
  135.                 self.dealer.add_victory()
  136.                 string = "Dealer got blackjack! Dealer won!"
  137.             elif player.points > self.blackjack:
  138.                 self.dealer.add_victory()
  139.                 string += (str(player.name) + " got too much points! Dealer won!")
  140.             elif self.dealer.points > self.blackjack:
  141.                 player.add_victory()
  142.                 string += ("Dealer got too much points! " + str(player.name) + " won!")
  143.             elif (player.points > self.dealer.points) and (player.points < self.blackjack):
  144.                 player.add_victory()
  145.                 string += ("You got more points than dealer! " + str(player.name) + " won!")
  146.             elif (self.dealer.points > player.points) and (self.dealer.points < self.blackjack):
  147.                 self.dealer.add_victory()
  148.                 string += "Dealer got more points than you! Dealer won!"
  149.             else:
  150.                 string = "Push!"
  151.         self.broadcastAll(str.encode("results"))
  152.         self.broadcastAll(str.encode(string))
  153.  
  154.     def __show_statistics(self):
  155.         message = ""
  156.         for player in self.players:
  157.             message += (str(player.get_name()) + " : " + str(player.get_victories()))
  158.         message += (" Dealer: " + str(self.dealer.get_victories()) + "\n")
  159.         self.broadcastAll(message.encode())
  160.         self.broadcastAll(str.encode("end"))
Add Comment
Please, Sign In to add comment