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.视频展示

点击观看演示视频(Bilibili)

4.代码托管到码云

5.课程总结

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

posted @ 2025-06-04 21:07  St0ry  阅读(30)  评论(0)    收藏  举报