Amazing-Python-Scripts
162 строки · 4.9 Кб
1import numpy as np2import pygame3import sys4import math5
6BLUE = (0, 0, 255)7BLACK = (0, 0, 0)8RED = (255, 0, 0)9YELLOW = (255, 255, 0)10
11ROW_COUNT = 612COLUMN_COUNT = 713
14
15def create_board():16board = np.zeros((ROW_COUNT, COLUMN_COUNT))17return board18
19
20def drop_piece(board, row, col, piece):21board[row][col] = piece22
23
24def is_valid_location(board, col):25return board[ROW_COUNT-1][col] == 026
27
28def get_next_open_row(board, col):29for r in range(ROW_COUNT):30if board[r][col] == 0:31return r32
33
34def print_board(board):35print(np.flip(board, 0))36
37
38def winning_move(board, piece):39# check horizontal locations to win40for c in range(COLUMN_COUNT-3):41for r in range(ROW_COUNT):42if board[r][c] == piece and board[r][c+1] == piece and board[r][c+2] == piece and board[r][c+3] == piece:43return True44# check vertical locations to win45for c in range(COLUMN_COUNT):46for r in range(ROW_COUNT-3):47if board[r][c] == piece and board[r+1][c] == piece and board[r+2][c] == piece and board[r+3][c] == piece:48return True49
50# CHECK POSITIVE SLOPE DIAGONALS51for c in range(COLUMN_COUNT-3):52for r in range(ROW_COUNT-3):53if board[r][c] == piece and board[r+1][c+1] == piece and board[r+2][c+2] == piece and board[r+3][c+3] == piece:54return True55
56# CHECK NEGATIVE DIAGONALS57for c in range(COLUMN_COUNT-3):58for r in range(3, ROW_COUNT):59if board[r][c] == piece and board[r-1][c+1] == piece and board[r-2][c+2] == piece and board[r-3][c+3] == piece:60return True61
62
63def draw_board(board):64for c in range(COLUMN_COUNT):65for r in range(ROW_COUNT):66pygame.draw.rect(screen, BLUE, (c*SQUARESIZE, r *67SQUARESIZE+SQUARESIZE, SQUARESIZE, SQUARESIZE))68pygame.draw.circle(screen, BLACK, (int(69c*SQUARESIZE+SQUARESIZE/2), int(r*SQUARESIZE+SQUARESIZE+SQUARESIZE/2)), RADIUS)70
71for c in range(COLUMN_COUNT):72for r in range(ROW_COUNT):73if board[r][c] == 1:74pygame.draw.circle(screen, RED, (int(75c*SQUARESIZE+SQUARESIZE/2), height-int(r*SQUARESIZE+SQUARESIZE/2)), RADIUS)76
77elif board[r][c] == 2:78pygame.draw.circle(screen, YELLOW, (int(79c*SQUARESIZE+SQUARESIZE/2), height-int(r*SQUARESIZE+SQUARESIZE/2)), RADIUS)80
81pygame.display.update()82
83
84board = create_board()85print_board(board)86game_over = False87turn = 088
89pygame.init()90
91SQUARESIZE = 10092
93width = COLUMN_COUNT*SQUARESIZE94height = (ROW_COUNT+1)*SQUARESIZE95
96size = (width, height)97
98RADIUS = int(SQUARESIZE/2 - 5)99
100pygame.display.set_caption("CONNECT FOUR GAME")101screen = pygame.display.set_mode(size)102draw_board(board)103pygame.display.update()104
105myfont = pygame.font.SysFont("monosoace", 75)106
107while not game_over:108for event in pygame.event.get():109if event.type == pygame.QUIT:110sys.exit()111
112if event.type == pygame.MOUSEMOTION:113pygame.draw.rect(screen, BLACK, (0, 0, width, SQUARESIZE))114posx = event.pos[0]115if turn == 0:116pygame.draw.circle(117screen, RED, (posx, int(SQUARESIZE/2)), RADIUS)118else:119pygame.draw.circle(120screen, YELLOW, (posx, int(SQUARESIZE/2)), RADIUS)121pygame.display.update()122
123if event.type == pygame.MOUSEBUTTONDOWN:124# print(event.pos)125pygame.draw.rect(screen, BLACK, (0, 0, width, SQUARESIZE))126
127if turn == 0:128posx = event.pos[0]129col = int(math.floor(posx/SQUARESIZE))130
131if is_valid_location(board, col):132row = get_next_open_row(board, col)133drop_piece(board, row, col, 1)134
135if winning_move(board, 1):136# print("Player 1 wins CONGRATULATIONS!!")137label = myfont.render("Player 1 wins!!", 1, RED)138screen.blit(label, (40, 10))139game_over = True140
141else:142posx = event.pos[0]143col = int(math.floor(posx/SQUARESIZE))144
145if is_valid_location(board, col):146row = get_next_open_row(board, col)147drop_piece(board, row, col, 2)148
149if winning_move(board, 2):150# print("Player 2 wins CONGRATULATIONS!!")151label = myfont.render("Player 2 wins!!", 1, YELLOW)152screen.blit(label, (40, 10))153game_over = True154
155print_board(board)156draw_board(board)157
158turn += 1159turn = turn % 2160
161if game_over:162pygame.time.wait(3000)163