软件测试|教你使用Python实现五子棋游戏(一)

简介: 软件测试|教你使用Python实现五子棋游戏(一)

前言

五子棋是我们传统的益智游戏之一,老少皆宜,上手简单,对于锻炼逻辑思维,增强思考能力有很大帮助。那么,我们能不能使用Python来写出五子棋的程序呢,毕竟不是什么时候都有对手和你一起下棋的,编写一个五子棋程序,自己可以随时随地玩这个游戏。

需求

五子棋规则比较简单,有如下需求:

  • 分为黑白两色棋子
  • 黑白两方依次落子
  • 任何一方达成五子连珠即获得胜利
  • 横向纵向斜向五子连珠均符合胜利条件
  • 五子棋棋盘为15*15的正方形棋盘

初级实现

我们之前介绍过tkinter这个库,可以用做GUI程序的开发,现在我们尝试一下使用tkinter来实现五子棋这个游戏。示例代码如下:

from tkinter import *
import tkinter.messagebox  # 弹窗库
import numpy as np

root = Tk()  # 创建窗口
root.title("五子棋")  # 窗口名字
w1 = Canvas(root, width=600, height=600, background='chocolate')
w1.pack()

for i in range(0, 15):
    w1.create_line(i * 40 + 20, 20, i * 40 + 20, 580)
    w1.create_line(20, i * 40 + 20, 580, i * 40 + 20)
w1.create_oval(135, 135, 145, 145, fill='black')
w1.create_oval(135, 455, 145, 465, fill='black')
w1.create_oval(465, 135, 455, 145, fill='black')
w1.create_oval(455, 455, 465, 465, fill='black')
w1.create_oval(295, 295, 305, 305, fill='black')

num = 0
A = np.full((15, 15), 0)
B = np.full((15, 15), '')


def callback(event):
    global num, A
    for j in range(0, 15):
        for i in range(0, 15):
            if (event.x - 20 - 40 * i) ** 2 + (event.y - 20 - 40 * j) ** 2 <= 2 * 20 ** 2:
                break
        if (event.x - 20 - 40 * i) ** 2 + (event.y - 20 - 40 * j) ** 2 <= 2 * 20 ** 2:
            break
    if num % 2 == 0 and A[i][j] != 1:
        w1.create_oval(40 * i + 5, 40 * j + 5, 40 * i + 35, 40 * j + 35, fill='black')
        A[i][j] = 1
        B[i][j] = 'b'
        num += 1
    if num % 2 != 0 and A[i][j] != 1:
        w1.create_oval(40 * i + 5, 40 * j + 5, 40 * i + 35, 40 * j + 35, fill='white')
        A[i][j] = 1.
        B[i][j] = 'w'
        num += 1

    f = [[-1, 0], [-1, 1], [0, 1], [1, 1]]
    for z in range(0, 4):
        a, b = f[z][0], f[z][1]
        count1, count2 = 0, 0
        x, y = i, j
        while B[x][y] == B[i][j]:
            count1 += 1
            if x + a >= 0 and y + b >= 0 and x + a < 15 and y + b < 15 and B[x + a][y + b] == B[i][j]:
                [x, y] = np.array([x, y]) + np.array([a, b])
            else:
                x, y = i, j
                break
        while B[x][y] == B[i][j]:
            count2 += 1
            if x - a < 15 and y - b < 15 and x - a >= 0 and y - b >= 0 and B[x - a][y - b] == B[i][j]:
                [x, y] = np.array([x, y]) - np.array([a, b])
            else:
                break
        if count1 + count2 == 6:
            if B[i][j] == 'b':
                tkinter.messagebox.showinfo('提示', '黑棋获胜')
            else:
                tkinter.messagebox.showinfo('提示', '白棋获胜')


w1.bind("<Button -1>", callback)
w1.pack()


def quit():
    root.quit()


u = Button(root, text="退出游戏", width=10, height=1, command=quit, font=('宋体', 20))
u.pack()

mainloop()

初始运行展示的棋盘如下:
在这里插入图片描述
依次在棋盘上点击各个落子点,进行游戏,我们可以看到黑子白子依次下在棋盘上,当一方实现五子连珠时,出现提示某一方获胜。如下所示:

