Last active
December 1, 2019 03:01
Revisions
-
Gabriel Oliveira revised this gist
Dec 1, 2019 . 1 changed file with 16 additions and 24 deletions.There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode charactersOriginal 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 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)): self.stack = card + self.stack def drawCard(self): print(f"{self} has drawn a card.") if(self.cardsLeft() != 0): return self.stack.pop() class Game: def __init__(self): self.deck = Deck() 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.printResults() except Exception: if(self.PC.cardsLeft() == 0): print(f"{self.PC} has no cards left!") print(f"{self.User} wins!") 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 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 random user card userSelectedCard = userDownCards[randint(0, 2)] userDownCards.remove(userSelectedCard) # Printing results -
Gabriel Oliveira revised this gist
Nov 30, 2019 . 1 changed file with 1 addition and 1 deletion.There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode charactersOriginal 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 = [card] + self.stack[:] elif(isinstance(card, list)): tmp = self.stack[:] -
Gabriel Oliveira revised this gist
Nov 30, 2019 . No changes.There are no files selected for viewing
-
Gabriel Oliveira created this gist
Nov 30, 2019 .There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode charactersOriginal 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()