亦有资源网

C++语言基础到进阶学习资源汇总

零基础也能玩转!用Python 3分钟写出你的第一个五子棋游戏

前言:五子棋的魅力与Python的魔力

五子棋作为历史悠久的策略游戏,凭借简单易学的规则和变幻莫测的战术,深受广大玩家喜爱。而Python作为入门级编程语言,凭借其简洁的语法和丰富的库支持,让编程小白也能轻松实现自己的创意。今天,我们就手把手教你用Python编写一个简单但功能齐全的五子棋游戏,让你在朋友面前秀一把编程技能!

一、准备工作:你需要的工具和环境

1. Python 3:确保已安装Python环境(官网下载:[python.org](https://www.python.org/))。

2. Tkinter库:Python自带的GUI库,无需额外安装,适合快速构建图形界面。

3. 记事本或IDE:推荐使用PyCharm或VS Code编写代码。

二、游戏设计思路

我们的五子棋游戏将实现以下功能:

- 双人对战:通过鼠标左/右键交替落子(黑棋/白棋)。

- 实时胜负判断:当一方连成五子时弹出提示框。

- 棋盘重置:点击按钮可重新开始游戏。

三、代码实现:分步详解

1. 导入库并初始化界面

```python

import tkinter as tk

from tkinter import messagebox

# 创建主窗口

root = tk.Tk()

root.title("Python五子棋")

canvas = tk.Canvas(root, width=450, height=450, bg="saddlebrown")

canvas.pack()

# 棋盘参数

BOARD_SIZE = 15

CELL_SIZE = 30 # 每个格子的大小

board = [[None for _ in range(BOARD_SIZE)] for _ in range(BOARD_SIZE)]

current_player = "black" # 黑棋先手

```2. 绘制棋盘**

```python

# 绘制棋盘线和星位

for i in range(BOARD_SIZE):

canvas.create_line(CELL_SIZE, i*CELL_SIZE + CELL_SIZE,

(BOARD_SIZE-1)*CELL_SIZE, i*CELL_SIZE + CELL_SIZE, fill="white")

canvas.create_line(i*CELL_SIZE + CELL_SIZE, CELL_SIZE,

i*CELL_SIZE + CELL_SIZE, (BOARD_SIZE-1)*CELL_SIZE, fill="white")


# 绘制星位(天元和四个角)

STAR_POSITIONS = [(3,3), (3,11), (11,3), (11,11), (7,7)]

for pos in STAR_POSITIONS:

x, y = pos

canvas.create_oval(x*CELL_SIZE, y*CELL_SIZE,

(x+1)*CELL_SIZE, (y+1)*CELL_SIZE,

fill="white", outline="white")

```

3. 落子逻辑与胜负判断

```python

def place_piece(event):

global current_player

# 计算鼠标点击的棋盘坐标

x = int((event.x) // CELL_SIZE)

y = int((event.y) // CELL_SIZE)

# 检查位置是否合法

if board[y][x] or x < 0 or x>= BOARD_SIZE or y < 0 or y>= BOARD_SIZE:

return


# 绘制棋子

color = current_player

board[y][x] = color

canvas.create_oval(x*CELL_SIZE, y*CELL_SIZE,

(x+1)*CELL_SIZE, (y+1)*CELL_SIZE,

fill=color, outline="black")

# 判断胜负

if check_win(x, y, color):

messagebox.showinfo("游戏结束", f"{color}棋胜利!")

reset_game()

else:

current_player = "white" if current_player == "black" else "black"


def check_win(x, y, color):

# 检查四个方向(横向、纵向、主对角线、副对角线)

directions = [(1,0), (0,1), (1,1), (1,-1)]

for dx, dy in directions:

count = 1

# 向一个方向延伸检查

i, j = x + dx, y + dy

while 0<=i<BOARD_SIZE and 0<=j<BOARD_SIZE and board[j][i] == color:

count +=1

i += dx

j += dy

# 反方向延伸检查

i, j = x - dx, y - dy

while 0<=i<BOARD_SIZE and 0<=j<BOARD_SIZE and board[j][i] == color:

count +=1

i -= dx

j -= dy

if count >=5:

return True

return False


def reset_game():

global board, current_player

board = [[None for _ in range(BOARD_SIZE)] for _ in range(BOARD_SIZE)]

current_player = "black"

canvas.delete("all") # 清空画布

# 重新绘制棋盘

for i in range(BOARD_SIZE):

canvas.create_line(CELL_SIZE, i*CELL_SIZE + CELL_SIZE,

(BOARD_SIZE-1)*CELL_SIZE, i*CELL_SIZE + CELL_SIZE, fill="white")

canvas.create_line(i*CELL_SIZE + CELL_SIZE, CELL_SIZE,

i*CELL_SIZE + CELL_SIZE, (BOARD_SIZE-1)*CELL_SIZE, fill="white")

for pos in STAR_POSITIONS:

x, y = pos

canvas.create_oval(x*CELL_SIZE, y*CELL_SIZE,

(x+1)*CELL_SIZE, (y+1)*CELL_SIZE,

fill="white", outline="white")

```4. 绑定事件与启动循环**

```python

# 绑定鼠标左键落子(黑棋)和右键(白棋)

canvas.bind("", place_piece)

canvas.bind("", place_piece) # 右键


# 重置按钮

reset_btn = tk.Button(root, text="重新开始", command=reset_game)

reset_btn.pack()


root.mainloop()

```四、运行效果

- 界面说明:15x15的棋盘,中央为天元(白圈),点击左键下黑子,右键下白子。

- 胜负提示:当一方连成五子时,弹窗显示胜利信息并重置棋盘。

五、扩展与优化建议

1. AI对手:使用简单算法(如随机落子或贪心算法)实现单人模式。

2. 网络对战:通过Socket或Web框架实现双人联机。

3. 动画效果:添加棋子落子动画或胜利特效。

4. 历史回放:记录每一步操作,支持撤销和回放。

结语:编程的乐趣在于创造

通过这篇教程,你不仅学会了用Python实现经典游戏,更掌握了GUI编程、事件驱动和逻辑判断的核心思想。五子棋的代码虽小,但却是通往更大项目的阶梯。不妨尝试在代码中添加更多创意,比如自定义棋盘大小、AI难度等级,甚至将其包装成可执行文件分享给朋友!#Python#

控制面板
您好,欢迎到访网站!
  查看权限
网站分类
最新留言