Advertisement
kalinx

line

Jun 17th, 2021
109
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 2.21 KB | None | 0 0
  1. def num_of_player(turn):
  2.     if turn % 2:
  3.         return 1
  4.     return 2
  5.  
  6.  
  7. def get_turn(turn, free_r_in_c):
  8.     player = num_of_player(turn)
  9.     while True:
  10.         print(f"Player {player}, please choose a column.")
  11.         number_of_column = input()
  12.         if number_of_column.isnumeric():
  13.             number_of_column = int(number_of_column) - 1
  14.             if number_of_column in range(rows) \
  15.                     and free_r_in_c[number_of_column] >= 0:
  16.                 return free_r_in_c[number_of_column], number_of_column, player
  17.         print("Invalid column index!")
  18.  
  19.  
  20. def push_mark(i, j, num):
  21.     global game_board
  22.     game_board[i][j] = num
  23.  
  24.  
  25. def print_board():
  26.     [print(row) for row in game_board]
  27.  
  28.  
  29. def check_for_winner(i, j, num):
  30.     winning_lines = [
  31.         [[[+1, -1], [+2, -2], [+3, -3]], [[-1, +1], [-2, +2], [-3, +3]]],  # diagonal: left,down - right,up
  32.         [[[+1, +1], [+2, +2], [+3, +3]], [[-1, -1], [-2, -2], [-3, -3]]],  # diagonal: right,down - left,up
  33.         [[[0, -1], [0, -2], [0, -3]], [[0, +1], [0, +2], [0, +3]]],        # horizontal: left - right
  34.         [[[+1, 0], [+2, 0], [+3, 0]], [[-1, 0], [-2, 0], [-3, 0]]],        # vertical: down - !(up)
  35.     ]
  36.     for line in winning_lines:
  37.         four_in_line = 1
  38.         for half_line in line:
  39.             for row_col in half_line:
  40.                 n_row, n_col = i + row_col[0], j + row_col[1]
  41.                 if n_row in range(rows) and n_col in range(columns) and game_board[n_row][n_col] == num:
  42.                     four_in_line += 1
  43.                     if four_in_line == 4:
  44.                         return num
  45.                 else:
  46.                     break
  47.  
  48.  
  49. rows, columns = [int(x) for x in input().split()]
  50. game_board = [[0 for col in range(columns)] for row in range(rows)]
  51. free_row_in_columns = [rows - 1 for _ in range(columns)]
  52. turns = 1
  53.  
  54. while True:
  55.     row, col, mark = get_turn(turns, free_row_in_columns)
  56.     free_row_in_columns[col] -= 1
  57.     push_mark(row, col, mark)
  58.     print_board()
  59.     winner = check_for_winner(row, col, mark)
  60.     if winner:
  61.         print(f"The Winner is Player {winner}!")
  62.         break
  63.     if turns == rows * columns:
  64.         print("No winner!")
  65.         break
  66.     turns += 1
  67.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement