Advertisement
Guest User

Untitled

a guest
Nov 15th, 2018
97
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 3.92 KB | None | 0 0
  1. from riffle import riffle
  2. from random import shuffle
  3. def beggar(Nplayers, deck, talkative):
  4.     """
  5.    The beggar function plays a single game of beggar your neighbour
  6.    
  7.    It takes the arguments:
  8.    Nplayers  - the number of players
  9.    deck      - the total collection of cards in play
  10.    talkative - a boolean value determining if values are printed each turn    
  11.    """
  12.     turns = 0
  13.     players = []
  14.     pile = []
  15.     #Riffle function used from riffle.py - shuffle carried out 9 times
  16.     shuffle(deck)
  17.    
  18.     #Create a new list for each player within 'players'
  19.     for x in range(Nplayers):
  20.         players.append([])
  21.     playerindex = 0
  22.    
  23.    
  24.     #Distribute the cards between the players
  25.     for card in deck:
  26.         players[playerindex].append(card)
  27.         playerindex += 1
  28.         if playerindex > Nplayers-1:
  29.             playerindex = 0
  30.    
  31.    
  32.     #Loops while the game is unfinished, takes a new turn in every iteration
  33.     playerindex = 0
  34.     while finished(players) == False:
  35.         player = players[playerindex]
  36.         if len(player) != 0:
  37.             turns += 1
  38.        
  39.         newplayer, newpile, reward = take_turn(player,pile)
  40.         if len(reward) > 0:
  41.             newpile = pile
  42.             pile = []
  43.        
  44.         players[playerindex-1] += reward
  45.        
  46.         #Prints values every turn if 'talkative' is True
  47.         if talkative == True:
  48.             print ("Turn:", turns)
  49.             print ("P :", newpile)
  50.             for x in range(len(players)):
  51.                 print (x, ":", players[x])
  52.         print ("")
  53.  
  54.         playerindex += 1
  55.         if playerindex > Nplayers-1:
  56.             playerindex = 0
  57.         finished(players)
  58.    
  59.     for player in players:
  60.         if len(player) > 0:
  61.             player += pile
  62.             pile = []
  63.            
  64.     #Print final values when the game is finished, return number of turns taken
  65.     print ("Final")
  66.     print (turns, "turns taken")
  67.     print ("P :", pile)
  68.     for x in range(len(players)):
  69.         print (x, ":", players[x])
  70.     return turns
  71.    
  72. def take_turn(player, pile):
  73.     """
  74.    The take_turn function carries out a single turn of the game
  75.    
  76.    It takes the arguments:
  77.    player - the list containing the current player's deck of cards
  78.    pile   - the list containing the current state of the pile
  79.    """
  80.     reward = []
  81.     count = 0
  82.    
  83.     while len(player) > 0:
  84.         if len(pile) == 0 or pile[-1] < 11:
  85.             pile.append(player[0])
  86.             player.pop(0)
  87.             return player, pile, reward
  88.         else:
  89.             for p in range(11,15):
  90.                 if p == pile[-1]:
  91.                     for x in range(p-10):
  92.                         try:
  93.                             pile.append(player[0])
  94.                             player.pop(0)
  95.                             if pile[-1] < 11:  
  96.                                 count +=1
  97.                             else:
  98.                                 print (type(player), type(pile), type(reward))
  99.                                 return player, pile, reward
  100.                         except:
  101.                             return [], pile, reward
  102.                     if count == (p-10):
  103.                         reward = pile
  104.                     return player, pile, reward
  105.     return player, pile, reward
  106.    
  107.    
  108. def finished(players):
  109.     """
  110.    for x in players:
  111.        if len(x)== 52:
  112.            return True
  113.    return False
  114.    """
  115.     emptycount = 0
  116.     for player in players:
  117.         if len(player) == 0:
  118.             emptycount += 1
  119.     if emptycount == len(players)-1:
  120.         return True
  121.     return False
  122.    
  123. if __name__ == "__main__":
  124.  
  125.     choice = int(input("Enter how many players: "))
  126.     beggar(choice,[2,3,4,5,6,7,8,9,10,11,12,13,14,
  127.                    2,3,4,5,6,7,8,9,10,11,12,13,14,
  128.                    2,3,4,5,6,7,8,9,10,11,12,13,14,
  129.                    2,3,4,5,6,7,8,9,10,11,12,13,14], True)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement