Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- from riffle import riffle
- from random import shuffle
- def beggar(Nplayers, deck, talkative):
- """
- The beggar function plays a single game of beggar your neighbour
- It takes the arguments:
- Nplayers - the number of players
- deck - the total collection of cards in play
- talkative - a boolean value determining if values are printed each turn
- """
- turns = 0
- players = []
- pile = []
- #Riffle function used from riffle.py - shuffle carried out 9 times
- shuffle(deck)
- #Create a new list for each player within 'players'
- for x in range(Nplayers):
- players.append([])
- playerindex = 0
- #Distribute the cards between the players
- for card in deck:
- players[playerindex].append(card)
- playerindex += 1
- if playerindex > Nplayers-1:
- playerindex = 0
- #Loops while the game is unfinished, takes a new turn in every iteration
- playerindex = 0
- while finished(players) == False:
- player = players[playerindex]
- if len(player) != 0:
- turns += 1
- newplayer, newpile, reward = take_turn(player,pile)
- if len(reward) > 0:
- newpile = pile
- pile = []
- players[playerindex-1] += reward
- #Prints values every turn if 'talkative' is True
- if talkative == True:
- print ("Turn:", turns)
- print ("P :", newpile)
- for x in range(len(players)):
- print (x, ":", players[x])
- print ("")
- playerindex += 1
- if playerindex > Nplayers-1:
- playerindex = 0
- finished(players)
- for player in players:
- if len(player) > 0:
- player += pile
- pile = []
- #Print final values when the game is finished, return number of turns taken
- print ("Final")
- print (turns, "turns taken")
- print ("P :", pile)
- for x in range(len(players)):
- print (x, ":", players[x])
- return turns
- def take_turn(player, pile):
- """
- The take_turn function carries out a single turn of the game
- It takes the arguments:
- player - the list containing the current player's deck of cards
- pile - the list containing the current state of the pile
- """
- reward = []
- count = 0
- while len(player) > 0:
- if len(pile) == 0 or pile[-1] < 11:
- pile.append(player[0])
- player.pop(0)
- return player, pile, reward
- else:
- for p in range(11,15):
- if p == pile[-1]:
- for x in range(p-10):
- try:
- pile.append(player[0])
- player.pop(0)
- if pile[-1] < 11:
- count +=1
- else:
- print (type(player), type(pile), type(reward))
- return player, pile, reward
- except:
- return [], pile, reward
- if count == (p-10):
- reward = pile
- return player, pile, reward
- return player, pile, reward
- def finished(players):
- """
- for x in players:
- if len(x)== 52:
- return True
- return False
- """
- emptycount = 0
- for player in players:
- if len(player) == 0:
- emptycount += 1
- if emptycount == len(players)-1:
- return True
- return False
- if __name__ == "__main__":
- choice = int(input("Enter how many players: "))
- beggar(choice,[2,3,4,5,6,7,8,9,10,11,12,13,14,
- 2,3,4,5,6,7,8,9,10,11,12,13,14,
- 2,3,4,5,6,7,8,9,10,11,12,13,14,
- 2,3,4,5,6,7,8,9,10,11,12,13,14], True)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement