Advertisement
Nenogzar

Console Connect Four

Jun 6th, 2024
340
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 3.04 KB | None | 0 0
  1. ROWS = 6
  2. COLS = 7
  3.  
  4.  
  5. # Игрално поле
  6. def print_board(board):
  7.     for row in board:
  8.         print(row)
  9.  
  10.  
  11. # Проверявам дали избраната колона е валидна (между 1 и COLS)
  12. def is_valid_column_choice(col_number):
  13.     return 1 <= col_number <= COLS
  14.  
  15.  
  16. def place_player_choice(board, col_index, player_num):
  17.     for row_index in range(ROWS - 1, -1, -1):
  18.         if board[row_index][col_index] == 0:
  19.             board[row_index][col_index] = player_num
  20.             return row_index, col_index
  21.     raise Exception("Колоната е пълна")
  22.  
  23.  
  24. # Проверка за границите на матрицата
  25. def isValidPlace(row, col):
  26.     return 0 <= row < ROWS and 0 <= col < COLS
  27.  
  28.  
  29. # Проверка за победител
  30. def check_winner(board, row, col, player_num):
  31.     directions = [
  32.         ((-1, 0), (1, 0)),  # вертикално
  33.         ((0, -1), (0, 1)),  # хоризонтално
  34.         ((-1, -1), (1, 1)),  # диагонално /
  35.         ((-1, 1), (1, -1))  # диагонално \
  36.     ]
  37.  
  38.     for dir1, dir2 in directions:
  39.         count = 1
  40.         for matrix_row, matrix_col in [dir1, dir2]:
  41.             """
  42.                        изчисляване на новата позиция
  43.                        Ако текущата позиция е (3, 2) и
  44.                        посоката на обхождане е (-1, 0) нагоре
  45.                        новата позиция ще бъде:
  46.                        r = 3 + (-1) = 2
  47.                        c = 2 + 0 = 2
  48.                        """
  49.             r, c = row + matrix_row, col + matrix_col
  50.  
  51.             while isValidPlace(r, c) and board[r][c] == player_num:
  52.                 count += 1
  53.                 r += matrix_row
  54.                 c += matrix_col
  55.         if count >= 4:
  56.             return True
  57.     return False
  58.  
  59.  
  60. # Проверка дали дъската е пълна
  61. def is_board_full(board):
  62.     for col in range(COLS):
  63.         if board[0][col] == 0:
  64.             return False
  65.     return True
  66.  
  67.  
  68. # Празната дъска
  69. board = [[0 for _ in range(COLS)] for _ in range(ROWS)]
  70. print_board(board)
  71.  
  72. turn = 1
  73.  
  74. while True:
  75.     player_num = 1 if turn % 2 != 0 else 2
  76.     try:
  77.         selected_column = int(input())
  78.     except ValueError:
  79.         print("Моля, въведете валидна цифра")
  80.         continue
  81.  
  82.     if not is_valid_column_choice(selected_column):
  83.         print(f"Моля, изберете число между 1 и {COLS}")
  84.         continue
  85.  
  86.     selected_col_index = selected_column - 1
  87.     try:
  88.         row, col = place_player_choice(board, selected_col_index, player_num)
  89.     except Exception as e:
  90.         print(e)
  91.         continue
  92.  
  93.     print_board(board)
  94.  
  95.     if check_winner(board, row, col, player_num):
  96.         print(f"Играч {player_num} печели!")
  97.         break
  98.  
  99.     if is_board_full(board):
  100.         print("Дъската е пълна! Равенство!")
  101.         break
  102.  
  103.     turn += 1
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement