Python实用:简易五子棋(Gobang)-上篇(GUI界面的设计)

版权声明:本文为博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/NICE__FUTURE/article/details/81211512

#问题情景:

想要写一个人人对弈的五子棋游戏,要是GUI界面的,能够判断输赢、提示游戏结束,能重新开局。

#思路:

  • 分析:我需要棋盘、棋子、输赢的显示区、落棋方的提示区以及一个重新开局按钮。使用Python库 tkinter
  • 棋盘绘制:
    • 窗口左半部分放置一块画布 canvas 用于棋盘绘制;右半部分放置四个标签 label ,分别用来落棋方提示的图片放置、文字放置,结果显示和状态显示;此外右下角放置一个按钮 button 用于重置。
    • 画布上设置背景,绘制线条、点、坐标的字母和数字
    • 将标签和按钮放到指定位置

#实现:

import tkinter as tk  #补充:如果你用的是Python2,那么很可能库名是Tkinter

"""窗口主体"""
root = tk.Tk()

root.title("Gobang")
root.geometry("760x560")

"""棋子提示"""
side_canvas = tk.Canvas(root, width = 220, height = 50)
side_canvas.grid(row = 0, column = 1)
side_canvas.create_oval(110 - PIECE_SIZE, 25 - PIECE_SIZE,
                        110 + PIECE_SIZE, 25 + PIECE_SIZE,
                        fill = piece_color, tags = ("show_piece") )
"""棋子提示标签"""
var = tk.StringVar()
var.set("执黑棋")
person_label = tk.Label(root, textvariable = var, width = 12, anchor = tk.CENTER, 
                        font = ("Arial", 20) )
person_label.grid(row = 1, column = 1)

"""输赢提示标签"""
var1 = tk.StringVar()
var1.set("")
result_label = tk.Label(root, textvariable = var1, width = 12, height = 4, 
                        anchor = tk.CENTER, fg = "red", font = ("Arial", 25) )
result_label.grid(row = 2, column = 1, rowspan = 2)

"""游戏结束提示标签"""
var2 = tk.StringVar()
var2.set("")
game_label = tk.Label(root, textvariable = var2, width = 12, height = 4, 
                        anchor = tk.CENTER, font = ("Arial", 18) )
game_label.grid(row = 4, column = 1)

"""重置按钮"""
reset_button = tk.Button(root, text = "重新开始", font = 20, 
                          width = 8, command = gameReset)
reset_button.grid(row = 5, column = 1)

"""棋盘绘制"""
#背景
canvas = tk.Canvas(root, bg = "saddlebrown", width = 540, height = 540)
canvas.bind("<Button-1>", coorBack)  #对鼠标进行事件绑定,方便获取点击位置的坐标,下篇会用到
canvas.grid(row = 0, column = 0, rowspan = 6)
#线条
for i in range(15):
    canvas.create_line(32, (35 * i + 38), 522, (35 * i + 38))
    canvas.create_line((35 * i + 32), 38, (35 * i + 32), 528)
#点
point_x = [3, 3, 11, 11, 7]
point_y = [3, 11, 3, 11, 7]
for i in range(5):
    canvas.create_oval(35 * point_x[i] + 28, 35 * point_y[i] + 33, 
                       35 * point_x[i] + 36, 35 * point_y[i] + 41, fill = "black")
#数字坐标
for i in range(15):
    label = tk.Label(canvas, text = str(i + 1), fg = "black", bg = "saddlebrown",
                     width = 2, anchor = tk.E)
    label.place(x = 2, y = 35 * i + 28)
#字母坐标
count = 0
for i in range(65, 81):
    label = tk.Label(canvas, text = chr(i), fg = "black", bg = "saddlebrown")
    label.place(x = 35 * count + 25, y = 2)
    count += 1

"""窗口循环"""
root.mainloop()

#效果图:
效果图

下篇将分享内部逻辑的写法。(如何落子以及判断输赢)


答读者问:
当时写这篇文章时,代码是完整的一份,我把他拆成了两个部分来写。
所以在拆分代码的时候有所疏漏,导致展示的代码中出现有的全局变量找不到定义的情况。
解决方式:
前往GitHub查看完整代码:传送门

最后:
感谢阅读,预祝五一假期愉快~

展开阅读全文

GUI面的管理程序·

12-29

这个是考试作业,知道这样拿出来让大家做对自己是不负责的rn可是大学有的时候一些东西是只要不挂科就可以了rn这门课实在不太感兴趣,希望有一个人能出来帮我解决一下rn我想这种程序也不难吧,对一些高手的话,如果愿意的话rn希望有高手帮忙做一下·毕竟一个学期就剩这么天,现在想看也来不及rn还有好多门课是要考试背书的,时间实在紧迫rnrn哪位高手写好能发到我邮箱:hzdtc8@gmail.comrn然后再邮件里面附上回帖姓名,我会结贴····rnrnrnrn一 设计内容 rnrn设计基于文件结构的学籍管理系统,具有信息显示、录入、修改、查询和删除的功能。 rn二 设计要求 rn1. 录入学生基本信息功能的界面如图录入界面。 rn2. 修改学生基本信息功能的界面如图修改界面。 rn3. 查询学生基本信息功能的界面如图查询界面。 rn4. 删除学生基本信息功能的界面如图删除界面。 rn三 总体设计 rn学籍管理系统共有6个Java 源文件。 rnjava 文件 rn类之间的主要关系如图所示。 rn rn1. StudentManager.java rn该Java文件的类负责创建学籍管理系统的主窗口。该文件含有main方法,程序从该类开始执行。 rn2. StudentSituation.java rn该文件的类负责创建学籍管理系统的学生信息录入界面。 rnModifySituation.javarn该文件的类负责创建学籍管理系统的学生信息修改界面。 rn3. Inquest.java rn该文件的类负责创建学籍管理系统的学生信息查询界面。 rn4. Delete.java rn该文件的类负责创建学籍管理系统的学生信息删除界面。 rn5. Student.java rn负责创建存放学生信息的对象。rnrn四 运行效果 rn rn主窗口 rn rn录入界面 rn rn查询界面 rn rn修改界面 rn rn rn rn删除界面 rn五 实训作业 rn1、完成上述软件设计要求。 rn2、编写一个基于文件结构的库存管理系统。要求有录入库存信息功能界面,修改库存信息功能界面、查询库存信息功能界面、删除库存信息功能界面。rnrn 论坛

没有更多推荐了,返回首页