================================================================================
war_game_3.py
================================================================================
from random import randint, seed
from time import time
# region: change
from window import *
from cards import *
card_list = [card_0, card_1, card_2, card_3, card_4, card_5, card_6, card_7, card_8, card_9]
# endregion
def game():
print 'Welcome to WAR V3!'
print
asking = True
while asking:
try:
players = int(raw_input('How many players are there? '))
if players < 2:
print 'There must be at least two players.'
else:
asking = False
except:
print 'You must enter a number.'
print
names = []
# region: change
longest_name = 0
for name in range(players):
names.append(raw_input('What is the name of player ' + str(name + 1) + '? '))
if len(names[-1]) > longest_name:
longest_name = len(names[-1])
# endregion
deck = []
for card in range(10):
for player in range(players):
deck.append(card)
hands = []
seed(time())
for player in range(players):
hand = ([], [])
for card in range(10):
index = randint(0, len(deck) - 1)
hand[0].append(deck[index])
del deck[index]
hand[0].sort()
hands.append(hand)
for round in range(1, 11):
table = []
will_play = []
high_card = 0
for player in range(players):
will_play.append(player)
for turn in range(players):
for line in range(50):
print
index = randint(0, len(will_play) - 1)
now_play = will_play[index]
del will_play[index]
print 'Round', round
raw_input('It is ' + names[now_play] + "'s turn to play.")
print
# region: change
if len(table) == 0:
print 'There are no cards on the table.\n'
else:
table_window = window_v1(len(table) * 6, longest_name + 13)
for card in range(len(table)):
name_page = page_v1(1, len(names[table[card][0]]) + 9)
name_page.mutate(0, 0, names[table[card][0]] + ' played')
table_window.append(name_page, [card * 6, 0])
table_window.append(card_list[table[card][1]], [card * 6, len(names[table[card][0]]) + 8])
print table_window
print 'These are your playing cards:'
playing_window = window_v1(7, len(hands[now_play][0]) * 6)
for index in range(len(hands[now_play][0])):
playing_window.append(card_list[hands[now_play][0][index]], [1, index * 6 + 1])
print playing_window
if len(hands[now_play][1]) > 0:
hands[now_play][1].sort()
print 'These are your captured cards:'
capture_window = window_v1(7, len(hands[now_play][1]) * 6)
for index in range(len(hands[now_play][1])):
capture_window.append(card_list[hands[now_play][1][index]], [1, index * 6 + 1])
print capture_window
# endregion
asking = True
while asking:
try:
card = int(raw_input('What card do you want to play? '))
if card >= 0 and card <= 9:
try:
hands[now_play][0].remove(card)
table.append((now_play, card))
if card > high_card:
high_card = card
asking = False
except:
print 'You do not have that card.'
else:
print 'You must enter a value between -1 and 10.'
except:
print 'You must enter a number.'
for line in range(50):
print
#region: change
table_window = window_v1(len(table) * 6, longest_name + 13)
for card in range(len(table)):
name_page = page_v1(1, len(names[table[card][0]]) + 9)
name_page.mutate(0, 0, names[table[card][0]] + ' played')
table_window.append(name_page, [card * 6, 0])
table_window.append(card_list[table[card][1]], [card * 6, len(names[table[card][0]]) + 8])
print table_window
# endregion
hand_out = []
for index in range(players):
if table[index][1] == high_card:
hand_out.append(table[index][0])
while len(table) > 0:
hands[hand_out[randint(0, len(hand_out) - 1)]][1].append(table[0][1])
del table[0]
for player in range(players):
if len(hands[player][1]) > 0:
print names[player] + ' has captured ' + str(len(hands[player][1])) + ' cards.'
print
raw_input('End Of Round ' + str(round))
for line in range(50):
print
high_score = 0
scores = []
for player in range(players):
total = 0
for card in range(len(hands[player][1])):
total += hands[player][1][card]
if total > high_score:
high_score = total
if len(scores) == 0 or scores[len(scores) - 1][1] <= total:
scores.append((player, total))
else:
for index in range(len(scores)):
if total > scores[index][1]:
scores.insert((player, total))
break
for player in range(players):
print names[scores[player][0]] + ' received ' + str(scores[player][1]) + ' points.'
print
for index in range(10):
raw_input('GAME OVER ... ' + str(9 - index))
if __name__ == '__main__':
game()
================================================================================
window.py
================================================================================
# This is the first version of the page class.
class page_v1:
def __init__(self, rows, columns, default = None):
# (page_v1, int, int, str)
if default is None:
default = ' '
self.__page = list()
for index in range(rows):
self.__page.append(list(default[0] * columns))
def mutate(self, row, column, string):
# (page_v1, int, int, str)
try:
if row >= 0:
for index in range(len(string)):
if column + index >= 0:
self.__page[row][column + index] = string[index]
except:
pass
def access(self, row, column, length = 1):
# (page_v1, int, int, int)
string = str()
try:
for index in range(length):
string += self.__page[row][column + index]
except:
pass
return string
def internal(self):
# (page_v1)
array = list()
for row in self.__page:
array.append(row[:])
return array
def __str__(self):
# (page_v1)
string = str()
for row in self.__page:
for character in row:
string += character
string += '\n'
return string[:-1]
# This is the first version of a theoretical window.
class window_v1:
def __init__(self, height, width, border = None, background = None):
# (window_v1, int, int, str, str)
self.__height = height
self.__width = width
self.__border = border
self.__background = background
self.__draw = True
self.__buffer = None
self.__contents = list()
def append(self, instance, position, visible = True, index = None):
# (window_v1, page_v1 OR window_v1, [int, int], bool, int)
self.__draw = True
if index is None:
self.__contents.append([instance, position, visible])
else:
self.__contents.insert(index, [instance, position, visible])
def remove(self, instance):
# (window_v1, page_v1 OR window_v1)
for index in range(len(self.__contents)):
if instance is self.__contents[index][0]:
self.__draw = True
del self.__contents[index]
def __getitem__(self, index):
# (window_v1, int)
self.__draw = True
return self.__contents[index]
def __delitem__(self, index):
# (window_v1, int)
self.__draw = True
del self.__contents[index]
def size(self, height = None, width = None):
# (window_v1, int, int)
if height is not None:
self.__draw = True
self.__height = height
if width is not None:
self.__draw = True
self.__width = width
if height is None and width is None:
return self.__height, self.__width
def look(self, border = 0, background = 0):
# (window_v1, str, str)
if border is not 0:
self.__draw = True
self.__border = border
if background is not 0:
self.__draw = True
self.__background = background
if border is 0 and background is 0:
return self.__border, self.__background
def __update(self):
# (window_v1)
if self.__draw:
self.__draw = False
self.__buffer = page_v1(self.__height, self.__width, self.__background)
for item in self.__contents:
if item[2]:
internal = item[0].internal()
for row in range(len(internal)):
for column in range(len(internal[0])):
self.__buffer.mutate(row + item[1][0], column + item[1][1], internal[row][column])
if self.__border is not None:
self.__buffer.mutate(0, 0, self.__border[0] * self.__width)
self.__buffer.mutate(self.__height - 1, 0, self.__border[0] * self.__width)
for row in range(1, self.__height - 1):
self.__buffer.mutate(row, 0, self.__border[0])
self.__buffer.mutate(row, self.__width - 1, self.__border[0])
def internal(self):
# (window_v1)
self.__update()
return self.__buffer.internal()
def __str__(self):
# (window_v1)
self.__update()
return str(self.__buffer)
================================================================================
cards.py
================================================================================
from window import page_v1
card_0 = page_v1(5, 5)
card_0.mutate(0, 0, '+---+')
card_0.mutate(1, 0, '| |')
card_0.mutate(2, 0, '| 0 |')
card_0.mutate(3, 0, '| |')
card_0.mutate(4, 0, '+---+')
card_1 = page_v1(5, 5)
card_1.mutate(0, 0, '+---+')
card_1.mutate(1, 0, '| |')
card_1.mutate(2, 0, '| 1 |')
card_1.mutate(3, 0, '| |')
card_1.mutate(4, 0, '+---+')
card_2 = page_v1(5, 5)
card_2.mutate(0, 0, '+---+')
card_2.mutate(1, 0, '| |')
card_2.mutate(2, 0, '| 2 |')
card_2.mutate(3, 0, '| |')
card_2.mutate(4, 0, '+---+')
card_3 = page_v1(5, 5)
card_3.mutate(0, 0, '+---+')
card_3.mutate(1, 0, '| |')
card_3.mutate(2, 0, '| 3 |')
card_3.mutate(3, 0, '| |')
card_3.mutate(4, 0, '+---+')
card_4 = page_v1(5, 5)
card_4.mutate(0, 0, '+---+')
card_4.mutate(1, 0, '| |')
card_4.mutate(2, 0, '| 4 |')
card_4.mutate(3, 0, '| |')
card_4.mutate(4, 0, '+---+')
card_5 = page_v1(5, 5)
card_5.mutate(0, 0, '+---+')
card_5.mutate(1, 0, '| |')
card_5.mutate(2, 0, '| 5 |')
card_5.mutate(3, 0, '| |')
card_5.mutate(4, 0, '+---+')
card_6 = page_v1(5, 5)
card_6.mutate(0, 0, '+---+')
card_6.mutate(1, 0, '| |')
card_6.mutate(2, 0, '| 6 |')
card_6.mutate(3, 0, '| |')
card_6.mutate(4, 0, '+---+')
card_7 = page_v1(5, 5)
card_7.mutate(0, 0, '+---+')
card_7.mutate(1, 0, '| |')
card_7.mutate(2, 0, '| 7 |')
card_7.mutate(3, 0, '| |')
card_7.mutate(4, 0, '+---+')
card_8 = page_v1(5, 5)
card_8.mutate(0, 0, '+---+')
card_8.mutate(1, 0, '| |')
card_8.mutate(2, 0, '| 8 |')
card_8.mutate(3, 0, '| |')
card_8.mutate(4, 0, '+---+')
card_9 = page_v1(5, 5)
card_9.mutate(0, 0, '+---+')
card_9.mutate(1, 0, '| |')
card_9.mutate(2, 0, '| 9 |')
card_9.mutate(3, 0, '| |')
card_9.mutate(4, 0, '+---+')
card_10 = page_v1(5, 5)
card_10.mutate(0, 0, '+---+')
card_10.mutate(1, 0, '| |')
card_10.mutate(2, 0, '|1 0|')
card_10.mutate(3, 0, '| |')
card_10.mutate(4, 0, '+---+')
card_A = page_v1(5, 5)
card_A.mutate(0, 0, '+---+')
card_A.mutate(1, 0, '| |')
card_A.mutate(2, 0, '| A |')
card_A.mutate(3, 0, '| |')
card_A.mutate(4, 0, '+---+')
card_J = page_v1(5, 5)
card_J.mutate(0, 0, '+---+')
card_J.mutate(1, 0, '| |')
card_J.mutate(2, 0, '| J |')
card_J.mutate(3, 0, '| |')
card_J.mutate(4, 0, '+---+')
card_Q = page_v1(5, 5)
card_Q.mutate(0, 0, '+---+')
card_Q.mutate(1, 0, '| |')
card_Q.mutate(2, 0, '| Q |')
card_Q.mutate(3, 0, '| |')
card_Q.mutate(4, 0, '+---+')
card_K = page_v1(5, 5)
card_K.mutate(0, 0, '+---+')
card_K.mutate(1, 0, '| |')
card_K.mutate(2, 0, '| K |')
card_K.mutate(3, 0, '| |')
card_K.mutate(4, 0, '+---+')