在这里插入图片描述

代码缺陷

我们可以发现,点击获胜的弹窗之后,棋盘并没有清空重新开始游戏,而是可以继续落子,如下图所示:
在这里插入图片描述
在白棋先获胜之后,点击确定关闭弹窗后,游戏还可以继续进行,直到下一次出现一方五子连珠,再次出现弹窗,这是不符合我们的五子棋的规则的,我们的代码需要优化。

总结

本文主要讲解了使用tkinter编写一个五子棋的游戏小程序,我们只实现了双方交替落子,判断胜利条件等功能,对于结束游戏的逻辑实现不符合五子棋的规则,还需要优化,后面我们将优化这个五子棋游戏程序的脚本。

相关文章
|
1天前
|
存储 程序员 C#
100行python代码,轻松完成贪吃蛇小游戏_c#游戏100行代码
100行python代码,轻松完成贪吃蛇小游戏_c#游戏100行代码
|
1天前
|
程序员 C# Python
100行python代码,轻松完成贪吃蛇小游戏_c#游戏100行代码(2)
100行python代码,轻松完成贪吃蛇小游戏_c#游戏100行代码(2)
|
3天前
|
安全 测试技术 持续交付
在Python Web开发中,测试是一个至关重要的环节
【5月更文挑战第12天】在Python Web开发中,测试至关重要,包括单元测试(unittest模块)、集成测试、功能测试、系统测试、验收测试、性能测试、安全测试和端到端测试。常用的测试工具有unittest、pytest、selenium、requests和coverage。遵循“测试先行”和“持续集成”原则,确保代码质量与稳定性。
141 3
|
3天前
|
Web App开发 测试技术 C++
Playwright安装与Python集成:探索跨浏览器测试的奇妙世界
Playwright是新兴的跨浏览器测试工具,相比Selenium,它支持Chrome、Firefox、WebKit,执行速度快,选择器更稳定。安装Playwright只需一条`pip install playwright`的命令,随后的`playwright install`会自动添加浏览器,无需处理浏览器驱动问题。这一优势免去了Selenium中匹配驱动的烦恼。文章适合寻求高效自动化测试解决方案的开发者。
14 2
|
3天前
|
机器学习/深度学习 人工智能 算法
【Python 机器学习专栏】强化学习在游戏 AI 中的实践
【4月更文挑战第30天】强化学习在游戏AI中展现巨大潜力,通过与环境交互和奖励信号学习最优策略。适应性强,能自主探索,挖掘出惊人策略。应用包括策略、动作和竞速游戏,如AlphaGo。Python是实现强化学习的常用工具。尽管面临训练时间长和环境复杂性等挑战,但未来强化学习将与其他技术融合,推动游戏AI发展,创造更智能的游戏体验。
|
3天前
|
机器学习/深度学习 算法 UED
【Python 机器学习专栏】A/B 测试在机器学习项目中的应用
【4月更文挑战第30天】A/B测试在数据驱动的机器学习项目中扮演关键角色,用于评估模型性能、算法改进和特征选择。通过定义目标、划分群组、实施处理、收集数据和分析结果,A/B测试能帮助优化模型和用户体验。Python提供工具如pandas和scipy.stats支持实验实施与分析。注意样本量、随机性、时间因素和多变量分析,确保测试有效性。A/B测试助力于持续改进机器学习项目,实现更好的成果。
|
3天前
|
测试技术 Python
python集成测试执行测试
【4月更文挑战第20天】
14 6
|
3天前
|
JSON API 数据格式
Python测试架构requests-mock
【4月更文挑战第19天】
10 1
|
3天前
|
测试技术 持续交付 Python
Python测试架构pytest
【4月更文挑战第19天】pytest 是一个强大且灵活的 Python 测试框架,它可以帮助你编写高效且可维护的测试。通过遵循上述基本架构指南,你可以开始使用 pytest 来提高你的 Python 项目的质量和可靠性。
10 2
|
3天前
|
测试技术 Python
Python测试架构unittest
【4月更文挑战第19天】
7 3

热门文章

最新文章