Amazing-Python-Scripts

Форк
0
162 строки · 4.9 Кб
1
import numpy as np
2
import pygame
3
import sys
4
import math
5

6
BLUE = (0, 0, 255)
7
BLACK = (0, 0, 0)
8
RED = (255, 0, 0)
9
YELLOW = (255, 255, 0)
10

11
ROW_COUNT = 6
12
COLUMN_COUNT = 7
13

14

15
def create_board():
16
    board = np.zeros((ROW_COUNT, COLUMN_COUNT))
17
    return board
18

19

20
def drop_piece(board, row, col, piece):
21
    board[row][col] = piece
22

23

24
def is_valid_location(board, col):
25
    return board[ROW_COUNT-1][col] == 0
26

27

28
def get_next_open_row(board, col):
29
    for r in range(ROW_COUNT):
30
        if board[r][col] == 0:
31
            return r
32

33

34
def print_board(board):
35
    print(np.flip(board, 0))
36

37

38
def winning_move(board, piece):
39
    # check horizontal locations to win
40
    for c in range(COLUMN_COUNT-3):
41
        for r in range(ROW_COUNT):
42
            if board[r][c] == piece and board[r][c+1] == piece and board[r][c+2] == piece and board[r][c+3] == piece:
43
                return True
44
    # check vertical locations to win
45
    for c in range(COLUMN_COUNT):
46
        for r in range(ROW_COUNT-3):
47
            if board[r][c] == piece and board[r+1][c] == piece and board[r+2][c] == piece and board[r+3][c] == piece:
48
                return True
49

50
    # CHECK POSITIVE SLOPE DIAGONALS
51
    for c in range(COLUMN_COUNT-3):
52
        for r in range(ROW_COUNT-3):
53
            if 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:
54
                return True
55

56
    # CHECK NEGATIVE DIAGONALS
57
    for c in range(COLUMN_COUNT-3):
58
        for r in range(3, ROW_COUNT):
59
            if 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:
60
                return True
61

62

63
def draw_board(board):
64
    for c in range(COLUMN_COUNT):
65
        for r in range(ROW_COUNT):
66
            pygame.draw.rect(screen, BLUE, (c*SQUARESIZE, r *
67
                             SQUARESIZE+SQUARESIZE, SQUARESIZE, SQUARESIZE))
68
            pygame.draw.circle(screen, BLACK, (int(
69
                c*SQUARESIZE+SQUARESIZE/2), int(r*SQUARESIZE+SQUARESIZE+SQUARESIZE/2)), RADIUS)
70

71
    for c in range(COLUMN_COUNT):
72
        for r in range(ROW_COUNT):
73
            if board[r][c] == 1:
74
                pygame.draw.circle(screen, RED, (int(
75
                    c*SQUARESIZE+SQUARESIZE/2), height-int(r*SQUARESIZE+SQUARESIZE/2)), RADIUS)
76

77
            elif board[r][c] == 2:
78
                pygame.draw.circle(screen, YELLOW, (int(
79
                    c*SQUARESIZE+SQUARESIZE/2), height-int(r*SQUARESIZE+SQUARESIZE/2)), RADIUS)
80

81
    pygame.display.update()
82

83

84
board = create_board()
85
print_board(board)
86
game_over = False
87
turn = 0
88

89
pygame.init()
90

91
SQUARESIZE = 100
92

93
width = COLUMN_COUNT*SQUARESIZE
94
height = (ROW_COUNT+1)*SQUARESIZE
95

96
size = (width, height)
97

98
RADIUS = int(SQUARESIZE/2 - 5)
99

100
pygame.display.set_caption("CONNECT FOUR GAME")
101
screen = pygame.display.set_mode(size)
102
draw_board(board)
103
pygame.display.update()
104

105
myfont = pygame.font.SysFont("monosoace", 75)
106

107
while not game_over:
108
    for event in pygame.event.get():
109
        if event.type == pygame.QUIT:
110
            sys.exit()
111

112
        if event.type == pygame.MOUSEMOTION:
113
            pygame.draw.rect(screen, BLACK, (0, 0, width, SQUARESIZE))
114
            posx = event.pos[0]
115
            if turn == 0:
116
                pygame.draw.circle(
117
                    screen, RED, (posx, int(SQUARESIZE/2)), RADIUS)
118
            else:
119
                pygame.draw.circle(
120
                    screen, YELLOW, (posx, int(SQUARESIZE/2)), RADIUS)
121
        pygame.display.update()
122

123
        if event.type == pygame.MOUSEBUTTONDOWN:
124
            # print(event.pos)
125
            pygame.draw.rect(screen, BLACK, (0, 0, width, SQUARESIZE))
126

127
            if turn == 0:
128
                posx = event.pos[0]
129
                col = int(math.floor(posx/SQUARESIZE))
130

131
                if is_valid_location(board, col):
132
                    row = get_next_open_row(board, col)
133
                    drop_piece(board, row, col, 1)
134

135
                    if winning_move(board, 1):
136
                        # print("Player 1 wins CONGRATULATIONS!!")
137
                        label = myfont.render("Player 1 wins!!", 1, RED)
138
                        screen.blit(label, (40, 10))
139
                        game_over = True
140

141
            else:
142
                posx = event.pos[0]
143
                col = int(math.floor(posx/SQUARESIZE))
144

145
                if is_valid_location(board, col):
146
                    row = get_next_open_row(board, col)
147
                    drop_piece(board, row, col, 2)
148

149
                    if winning_move(board, 2):
150
                        # print("Player 2 wins CONGRATULATIONS!!")
151
                        label = myfont.render("Player 2 wins!!", 1, YELLOW)
152
                        screen.blit(label, (40, 10))
153
                        game_over = True
154

155
            print_board(board)
156
            draw_board(board)
157

158
            turn += 1
159
            turn = turn % 2
160

161
            if game_over:
162
                pygame.time.wait(3000)
163

Использование cookies

Мы используем файлы cookie в соответствии с Политикой конфиденциальности и Политикой использования cookies.

Нажимая кнопку «Принимаю», Вы даете АО «СберТех» согласие на обработку Ваших персональных данных в целях совершенствования нашего веб-сайта и Сервиса GitVerse, а также повышения удобства их использования.

Запретить использование cookies Вы можете самостоятельно в настройках Вашего браузера.