How can I make this "War" card game code more visibly pleasing?
import random
import sys
class Card:
def __init__(self, rank, suit, value):
self.rank = rank
self.suit = suit
self.value = value
self.name = str(self.rank) + " of " + self.suit
class War:
def wincards(self, winner, deck):
i = 0
n = len(deck)
while i < n:
winner.append(deck[0])
deck.remove(deck[0])
i = i + 1
def playcards(self, player1, player2, deck):
if random.randint(1,2) == 1:
deck.append(player2[0])
deck.append(player1[0])
else:
deck.append(player1[0])
deck.append(player2[0])
def comparecards(self, deck):
if deck[0] > deck[1]:
return 0
if deck[0] < deck[1]:
return 2
if deck[0] == deck[1]:
return 1
def create_deck(self):
suit = ['Spades', 'Hearts', 'Clubs', 'Diamonds']
rank = ['2', '3', '4', '5', '6', '7', '8', '9', '10', 'Jack', 'Queen', 'King', 'Ace']
deck = []
num = 2
for i in suit:
for x in rank:
deck.append(Card(x, i, num))
num = num + 1
num = 2
return sorted(deck, key=lambda k: random.random())
def deal_cards(self, deck):
x = 0
i = 0
player1 = []
player2 = []
while i < len(deck):
if x == 0:
player1.append(deck[i])
x = 1
else:
player2.append(deck[i])
x = 0
i += 1
return player1, player2
def game(self):
pl1wins = 0
pl2wins = 0
turnspl1 = []
turnspl2 = []
while (pl1wins + pl2wins) < 100:
deck = self.create_deck()
players = self.deal_cards(deck)
player1 = players[0]
player2 = players[1]
player1 = sorted(player1, key=lambda card: card.value, reverse = True)
war = []
turns = 0
while len(player1) > 0 and len(player2) > 0:
turns = turns + 1
if (len(player1) + len(player2)) > 52:
print "Oh NO!"
sys.exit()
war = []
self.playcards(player1, player2, war)
player1.remove(player1[0])
player2.remove(player2[0])
result = self.comparecards(war)
if result == 0:
warGame.wincards(player1, war)
elif result == 2:
warGame.wincards(player2, war)
elif result == 1:
if len(player1) == 0:
player1.append(war[0])
war.remove(war[0])
if player1[0].value == player2[0].value:
player1[0].value = 0
if len(player2) == 0:
player2.append(war[1])
war.remove(war[1])
if player1[0].value == player2[0].value:
player2[0].value = 0
while len(war) > 0:
i = 0
for i in range(3):
if len(player1) > 1:
war.append(player1[0])
player1.remove(player1[0])
if len(player2) > 1:
war.append(player2[0])
player2.remove(player2[0])
if player1[0].value > player2[0].value:
self.playcards(player1, player2, war)
self.wincards(player1, war)
elif player1[0].value < player2[0].value:
self.playcards(player1, player2, war)
self.wincards(player2, war)
if len(player1) != 0:
pl1wins = pl1wins + 1
turnspl1.append(turns)
elif len(player2) != 0:
pl2wins = pl2wins + 1
turnspl2.append(turns)
print str(pl1wins) + " versus " + str(pl2wins)
print str(average(turnspl1)) + " versus " + str(average(turnspl2))
print str(average(turnspl1 + turnspl2))
def average(array):
a = 0
for i in array:
a = a + i
average = a/len(array)
return average
warGame = War()
warGame.game()