Skip to content

Instantly share code, notes, and snippets.

@gogvale
Last active December 1, 2019 03:01

Revisions

  1. Gabriel Oliveira revised this gist Dec 1, 2019. 1 changed file with 16 additions and 24 deletions.
    40 changes: 16 additions & 24 deletions warGame.py
    Original file line number Diff line number Diff line change
    @@ -14,9 +14,6 @@ def __init__(self, suite: str, rank: str):
    def __str__(self):
    return str(self.suite+self.rank)

    def __del__(self):
    pass

    def value(self):
    return RANKS.index(self.rank)

    @@ -35,6 +32,9 @@ def createDeck(self):
    def shuffleCards(self):
    shuffle(self.cards)

    def splitInHalf(self):
    return self.cards[:26], self.cards[26:]


    class Player:
    def __init__(self, name: str, hand: list):
    @@ -53,26 +53,18 @@ def insertIntoBottom(self, card):
    self.stack = [card] + self.stack[:]

    elif(isinstance(card, list)):
    tmp = self.stack[:]
    self.stack = list()
    for i in card:
    self.stack.append(i)
    self.stack += tmp
    self.stack = card + self.stack

    def drawCard(self):
    print(f"{self} has drawn a card.")
    if(self.cardsLeft == 0):
    print(f"{self} has lost.")
    print("GAME OVER!")
    else:
    if(self.cardsLeft() != 0):
    return self.stack.pop()


    class Game:
    def __init__(self):
    self.deck = Deck()
    firstHalf = self.deck.cards[:26]
    secondHalf = self.deck.cards[26:]
    firstHalf, secondHalf = self.deck.splitInHalf()
    self.PC = Player("PC", firstHalf)
    self.User = Player("User", secondHalf)
    self.isWar = False
    @@ -88,20 +80,23 @@ def gameStart(self):
    self.checkWinner(pc, user)
    if(self.isWar):
    self.war([pc, user])
    self.checkResults()
    self.printResults()

    except IndexError:
    if(self.User.cardsLeft() != 0):
    except Exception:
    if(self.PC.cardsLeft() == 0):
    print(f"{self.PC} has no cards left!")
    print(f"{self.User} wins!")
    else:
    elif(self.User.cardsLeft() == 0):
    print(f"{self.User} has no cards left!")
    print(f"{self.PC} wins!")
    else:
    print("Error")
    self.gameOver = True

    def checkResults(self):
    def printResults(self):
    print(
    f"USER: {self.User.cardsLeft()} ------- PC: {self.PC.cardsLeft()}")
    # time.sleep(1)

    def checkWinner(self, pc, user):
    if(pc.value() > user.value()): # pc gets cards
    @@ -136,11 +131,8 @@ def war(self, cards: list):
    pcSelectedCard = pcDownCards[randint(0, 2)]
    pcDownCards.remove(pcSelectedCard)

    # Selecting user card
    userSelectedCard = -1
    while(userSelectedCard < 0 or userSelectedCard > 2):
    userSelectedCard = int(input("Selecciona una carta (0-2)"))
    userSelectedCard = userDownCards[userSelectedCard]
    # Selecting random user card
    userSelectedCard = userDownCards[randint(0, 2)]
    userDownCards.remove(userSelectedCard)

    # Printing results
  2. Gabriel Oliveira revised this gist Nov 30, 2019. 1 changed file with 1 addition and 1 deletion.
    2 changes: 1 addition & 1 deletion warGame.py
    Original file line number Diff line number Diff line change
    @@ -50,7 +50,7 @@ def cardsLeft(self):
    def insertIntoBottom(self, card):

    if(isinstance(card, Card)):
    self.stack = list(card) + self.stack[:]
    self.stack = [card] + self.stack[:]

    elif(isinstance(card, list)):
    tmp = self.stack[:]
  3. Gabriel Oliveira revised this gist Nov 30, 2019. No changes.
  4. Gabriel Oliveira created this gist Nov 30, 2019.
    176 changes: 176 additions & 0 deletions warGame.py
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,176 @@
    #!/usr/bin/python3
    from random import shuffle, randint
    import time

    SUITE = "H D S C".split()
    RANKS = "2 3 4 5 6 7 8 9 10 J Q K A".split()


    class Card:
    def __init__(self, suite: str, rank: str):
    self.suite = suite
    self.rank = rank

    def __str__(self):
    return str(self.suite+self.rank)

    def __del__(self):
    pass

    def value(self):
    return RANKS.index(self.rank)


    class Deck:
    def __init__(self):
    self.cards = list()
    self.createDeck()
    self.shuffleCards()

    def createDeck(self):
    for i in SUITE:
    for j in RANKS:
    self.cards.append(Card(i, j))

    def shuffleCards(self):
    shuffle(self.cards)


    class Player:
    def __init__(self, name: str, hand: list):
    self.name = name
    self.stack = hand

    def __str__(self):
    return self.name

    def cardsLeft(self):
    return len(self.stack)

    def insertIntoBottom(self, card):

    if(isinstance(card, Card)):
    self.stack = list(card) + self.stack[:]

    elif(isinstance(card, list)):
    tmp = self.stack[:]
    self.stack = list()
    for i in card:
    self.stack.append(i)
    self.stack += tmp

    def drawCard(self):
    print(f"{self} has drawn a card.")
    if(self.cardsLeft == 0):
    print(f"{self} has lost.")
    print("GAME OVER!")
    else:
    return self.stack.pop()


    class Game:
    def __init__(self):
    self.deck = Deck()
    firstHalf = self.deck.cards[:26]
    secondHalf = self.deck.cards[26:]
    self.PC = Player("PC", firstHalf)
    self.User = Player("User", secondHalf)
    self.isWar = False
    self.gameOver = False
    self.gameStart()

    def gameStart(self):
    while(not self.gameOver):
    try:
    pc = self.PC.drawCard()
    user = self.User.drawCard()
    print(f"User card: {user} ------- PC card: {pc}")
    self.checkWinner(pc, user)
    if(self.isWar):
    self.war([pc, user])
    self.checkResults()

    except IndexError:
    if(self.User.cardsLeft() != 0):
    print(f"{self.PC} has no cards left!")
    print(f"{self.User} wins!")
    else:
    print(f"{self.User} has no cards left!")
    print(f"{self.PC} wins!")
    self.gameOver = True

    def checkResults(self):
    print(
    f"USER: {self.User.cardsLeft()} ------- PC: {self.PC.cardsLeft()}")

    def checkWinner(self, pc, user):
    if(pc.value() > user.value()): # pc gets cards
    print("PC wins round")
    self.PC.insertIntoBottom([pc, user])

    elif(user.value() > pc.value()): # user wins
    print("User wins round")
    self.User.insertIntoBottom([pc, user])

    else: # tie
    print("TIE! That means war!")
    self.isWar = True

    def war(self, cards: list):
    pcDownCards = list()
    userDownCards = list()
    usedCards = cards[:]
    totalCards = 0
    for i in range(2):
    pcDownCards.append(self.PC.drawCard())
    userDownCards.append(self.User.drawCard())
    totalCards += 2
    winner = None
    while(winner == None):

    pcDownCards.append(self.PC.drawCard())
    userDownCards.append(self.User.drawCard())
    totalCards += 2

    # Selecting random PC card
    pcSelectedCard = pcDownCards[randint(0, 2)]
    pcDownCards.remove(pcSelectedCard)

    # Selecting user card
    userSelectedCard = -1
    while(userSelectedCard < 0 or userSelectedCard > 2):
    userSelectedCard = int(input("Selecciona una carta (0-2)"))
    userSelectedCard = userDownCards[userSelectedCard]
    userDownCards.remove(userSelectedCard)

    # Printing results
    print(f"User: {userSelectedCard} ---- PC: {pcSelectedCard}")

    # Checking for winners
    if(userSelectedCard.value() > pcSelectedCard.value()):
    print(f"User wins {totalCards} cards")
    winner = "user"
    elif(userSelectedCard.value() < pcSelectedCard.value()):
    print(f"PC wins {totalCards} cards")
    winner = "pc"
    else:
    print("TIE!")
    usedCards.append(pcSelectedCard)
    usedCards.append(userSelectedCard)

    for i in pcDownCards:
    usedCards.append(i)
    for i in userDownCards:
    usedCards.append(i)

    shuffle(usedCards)

    if(winner == "user"):
    self.User.insertIntoBottom(usedCards)
    elif(winner == "pc"):
    self.PC.insertIntoBottom(usedCards)
    self.isWar = False


    if __name__ == '__main__':
    game = Game()