반응형
3x3 체크를 위해 아래와 같이 함수를 만들고 플레이어와 AI 둘다 막아보았다.
문제되는 부분이 있다면 댓글로 알려주길 바란다.
# 3x3 체크
def check3x3(self, row, col):
def check_direction_with_blank(dx, dy):
scount = 1 # 같은 색상 갯수
bcount = 1 # 빈공간 포함 갯수
r, c = row + dx, col + dy
while 0 <= r < len(self.board) and 0 <= c < len(self.board[0]) and (self.board[r][c] == self.board[row][col] or self.board[r][c] == 0):
bcount += 1
if self.board[r][c] == self.board[row][col]:
scount += 1
r += dx
c += dy
return scount, bcount
self.board[row][col] = self.turn_player
count3x3 = 0
directions = [(0, 1), (1, 0), (1, 1), (-1, 1)]
for dx, dy in directions:
sc1, bc1 = check_direction_with_blank( dx, dy)
sc2, bc2 = check_direction_with_blank(-dx, -dy)
scount = sc1 + sc2 - 1
bcount = bc1 + bc2 - 1
if scound == 3 and bcound >= 5:
count3x3 += 1
self.board[row][col] = 0
if check3x3 >= 2:
return True
return False
def find_empty_cells(self):
empty_cells = []
for row in range(BOARD_SIZE):
for col in range(BOARD_SIZE):
if self.board[row][col] == 0:
if self.check3x3(row, col) == False: # 3x3 체크
empty_cells.append((row, col))
random.shuffle(empty_cells)
return empty_cells
def handle_events(self):
for event in pygame.event.get():
if event.type == pygame.QUIT:
self.game_over = True
elif event.type == pygame.MOUSEBUTTONDOWN and not self.game_over and self.turn_player == PLAYER:
x, y = pygame.mouse.get_pos()
row = int(round((y - MARGIN) / CELL_SIZE))
col = int(round((x - MARGIN) / CELL_SIZE))
if 0 <= row < BOARD_SIZE and 0 <= col < BOARD_SIZE and self.board[row][col] == 0:
if self.check3x3(row, col) == True: # 3x3 체크
return
self.make_move(row, col, self.turn_player)
(이하 생략)
2023.10.27 - [AI,ML, Algorithm] - Gomoku(Five in a Row, Omok) (1/5) - 기본 구현 (minimax, alpha-beta pruning)
2023.10.27 - [AI,ML, Algorithm] - Gomoku(Five in a Row, Omok) (2/5) - 속도 최적화 1차 (minimax 속도 개선)
2023.10.28 - [AI,ML, Algorithm] - Gomoku(Five in a Row, Omok) (3/5) - 속도 최적화 2차 (RANDOM모드 추가)
2023.10.29 - [AI,ML, Algorithm] - Gomoku(Five in a Row, Omok) (4/5) - 훈련 데이터 생성 및 학습
2023.10.29 - [AI,ML, Algorithm] - Gomoku(Five in a Row, Omok) (5/5) - 머신러닝으로 게임 구현
2023.11.03 - [AI,ML, Algorithm] - Gomoku(Five in a Row, Omok) (5/5) - 3x3 체크 추가
반응형
'개발 > AI,ML,ALGORITHM' 카테고리의 다른 글
A star (0) | 2023.12.27 |
---|---|
Gomoku(Five in a Row, Omok) (5/5) - 머신러닝으로 게임 구현 (1) | 2023.10.29 |
Gomoku(Five in a Row, Omok) (4/5) - 훈련 데이터 생성 및 학습 (1) | 2023.10.29 |
Gomoku(Five in a Row, Omok) (3/5) - 속도 최적화 2차 (RANDOM모드 추가) (1) | 2023.10.28 |
Gomoku(Five in a Row, Omok) (2/5) - 속도 최적화 1차 (minimax 속도 개선) (0) | 2023.10.27 |