Connect Four Project Python

WHAT TO KNOW - Sep 7 - - Dev Community

<!DOCTYPE html>



Connect Four Project in Python: A Comprehensive Guide

<br> body {<br> font-family: Arial, sans-serif;<br> }</p> <p>h1, h2, h3 {<br> text-align: center;<br> }</p> <p>img {<br> display: block;<br> margin: 20px auto;<br> max-width: 80%;<br> }</p> <p>.code {<br> background-color: #f5f5f5;<br> padding: 10px;<br> border-radius: 5px;<br> font-family: monospace;<br> margin: 10px;<br> }<br>



Connect Four Project in Python: A Comprehensive Guide



Introduction



Connect Four is a classic two-player board game where the goal is to be the first to connect four of your colored checkers in a row, column, or diagonal. This project provides a great opportunity to learn and apply fundamental programming concepts like data structures, functions, loops, and conditional statements within a fun and engaging context.



This article will guide you through the development of a Connect Four game in Python, from the basics of setting up the game board to implementing game logic and user interface.



Project Setup and Basic Structures


  1. Game Board Representation

The game board is the foundation of our project. We need a way to represent it in Python. A common approach is using a two-dimensional list (matrix) where each element corresponds to a cell on the board. For example, a 7x6 board could be represented as:

board = [
[" " for _ in range(7)] for _ in range(6) 
]

Here, each inner list represents a row, and each " " represents an empty cell.

  • Player Representation

    We'll represent the players with simple variables. You can assign them different symbols for their checkers, such as 'X' and 'O' or 'R' and 'Y'.

    player1 = "X"
    player2 = "O"
    

  • Game State

    To track the game's progress, we need variables to represent:

    • Current player: The player whose turn it is.
    • Game over: A flag to indicate if the game has ended.
    • Winner: The player who has won the game, or None if it's a draw.
      current_player = player1
      game_over = False
      winner = None
      

      Game Logic Implementation

      1. Placing a Checker

      The core functionality of the game is placing a checker. This involves finding the lowest empty cell in the chosen column and placing the current player's checker there.

      def place_checker(board, column, player):
      for row in range(5, -1, -1): 
      if board[row][column] == " ":
      board[row][column] = player
      return True
      return False 
      

      This function iterates through the rows of the selected column, starting from the bottom. If it finds an empty cell, it places the checker and returns True. If the column is full, it returns False.

    • Checking for a Winner

      We need to check after each turn if a player has won. This involves checking for four consecutive checkers in a row, column, or diagonal.

      def check_win(board, player):
      # Check rows
      for row in range(6):
      for col in range(4):
      if all(board[row][col + i] == player for i in range(4)):
      return True

    # Check columns
    for col in range(7):
    for row in range(3):
    if all(board[row + i][col] == player for i in range(4)):
    return True

    # Check diagonals (top-left to bottom-right)
    for row in range(3):
    for col in range(4):
    if all(board[row + i][col + i] == player for i in range(4)):
    return True

    # Check diagonals (top-right to bottom-left)
    for row in range(3):
    for col in range(3, 7):
    if all(board[row + i][col - i] == player for i in range(4)):
    return True

    return False


    This function iterates through the board, checking all possible winning combinations.


    1. Checking for a Draw

    If no player has won and all cells are filled, the game is a draw.

    def check_draw(board):
    return all(cell != " " for row in board for cell in row)
    

    User Interface (UI) Design

  • Text-Based UI

    For a simple UI, you can use basic Python input and output functions to display the board and take user input.

    def print_board(board):
    for row in board:
    print("|" + "|".join(row) + "|")
  • ... (game loop)

    while not game_over:
    print_board(board)
    column = int(input(f"Player {current_player}, choose a column (1-7): ")) - 1
    # ... (Place checker and check for win/draw)

    1. Graphical UI with Libraries

    For a more visually appealing UI, you can use libraries like Pygame or Tkinter. These libraries allow you to create windows, draw graphics, and handle user interactions.

    Here's a basic example using Pygame:

    Pygame Connect Four Game

    import pygame
    
    

    ... (Game setup, board, players, etc.)

    pygame.init()
    screen = pygame.display.set_mode((700, 600))
    pygame.display.set_caption("Connect Four")

    ... (Game loop)

    while not game_over:
    for event in pygame.event.get():
    if event.type == pygame.QUIT:
    game_over = True
    # ... (Handle mouse clicks for placing checkers)

    # ... (Draw board and checkers)
    pygame.display.flip()



    Complete Connect Four Game Implementation



    import random

    Board dimensions

    ROWS = 6
    COLS = 7

    Players and their symbols

    PLAYER_1 = "X"
    PLAYER_2 = "O"

    Function to create the game board

    def create_board():
    board = [[" " for _ in range(COLS)] for _ in range(ROWS)]
    return board

    Function to print the board

    def print_board(board):
    for row in board:
    print("|".join(row))
    print("-" * (COLS * 2 - 1))

    Function to place a checker on the board

    def place_checker(board, column, player):
    for row in range(ROWS - 1, -1, -1):
    if board[row][column] == " ":
    board[row][column] = player
    return True
    return False

    Function to check if the game has ended

    def check_win(board, player):
    # Check rows
    for row in range(ROWS):
    for col in range(COLS - 3):
    if board[row][col] == player and \
    board[row][col + 1] == player and \
    board[row][col + 2] == player and \
    board[row][col + 3] == player:
    return True

    # Check columns
    for col in range(COLS):
    for row in range(ROWS - 3):
    if board[row][col] == player and \
    board[row + 1][col] == player and \
    board[row + 2][col] == player and \
    board[row + 3][col] == player:
    return True

    # Check diagonals (top-left to bottom-right)
    for row in range(ROWS - 3):
    for col in range(COLS - 3):
    if board[row][col] == player and \
    board[row + 1][col + 1] == player and \
    board[row + 2][col + 2] == player and \
    board[row + 3][col + 3] == player:
    return True

    # Check diagonals (top-right to bottom-left)
    for row in range(ROWS - 3):
    for col in range(3, COLS):
    if board[row][col] == player and \
    board[row + 1][col - 1] == player and \
    board[row + 2][col - 2] == player and \
    board[row + 3][col - 3] == player:
    return True

    return False

    Function to check if the board is full

    def check_draw(board):
    for row in board:
    for cell in row:
    if cell == " ":
    return False
    return True

    Function to get the user's input

    def get_player_move(board, player):
    while True:
    try:
    column = int(input(f"Player {player}, choose a column (1-{COLS}): ")) - 1
    if 0 <= column < COLS and place_checker(board, column, player):
    return column
    else:
    print("Invalid move. Try again.")
    except ValueError:
    print("Invalid input. Please enter a number.")

    Main game loop

    def main():
    board = create_board()
    game_over = False
    current_player = random.choice([PLAYER_1, PLAYER_2]) # Randomly choose starting player

    while not game_over:
    print_board(board)

    column = get_player_move(board, current_player)
    
    if check_win(board, current_player):
      print_board(board)
      print(f"Player {current_player} wins!")
      game_over = True
    elif check_draw(board):
      print_board(board)
      print("It's a draw!")
      game_over = True
    else:
      current_player = PLAYER_2 if current_player == PLAYER_1 else PLAYER_1
    

    if name == "main":
    main()



    Conclusion



    Developing a Connect Four game in Python provides a solid foundation for learning key programming concepts and applying them in a practical and fun project. We've covered the essential elements, from representing the game board and players to implementing the game logic and UI. You can build upon this foundation to explore additional features like:

    • AI opponent: Implement an AI player using various strategies like minimax algorithm.
      • Visual enhancements: Customize the UI with more appealing colors, sounds, and animations using libraries like Pygame.
      • Network multiplayer: Allow players to compete against each other over a network.

        Remember to keep your code clean, well-structured, and modular. Employ techniques like functions, loops, and conditional statements effectively to make your code readable and maintainable. As you progress, explore more advanced features and libraries to enhance your Connect Four game and your Python programming skills.

    . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
    Terabox Video Player