20242129《Python程序设计》实验四报告
20242129 2024-2025-2 《Python程序设计》实验四报告
课程:《Python程序设计》
班级: 2421
姓名: 史若晨
学号:20242129
实验教师:王志强
实验日期:2025年5月14日
必修/选修:公选课
1. 实验内容
- 使用python编写一个井字棋小游戏
2. 实验要求
- 程序能运行,功能丰富。(需求提交源代码,并建议录制程序运行的视频)
- 综合实践报告,要体现实验分析、设计、实现过程、结果等信息,格式规范,逻辑清晰,结构合理
- 在实践报告中,需要对全课进行总结,并写课程感想体会、意见和建议等
- 程序代码托管到码云
3. 实验过程及结果
1. 实验代码
- 这段代码实现了一个简单的井字棋游戏,使用Tkinter创建窗口,棋盘为3x3按钮矩阵,界面简洁直观。
import tkinter as tk
from tkinter import messagebox
import random
class jingziqi:
def __init__(self, root): #初始化窗口和游戏状态
self.root = root
self.root.title("井字棋")
self.board = [" " for _ in range(9)] #9个格子的棋盘
self.current_player = "X" #玩家先手
self.buttons = [] #存储按钮对象
self.create_board() #创建棋盘界面
self.restart_button = tk.Button(self.root, text="重新开始", font=("Arial", 14), command=self.restart_game)
self.restart_button.grid(row=3, column=0, columnspan=3, sticky="nsew", pady=10)
def create_board(self): #创建棋盘
for i in range(9):
btn = tk.Button(
self.root, text=" ", font=("Arial", 32), width=3, height=1, command=lambda i=i: self.make_move(i)
)
btn.grid(row=i//3, column=i%3)
self.buttons.append(btn)
- 游戏结束后可以重新开始继续游玩
def restart_game(self):
self.board = [" " for _ in range(9)]
for btn in self.buttons:
btn.config(text=" ", state=tk.NORMAL)
self.current_player = "X"
- 玩家(X)与机器人(O)轮流在棋盘上下棋,玩家先手。
def make_move(self, idx): #玩家X落子
if self.board[idx] == " " and self.current_player == "X":
self.board[idx] = "X"
self.buttons[idx].config(text="X")
if self.check_win("X"):
messagebox.showinfo("游戏结束", "玩家 X 获胜!")
self.disable_buttons()
return
elif " " not in self.board:
messagebox.showinfo("游戏结束", "平局!")
self.disable_buttons()
return
self.current_player = "O"
self.root.after(500, self.robot_move) #机器人延迟落子
- 智能机器人,优先选择能获胜的位置,其次阻止玩家,否则随机落子
def robot_move(self): #机器人落子
empty_positions = [i for i, cell in enumerate(self.board) if cell == " "]
for idx in empty_positions: #机器人能赢则赢
self.board[idx] = "O"
if self.check_win("O"):
self.buttons[idx].config(text="O")
messagebox.showinfo("游戏结束", "机器人 O 获胜!")
self.disable_buttons()
return
self.board[idx] = " "
for idx in empty_positions: #玩家能赢则堵
self.board[idx] = "X"
if self.check_win("X"):
self.board[idx] = "O"
self.buttons[idx].config(text="O")
self.current_player = "X"
return
self.board[idx] = " "
if empty_positions: #或者随机
idx = random.choice(empty_positions)
self.board[idx] = "O"
self.buttons[idx].config(text="O")
if self.check_win("O"):
messagebox.showinfo("游戏结束", "机器人 O 获胜!")
self.disable_buttons()
return
elif " " not in self.board:
messagebox.showinfo("游戏结束", "平局!")
self.disable_buttons()
return
self.current_player = "X"
- 通过列表记录棋盘状态,判断胜负条件,游戏结束自动弹窗提示并退出。
def check_win(self, player): #检查玩家是否获胜
win_combinations = [
(0, 1, 2), (3, 4, 5), (6, 7, 8), #横向
(0, 3, 6), (1, 4, 7), (2, 5, 8), #纵向
(0, 4, 8), (2, 4, 6) #斜向
]
for combo in win_combinations:
if self.board[combo[0]] == self.board[combo[1]] == self.board[combo[2]] == player:
return True
return False
if __name__ == "__main__": #启动游戏
root = tk.Tk()
jingziqi = jingziqi(root)
root.mainloop()
2.棋盘图形界面展示

3.视频展示
4.代码托管到码云

5.课程总结
王老师的课幽默风趣,课堂气氛活跃,通过这学期的python公选课,我学到不少,从初识python输"hello word!"到后来能独立写一段程序,这其中并不是顺利的,从函数到模块再到文件和爬虫,一步步走下来,我也基本完成学期初定下来的目标,回顾以前的课堂,觉得非常充实,当然摸鱼也很舒服。最后感谢王志强老师的指导和照顾。

浙公网安备 33010602011771号