From 03848155b9c06ae4d24e91298873bb7d118ddb44 Mon Sep 17 00:00:00 2001 From: Harivansh Thakur Date: Sat, 14 May 2022 17:53:17 +0530 Subject: [PATCH] Added some cli board games --- BoardGame-CLI/snakeLadder.py | 168 +++++++++++++++++++++++++++++++ BoardGame-CLI/uno.py | 186 +++++++++++++++++++++++++++++++++++ 2 files changed, 354 insertions(+) create mode 100644 BoardGame-CLI/snakeLadder.py create mode 100644 BoardGame-CLI/uno.py diff --git a/BoardGame-CLI/snakeLadder.py b/BoardGame-CLI/snakeLadder.py new file mode 100644 index 00000000000..956f690d4be --- /dev/null +++ b/BoardGame-CLI/snakeLadder.py @@ -0,0 +1,168 @@ +import random + +# Taking players data +players = {} # stores players name their locations +isReady = {} +current_loc = 1 # vaiable for iterating location + +imp = True + + +# players input function +def player_input(): + global players + global current_loc + global isReady + + y = True + while y: + player_num = int(input("Enter the number of players: ")) + if player_num > 0: + for i in range(player_num): + name = input(f"Enter player {i+1} name: ") + players[name] = current_loc + isReady[name] = False + y = False + play() # play funtion call + + else: + print("Number of player cannot be zero") + print() + + +# Dice roll method +def roll(): + # print(players) + return random.randrange(1, 7) + + +# play method +def play(): + global players + global isReady + global imp + + while imp: + print("/"*20) + print("1 -> roll the dice (or enter)") + print("2 -> start new game") + print("3 -> exit the game") + print("/"*20) + + for i in players: + n = input("{}'s turn: ".format(i)) or 1 + n = int(n) + + if players[i] < 100: + if n == 1: + temp1 = roll() + print(f"you got {temp1}") + print("") + + if isReady[i] == False and temp1 == 6: + isReady[i] = True + + if isReady[i]: + looproll = temp1 + while looproll == 6: + looproll = roll() + temp1 += looproll + print(f"you got {looproll} ") + print("") + # print(temp1) + if (players[i] + temp1) > 100: + pass + elif (players[i] + temp1) < 100: + players[i] += temp1 + players[i] = move(players[i], i) + elif (players[i] + temp1) == 100: + print(f"congrats {i} you won !!!") + imp = False + return + + print(f"you are at position {players[i]}") + + elif n == 2: + players = {} # stores player ans their locations + isReady = {} + current_loc = 0 # vaiable for iterating location + player_input() + + elif n == 3: + print("Bye Bye") + imp = False + + else: + print("pls enter a valid input") + + +# Move method +def move(a, i): + global players + global imp + temp_loc = players[i] + + if (temp_loc) < 100: + temp_loc = ladder(temp_loc, i) + temp_loc = snake(temp_loc, i) + + return temp_loc + + +# snake bite code +def snake(c, i): + if (c == 32): + players[i] = 10 + elif (c == 36): + players[i] = 6 + elif (c == 48): + players[i] = 26 + elif (c == 63): + players[i] = 18 + elif (c == 88): + players[i] = 24 + elif (c == 95): + players[i] = 56 + elif (c == 97): + players[i] = 78 + else: + return players[i] + print(f"You got bitten by a snake now you are at {players[i]}") + + return players[i] + + +# ladder code +def ladder(a, i): + global players + + if (a == 4): + players[i] = 14 + elif (a == 8): + players[i] = 30 + elif (a == 20): + players[i] = 38 + elif (a == 40): + players[i] = 42 + elif (a == 28): + players[i] = 76 + elif (a == 50): + players[i] = 67 + elif (a == 71): + players[i] = 92 + elif (a == 88): + players[i] = 99 + else: + return players[i] + print(f"You got a ladder now you are at {players[i]}") + + return players[i] + + +# while run: +print("/"*40) +print("Welcome to the snake ladder game !!!!!!!") +print("/"*40) + + +player_input() diff --git a/BoardGame-CLI/uno.py b/BoardGame-CLI/uno.py new file mode 100644 index 00000000000..4f36372a5f8 --- /dev/null +++ b/BoardGame-CLI/uno.py @@ -0,0 +1,186 @@ +# uno game # + +import random +""" +Generate the UNO deck of 108 cards. +Parameters: None +Return values: deck=>list +""" + + +def buildDeck(): + deck = [] + # example card:Red 7,Green 8, Blue skip + colours = ["Red", "Green", "Yellow", "Blue"] + values = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, "Draw Two", "Skip", "Reverse"] + wilds = ["Wild", "Wild Draw Four"] + for colour in colours: + for value in values: + cardVal = "{} {}".format(colour, value) + deck.append(cardVal) + if value != 0: + deck.append(cardVal) + for i in range(4): + deck.append(wilds[0]) + deck.append(wilds[1]) + print(deck) + return deck + + +""" +Shuffles a list of items passed into it +Parameters: deck=>list +Return values: deck=>list +""" + + +def shuffleDeck(deck): + for cardPos in range(len(deck)): + randPos = random.randint(0, 107) + deck[cardPos], deck[randPos] = deck[randPos], deck[cardPos] + return deck + + +"""Draw card function that draws a specified number of cards off the top of the deck +Parameters: numCards -> integer +Return: cardsDrawn -> list +""" + + +def drawCards(numCards): + cardsDrawn = [] + for x in range(numCards): + cardsDrawn.append(unoDeck.pop(0)) + return cardsDrawn + + +""" +Print formatted list of player's hand +Parameter: player->integer , playerHand->list +Return: None +""" + + +def showHand(player, playerHand): + print("Player {}'s Turn".format(players_name[player])) + print("Your Hand") + print("------------------") + y = 1 + for card in playerHand: + print("{}) {}".format(y, card)) + y += 1 + print("") + + +""" +Check whether a player is able to play a card, or not +Parameters: discardCard->string,value->string, playerHand->list +Return: boolean +""" + + +def canPlay(colour, value, playerHand): + for card in playerHand: + if "Wild" in card: + return True + elif colour in card or value in card: + return True + return False + + +unoDeck = buildDeck() +unoDeck = shuffleDeck(unoDeck) +unoDeck = shuffleDeck(unoDeck) +discards = [] + +players_name = [] +players = [] +colours = ["Red", "Green", "Yellow", "Blue"] +numPlayers = int(input("How many players?")) +while numPlayers < 2 or numPlayers > 4: + numPlayers = int( + input("Invalid. Please enter a number between 2-4.\nHow many players?")) +for player in range(numPlayers): + players_name.append(input("Enter player {} name: ".format(player+1))) + players.append(drawCards(5)) + + +playerTurn = 0 +playDirection = 1 +playing = True +discards.append(unoDeck.pop(0)) +splitCard = discards[0].split(" ", 1) +currentColour = splitCard[0] +if currentColour != "Wild": + cardVal = splitCard[1] +else: + cardVal = "Any" + +while playing: + showHand(playerTurn, players[playerTurn]) + print("Card on top of discard pile: {}".format(discards[-1])) + if canPlay(currentColour, cardVal, players[playerTurn]): + cardChosen = int(input("Which card do you want to play?")) + while not canPlay(currentColour, cardVal, [players[playerTurn][cardChosen-1]]): + cardChosen = int( + input("Not a valid card. Which card do you want to play?")) + print("You played {}".format(players[playerTurn][cardChosen-1])) + discards.append(players[playerTurn].pop(cardChosen-1)) + + # cheak if player won + if len(players[playerTurn]) == 0: + playing = False + # winner = "Player {}".format(playerTurn+1) + winner = players_name[playerTurn] + else: + # cheak for special cards + splitCard = discards[-1].split(" ", 1) + currentColour = splitCard[0] + if len(splitCard) == 1: + cardVal = "Any" + else: + cardVal = splitCard[1] + if currentColour == "Wild": + for x in range(len(colours)): + print("{}) {}".format(x+1, colours[x])) + newColour = int( + input("What colour would you like to choose? ")) + while newColour < 1 or newColour > 4: + newColour = int( + input("Invalid option. What colour would you like to choose")) + currentColour = colours[newColour-1] + if cardVal == "Reverse": + playDirection = playDirection * -1 + elif cardVal == "Skip": + playerTurn += playDirection + if playerTurn >= numPlayers: + playerTurn = 0 + elif playerTurn < 0: + playerTurn = numPlayers-1 + elif cardVal == "Draw Two": + playerDraw = playerTurn+playDirection + if playerDraw == numPlayers: + playerDraw = 0 + elif playerDraw < 0: + playerDraw = numPlayers-1 + players[playerDraw].extend(drawCards(2)) + elif cardVal == "Draw Four": + playerDraw = playerTurn+playDirection + if playerDraw == numPlayers: + playerDraw = 0 + elif playerDraw < 0: + playerDraw = numPlayers-1 + players[playerDraw].extend(drawCards(4)) + print("") + else: + print("You can't play. You have to draw a card.") + players[playerTurn].extend(drawCards(1)) + + playerTurn += playDirection + if playerTurn >= numPlayers: + playerTurn = 0 + elif playerTurn < 0: + playerTurn = numPlayers-1 + +print("Game Over") +print("{} is the Winner!".format(winner))