from math import * from cmath import sqrt import matplotlib.pyplot as plt import turtle import random import kandinsky as kd import time # Connect Four game functions def create_board(rows, cols): return [[0 for _ in range(cols)] for _ in range(rows)] def make_move(board, col, player): row = len(board) - 1 while board[row][col] != 0: row -= 1 board[row][col] = player def is_winner(board, player): # Check rows for row in board: if [player]*4 in [row[i:i+4] for i in range(len(row)-3)]: return True # Check columns for j in range(len(board[0])): if [player]*4 in [[board[i][j], board[i+1][j], board[i+2][j], board[i+3][j]] for i in range(len(board)-3)]: return True # Check diagonals for i in range(len(board)-3): for j in range(len(board[0])-3): if board[i][j] == player and board[i+1][j+1] == player and board[i+2][j+2] == player and board[i+3][j+3] == player: return True for i in range(len(board)-3): for j in range(3, len(board[0])): if board[i][j] == player and board[i+1][j-1] == player and board[i+2][j-2] == player and board[i+3][j-3] == player: return True return False def ai_algorithm(board): return random.choice([col for col in range(len(board[0])) if board[0][col] == 0]) # Graphics functions def init(): kd.fill_rect(0, 0, kd.get_screen_width(), kd.get_screen_height(), (255, 255, 255)) def close(): pass def display_board(board): kd.clear() kd.draw_string('Connect Four', 10, 10) kd.draw_string('Generation: {}'.format(generation), 10, 40) for row in range(len(board)): for col in range(len(board[0])): if board[row][col] == 0: kd.fill_rect(col*40+20, row*40+60, 40, 40, (255, 255, 255)) elif board[row][col] == 1: kd.fill_circle(col*40+40, row*40+80, 16, (255, 0, 0)) else: kd.fill_circle(col*40+40, row*40+80, 16, (0, 0, 255)) kd.show() def key_down(key): return False def set_auto_refresh(enable): pass # Main loop def main(): init() set_auto_refresh(False) generation = 1 while not key_down(KEY_OK): display_board(board) col = ai_algorithm(board) make_move(board, col, 1) if is_winner(board, 1): print("AI wins!") break col = ai_algorithm(board) make_move(board, col, 2) if is_winner(board, 2): print("Player wins!") break generation += 1 time.sleep(0.5) close() if __name__ == '__main__': main()