首页 > 编程语言 >软件测试|教你使用Python实现五子棋游戏(一)

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

时间:2023-02-19 12:33:42浏览次数:48  
标签:15 Python create 五子棋 40 w1 20 软件测试

前言

五子棋是我们传统的益智游戏之一,老少皆宜,上手简单,对于锻炼逻辑思维,增强思考能力有很大帮助。那么,我们能不能使用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()

初始运行展示的棋盘如下:

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

依次在棋盘上点击各个落子点,进行游戏,我们可以看到黑子白子依次下在棋盘上,当一方实现五子连珠时,出现提示某一方获胜。如下所示:

软件测试|教你使用Python实现五子棋游戏(一)_示例代码_02

代码缺陷

我们可以发现,点击获胜的弹窗之后,棋盘并没有清空重新开始游戏,而是可以继续落子,如下图所示:

软件测试|教你使用Python实现五子棋游戏(一)_示例代码_03

在白棋先获胜之后,点击确定关闭弹窗后,游戏还可以继续进行,直到下一次出现一方五子连珠,再次出现弹窗,这是不符合我们的五子棋的规则的,我们的代码需要优化。

总结

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


标签:15,Python,create,五子棋,40,w1,20,软件测试
From: https://blog.51cto.com/u_15640304/6066688

相关文章

  • 软件测试|matplotlib中文不显示的解决方案
    前言当我使用matplotlib结合wordcloud,jieba绘制词云图时,发现我的代码在没有任何报错的情况下,输出的图是下面这样的,我想了很多办法都不顶用,包括改编码方式等等,后面一查,是matp......
  • 软件测试|教你使用Python快速绘制酷炫词云图
    前言词云图现在似乎成了各个互联网产品年终盘点的标准形式,比如我们的热搜,我们QQ音乐网易云音乐最喜欢的歌手最喜欢的歌曲等等,词云图实在是太契合互联网时代了。那么我们能不......
  • 软件测试|测试开发之路--UI 自动化常用设计模式
    接上一次的帖子,今天讲一下我再UI自动化中常用的设计模式。由于网上已经有非常多的文章详细讲解了设计模式的编码实现,所以我今天也就不讲实现细节了。就是讲我也讲不出什......
  • 软件测试|Python数据可视化神器——pyecharts教程(一)
    前言我们都知道百度开源了一个Echarts数据可视化库,支持绘制各种主流的图表。Python在数据分析方面是十分强大的,于是,pyecharts就应运而生了。pyecharts简介及安装pyecharts继......
  • 软件测试|数据可视化神器——pyecharts教程(二)
    前言上篇文章我们介绍了pyecharts的安装和绘制基础的柱状图,本篇文章我们将介绍绘制Map图,很多时候,我们统计数据都会分地区来展示,将数据和地图结合会更加直观,所以,我们今天就来......
  • 软件测试|一文教你Python实现不同数据类型互转
    前言日常工作中,我们有的时候需要将一种类型的数据转换成其他类型的数据,便于我们的操作。字符串与数字类型转换字符串转数字字符串转数字,默认只处理由纯数字组成的字符串。s......
  • 软件测试|一文弄懂Python集合相关操作
    前言集合是Python的基本数据类型,是我们工作中经常会用到的数据类型,Python有一系列关于集合的操作,作为一个Pythoner,我们必须要掌握这些操作。集合的介绍集合是Python的基本数......
  • 软件测试|Python数据可视化神器——pyecharts教程(三)
    前言前面两篇文章我们使用pyecharts绘制了柱状图以及基于地图的热力图等图像,在我们的日常工作中,还有饼状图也是我们经常使用的图像,下面我们来介绍一下使用pyecharts绘制饼状......
  • 软件测试|把datetime拍在沙滩上的pendulum模块
    前言之前我们有一篇文章,使用datetime模块来获取昨天今天明天的日期,不说非常复杂,但还是要说一下,还是有点麻烦。而且datetime模块还有一大缺点,就是对于时区的处理功能不够强大......
  • 软件测试|Python列表的使用,你都会了吗?(一)
    前言列表是Python的基本数据类型之一,也是我们日常使用Python中,使用较多的数据类型。Python内置了很多关于列表的操作,这些操作是我们必须掌握的,下面我们就来介绍这些操作。创......