编写五子棋的完整python代码_python实现五子棋程序
时间: 2023-07-23 16:06:40 浏览: 47
以下是一个简单的五子棋程序的Python实现。代码中包括了游戏界面的绘制、游戏规则的判定和AI的实现。
```python
import pygame
import random
# 初始化游戏
pygame.init()
# 设置游戏界面大小
SIZE = width, height = 650, 650
# 设置窗口标题
pygame.display.set_caption("五子棋")
# 设置游戏界面背景色
background_color = (249, 214, 91)
# 设置棋盘大小
board_size = 15
# 设置棋子大小
piece_size = 40
# 设置棋子颜色
BLACK = (0, 0, 0)
WHITE = (255, 255, 255)
# 创建游戏界面
screen = pygame.display.set_mode(SIZE)
# 创建棋盘
board = [[0 for i in range(board_size)] for j in range(board_size)]
# 初始化游戏状态
game_over = False
winner = None
# 绘制棋盘
def draw_board():
for i in range(board_size):
pygame.draw.line(screen, BLACK, [piece_size // 2, piece_size // 2 + i * piece_size], [piece_size // 2 + (board_size - 1) * piece_size, piece_size // 2 + i * piece_size], 2)
pygame.draw.line(screen, BLACK, [piece_size // 2 + i * piece_size, piece_size // 2], [piece_size // 2 + i * piece_size, piece_size // 2 + (board_size - 1) * piece_size], 2)
# 绘制棋子
def draw_piece(row, col, color):
pygame.draw.circle(screen, color, [(col+1)*piece_size, (row+1)*piece_size], piece_size//2-2)
# 判断是否胜利
def check_win(row, col, color):
# 水平方向
count = 1
for i in range(1, 5):
if col+i >= board_size or board[row][col+i] != color:
break
count += 1
for i in range(1, 5):
if col-i < 0 or board[row][col-i] != color:
break
count += 1
if count >= 5:
return True
# 垂直方向
count = 1
for i in range(1, 5):
if row+i >= board_size or board[row+i][col] != color:
break
count += 1
for i in range(1, 5):
if row-i < 0 or board[row-i][col] != color:
break
count += 1
if count >= 5:
return True
# 对角线方向
count = 1
for i in range(1, 5):
if row+i >= board_size or col+i >= board_size or board[row+i][col+i] != color:
break
count += 1
for i in range(1, 5):
if row-i < 0 or col-i < 0 or board[row-i][col-i] != color:
break
count += 1
if count >= 5:
return True
# 反对角线方向
count = 1
for i in range(1, 5):
if row+i >= board_size or col-i < 0 or board[row+i][col-i] != color:
break
count += 1
for i in range(1, 5):
if row-i < 0 or col+i >= board_size or board[row-i][col+i] != color:
break
count += 1
if count >= 5:
return True
return False
# AI下棋
def ai_move():
empty_list = []
for i in range(board_size):
for j in range(board_size):
if board[i][j] == 0:
empty_list.append((i, j))
if empty_list:
return random.choice(empty_list)
else:
return None
# 游戏循环
while not game_over:
# 处理事件
for event in pygame.event.get():
if event.type == pygame.QUIT:
game_over = True
elif event.type == pygame.MOUSEBUTTONDOWN and event.button == 1:
if winner is None:
x, y = event.pos
row = y // piece_size - 1
col = x // piece_size - 1
if row >= 0 and row < board_size and col >= 0 and col < board_size and board[row][col] == 0:
draw_piece(row, col, BLACK)
board[row][col] = 1
if check_win(row, col, 1):
winner = "黑方"
else:
move = ai_move()
if move is not None:
row, col = move
draw_piece(row, col, WHITE)
board[row][col] = 2
if check_win(row, col, 2):
winner = "白方"
else:
winner = "平局"
# 绘制界面
screen.fill(background_color)
draw_board()
for i in range(board_size):
for j in range(board_size):
if board[i][j] == 1:
draw_piece(i, j, BLACK)
elif board[i][j] == 2:
draw_piece(i, j, WHITE)
if winner is not None:
font = pygame.font.Font(None, 36)
text = font.render(winner + "胜利!", True, BLACK)
screen.blit(text, ((width - text.get_width()) // 2, (height - text.get_height()) // 2))
# 更新界面
pygame.display.update()
# 退出游戏
pygame.quit()
```
这个程序实现了一个基本的五子棋游戏,包括了游戏界面的绘制、游戏规则的判定和AI的实现。用户可以通过鼠标点击来下棋,游戏界面会实时更新棋局情况,并在胜利时显示胜者信息。AI的实现比较简单,只是随机选择一个空位置落子,没有使用任何高级算法。