五子棋游戏设计(Python版)
效果演示

❝hello,大家好,我是程序员黎明 ,作为一个热爱技术分享的博主,我今天想和大家聊一聊如何用Python设计一个简单的五子棋游戏。五子棋这个游戏规则简单,但也很容易激发思考,特别是在编程实现的过程中,能够锻炼逻辑能力。
首先,我们需要明确五子棋的基本规则:
-
玩家在19×19的棋盘上轮流下子。 -
任意一方首先在横、竖、或斜线上连成五个同色棋子即为获胜。 -
棋子不可覆盖已落下的子。
为了实现这个游戏,我们可以使用Python的tkinter库来创建一个简单的图形用户界面。tkinter能够让我们用少量代码实现直观的棋盘界面,用户点击屏幕就能下子。
项目步骤
-
棋盘的绘制:我们将创建一个19×19的网格来模拟五子棋的棋盘。 -
落子机制:检测玩家点击棋盘的坐标,并根据当前玩家下子。 -
胜负判定:每次下子后,判断当前下子是否已经连成五子。 -
游戏交互:实现简单的提示机制,比如显示当前轮到哪位玩家下子,以及游戏结束后的提示。
代码实现
import tkinter as tk
from tkinter import messagebox
# 定义棋盘的大小和棋子的半径
BOARD_SIZE = 19
GRID_SIZE = 30
STONE_RADIUS = 14
class Gomoku:
def __init__(self, root):
self.root = root
self.root.title("五子棋教学")
self.canvas = tk.Canvas(self.root, width=GRID_SIZE*BOARD_SIZE, height=GRID_SIZE*BOARD_SIZE)
self.canvas.pack()
self.current_player = 'black' # 黑子先手
self.board = [[None for _ in range(BOARD_SIZE)] for _ in range(BOARD_SIZE)]
self.draw_board()
self.canvas.bind("<Button-1>", self.on_click)
def draw_board(self):
"""绘制棋盘"""
for i in range(BOARD_SIZE):
self.canvas.create_line(GRID_SIZE * i, 0, GRID_SIZE * i, GRID_SIZE * BOARD_SIZE)
self.canvas.create_line(0, GRID_SIZE * i, GRID_SIZE * BOARD_SIZE, GRID_SIZE * i)
print("棋盘已经画好,现在可以开始下子了!")
def on_click(self, event):
"""处理点击事件,下子"""
x = event.x // GRID_SIZE
y = event.y // GRID_SIZE
if self.board[y][x] is None: # 判断是否已经有棋子
self.place_stone(x, y)
if self.check_win(x, y):
messagebox.showinfo("游戏结束", f"{self.current_player} 获胜!")
self.canvas.unbind("<Button-1>") # 禁用鼠标点击事件
else:
self.switch_player()
def place_stone(self, x, y):
"""在指定位置放置棋子"""
x_pos = x * GRID_SIZE + GRID_SIZE // 2
y_pos = y * GRID_SIZE + GRID_SIZE // 2
color = 'black' if self.current_player == 'black' else 'white'
self.canvas.create_oval(x_pos - STONE_RADIUS, y_pos - STONE_RADIUS,
x_pos + STONE_RADIUS, y_pos + STONE_RADIUS, fill=color)
self.board[y][x] = self.current_player
print(f"{self.current_player} 在位置 ({x}, {y}) 落子")
def check_win(self, x, y):
"""检查是否有玩家获胜"""
directions = [(1, 0), (0, 1), (1, 1), (1, -1)] # 横、竖、正斜、反斜
for dx, dy in directions:
count = 1
count += self.count_stones(x, y, dx, dy)
count += self.count_stones(x, y, -dx, -dy)
if count >= 5:
return True
return False
def count_stones(self, x, y, dx, dy):
"""计算同方向的相同颜色棋子数量"""
count = 0
player = self.board[y][x]
i, j = x + dx, y + dy
while 0 <= i < BOARD_SIZE and 0 <= j < BOARD_SIZE and self.board[j][i] == player:
count += 1
i += dx
j += dy
return count
def switch_player(self):
"""切换玩家"""
self.current_player = 'white' if self.current_player == 'black' else 'black'
print(f"现在轮到 {self.current_player} 下子了")
# 启动游戏
if __name__ == "__main__":
root = tk.Tk()
game = Gomoku(root)
root.mainloop()
代码讲解
-
Gomoku类是我们游戏的核心,它负责棋盘的绘制、用户点击的处理以及胜负的判断。 -
draw_board()负责画出19×19的棋盘。 -
on_click()函数处理玩家的点击事件,通过点击位置计算出棋盘坐标,然后调用place_stone()函数下子。 -
check_win()负责检测玩家是否已经获胜,通过在四个方向上连续计算相同颜色的棋子数量来判断。
文章总结
通过这个简单的五子棋游戏,我们不仅能够学习Python的基本GUI编程,还可以进一步理解如何实现游戏中的交互和胜负判断。如果你有任何问题或希望了解更多,欢迎在评论区留言,我会一一解答!

