Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- """Your challenge in this exercise is to use the functions from those previous exercises all together in the same program to make a two-player game that you can play with a friend."""
- def Board_dim():
- """Asks the user for board dimensions"""
- x = int(input('How many spaces wide should the board be?\n'))
- y = int(input('How high?\n'))
- return [x, y]
- def Print_board(x, y):
- """Prints a game board of dimension x by y
- Returns the field"""
- field = ['', '|', '']
- i = 1
- j = 1
- while i <= x:
- field[0] += ' ---'
- field[1] += ' |'
- field[2] += ' ---'
- i += 1
- while j < y:
- field.append(field[1])
- field.append(field[2])
- j += 1
- if x == 0 or y == 0:
- print(' ')
- else:
- for elem in field:
- print(elem)
- return field
- def Print_mark(field, board):
- """Marks field from Print_board with board from Alter_board
- An X for Player 1 or an O for Player 2
- Prints the marked board and return it"""
- for i in range(len(board)): # Loop for board rows
- for j in range(len(board[i])): # Loop for board columns
- if board[i][j] == 'X': # Tanslate board coordinates to field
- flst = list(field[2 * i + 1])
- flst[4 * j + 2] = 'X'
- field[2 * i + 1] = ''.join(flst)
- elif board[i][j] == 'O':
- flst = list(field[2 * i + 1])
- flst[4 * j + 2] = 'O'
- field[2 * i + 1] = ''.join(flst)
- for elem in field:
- print(elem)
- return(field)
- def Check_hor(board):
- """Checks whether a player had 3 in a row horizontally"""
- win = 0
- rowa = board[0]
- rowb = board[1]
- rowc = board[2]
- if rowa.count('X') == 3 or rowb.count('X') == 3 or rowc.count('X') == 3:
- win = 1
- elif rowa.count('O') == 3 or rowb.count('O') == 3 or rowc.count('O') == 3:
- win = 2
- return win
- def Check_ver(board):
- """Checks whether a player had 3 in a row vertically"""
- win = 0
- ver0 = []
- ver1 = []
- ver2 = []
- for i in range(3):
- ver0.append(board[i][0])
- ver1.append(board[i][1])
- ver2.append(board[i][2])
- if ver0.count('X') == 3 or ver1.count('X') == 3 or ver2.count('X') == 3:
- win = 1
- elif ver0.count('O') == 3 or ver1.count('O') == 3 or ver2.count('O') == 3:
- win = 2
- return win
- def Check_dia(board):
- """Checks whether a player had 3 in a row diagonally"""
- win = 0
- diaM = [board[i][i] for i in range(3)]
- diam = [board[i][2 - i] for i in range(3)]
- if diaM.count('X') == 3 or diam.count('X') == 3:
- win = 1
- elif diaM.count('O') == 3 or diam.count('O') == 3:
- win = 2
- return win
- def Coord(place):
- """Translate user input x-coord,y-coord string into list [x, y] as integers"""
- return [int(x) for x in place.split(',')]
- def Alter_board(move, board, player):
- """Places an X for Player 1, an O for Player 2 in the spot defined by move
- Returns the altered board"""
- run = True
- move = [i - 1 for i in move] # Translates move into indices
- while run:
- if board[move[0]][move[1]] != 0:
- Alter_board(Coord(input('Player %i, enter a valid move:\n' % player)),
- board, player)
- elif player == 1:
- board[move[0]][move[1]] = 'X'
- run = False
- elif player == 2:
- board[move[0]][move[1]] = 'O'
- run = False
- return board
- def Play_again(record, x, y, f0, board, num, play):
- """Asks whether players want to play again
- If yes, resets the board and move count
- If not prints their record"""
- again = input('Play Again? (y/n)\n')
- if again == 'y':
- f0 = Print_board(x, y)
- board = [[0 for i in range(x)] for j in range(y)]
- num = 0
- return[f0, board, num, play]
- else:
- print('Game Record\nP1 wins: {0}\nP2 wins: {1}\nDraws: {2}'.format(record[0], record[1], record[2]))
- play = False
- return[f0, board, num, play]
- if __name__=="__main__":
- [x, y] = Board_dim()
- f0 = Print_board(x, y)
- board = [[0 for i in range(x)] for j in range(y)]
- num = 0
- record = [0, 0, 0]
- play = True
- print('''Enter move coordinates in the form "row,col"''',
- '''For example, "1,1" selects the upper left-hand corner of an n-by-n board''')
- while play:
- if num == x * y:
- if Check_hor(board) == 1 or Check_ver(board) == 1 or Check_dia(board) == 1:
- print('Player 1 wins')
- else:
- print('All spots are occupied\nDraw')
- record[2] += 1
- [f0, board, num, play] = Play_again(record, x, y, f0, board, num, play)
- elif num % 2 == 0:
- board = Alter_board(Coord(input('Player 1, your move:\n')),
- board, player = 1)
- num += 1
- f0 = Print_mark(f0, board)
- if Check_hor(board) == 1 or Check_ver(board) == 1 or Check_dia(board) == 1:
- print('Player 1 wins')
- record[0] +=1
- [f0, board, num, play] = Play_again(record, x, y, f0, board, num, play)
- else:
- board = Alter_board(Coord(input('Player 2, your move:\n')),
- board, player = 2)
- num += 1
- f0 = Print_mark(f0, board)
- if Check_hor(board) == 2 or Check_ver(board) == 2 or Check_dia(board) == 2:
- print('Player 2 wins')
- record[1] += 1
- [f0, board, num, play] = Play_again(record, x, y, f0, board, num, play)
- """Notes for improvements: Modify so that Players 1 and 2 alternate the first move"""
Add Comment
Please, Sign In to add comment