围棋qingGo_0_0

这篇具有很好参考价值的文章主要介绍了围棋qingGo_0_0。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

qingGo_0_0需求:

1,设计一个9路棋盘,对弈双方轮流落子
2,已落子的点不能再落子
3,棋盘上没有空点时,统计双方棋子数量,多的一方赢

设计:

1,使用QipanModel类建立棋盘模型
围棋qingGo_0_0围棋qingGo_0_0
 1 class QipanModel():
 2     def __init__(self,n=9):
 3         self.n = n #棋盘路数,默认9路棋盘
 4         #棋盘点位,从(1,1)开始,(9,9)结束
 5         #用字典表示,例"1_1":0,  0空,1黑,-1白,初始所有点为空
 6         self.dot = {f'{i}_{j}':0 for i in range(1,self.n+1) for j in range(1,self.n+1)}
 7         #棋子数量,黑子白子初始为0
 8         self.black_num = 0
 9         self.white_num = 0
10         
11     #更改点位状态,(x,y)是要更改的点位
12     def update_dot_status(self,x:int,y:int,color:str):
13         if color == 'black':
14             self.dot[f'{x}_{y}'] = 1
15             self.black_num+=1
16         elif color == "white":
17             self.dot[f'{x}_{y}'] = -1
18             self.white_num+=1
19             
20     #查看点位状态
21     def select_dot_status(self,x,y):
22         print(f'点({x},{y})为{self.dot[f"{x}_{y}"]}')
23         
24     #获取所有空的点位
25     def empty_dot(self):
26         return [k for k in self.dot if self.dot[k] == 0]
QipanModel

2,用继承Tk类的QipanView实现界面
围棋qingGo_0_0围棋qingGo_0_0
 1 from tkinter import *
 2 
 3 class QipanView(Tk):
 4     def __init__(self,n=9):
 5         print("qingGo棋盘开始绘制!!!")
 6         Tk.__init__(self)  ###父类必须初始化
 7         self.n = n  #9路棋盘
 8         self.title("围棋qingGo_0_0")
 9 
10 
11         # 创建画布
12         self.canvas = Canvas(self, width=600, height=500, bg='red')
13         self.canvas.pack()
14         # 画棋盘
15         self.size = 40  #围棋每小格的长度,每小格长度(单位是像素)
16         # 画外框线
17         # 起点start_dot(sx,sy) 终点end_dot(ex,ey)
18         sx = self.canvas.winfo_x() + 20
19         sy = self.canvas.winfo_y() + 20
20         ex = sx + self.size * (self.n - 1)
21         ey = sy + self.size * (self.n - 1)
22         self.canvas.create_rectangle(sx, sy, ex, ey, fill='')
23         # 画竖线
24         # 外框线画好因此只需画n-2条线
25         # 竖线起点每条线x递增size,y不变
26         for i in range(1, self.n - 1):
27             self.canvas.create_line(sx + self.size * i, sy, sx + self.size * i, ey)
28         # 画横线,每条线y递增size,x不变
29         for i in range(1, self.n - 1):
30             self.canvas.create_line(sx, sy + self.size * i, ex, sy + self.size * i)
31             self.wm_attributes('-topmost', 1)  # 确保窗口在最上层
32 
33         print("qingGo棋盘绘制完成!!!")
34 
35 
36     # x,y是坐标,从1开始,(1,1)开始,(9,9)结束,棋手落子时,传入坐标点,棋手颜色
37     def luozi(self, x: int, y: int,color='black'):
38         # sx,sy是绘制棋盘外框线时左上角的坐标
39         sx = self.canvas.winfo_x() + 20
40         sy = self.canvas.winfo_y() + 20
41         # 棋子左上角和右下角的坐标分别如下,加2减2为了让棋子小一点
42         x1 = sx + (x - 1) * self.size - self.size / 2 + 2
43         y1 = sy + (y - 1) * self.size - self.size / 2 + 2
44         x2 = sx + (x - 1) * self.size + self.size / 2 - 2
45         y2 = sy + (y - 1) * self.size + self.size / 2 - 2
46         self.canvas.create_oval(x1, y1, x2, y2, fill=color)  # 画棋子
47         self.update() #更新画布,不然画不了
QipanView

3,创建棋手类,用于作为对弈双方的抽象
围棋qingGo_0_0围棋qingGo_0_0
 1 import random
 2 from qingGo.qingGo0_0.caipan import Caipan
 3 from qingGo.qingGo0_0.qipan_model import QipanModel
 4 from qingGo.qingGo0_0.qipan_view import QipanView
 5 
 6 class Qishou():
 7     def __init__(self,color='black'):
 8         self.color = color
 9         print(self.color+"方就位!")
10 
11     #下棋
12     def xiaqi(self, qipan_model:QipanModel, qing_view:QipanView, caipan:Caipan):
13         # 获取空点
14         empty_dot = qipan_model.empty_dot()
15         l = len(empty_dot)
16         if l == 0:
17             print("棋盘满了!请裁判判定胜负!!!")
18             caipan.who_win(qipan_model)
19             return "棋盘满了!"
20 
21         #用随机函数,选择一个点
22         dot = empty_dot[random.randint(0,l-1)]
23         x = int(dot[0])
24         y = int(dot[2])
25         #更改棋盘中点状态
26         qipan_model.update_dot_status(x, y, color=self.color)
27         #落子,界面展示
28         qing_view.luozi(x,y,color=self.color)
29         #落子后裁判报位置
30         caipan.luozi_place(x, y, self.color)
Qishou

4,裁判类,棋手落子后播报位置,判断胜负
围棋qingGo_0_0围棋qingGo_0_0
 1 from qingGo.qingGo0_0.qipan_model import QipanModel
 2 class Caipan():
 3     def __init__(self):
 4         print("裁判上场!")
 5 
 6     #棋手下棋后裁判报位置
 7     def luozi_place(self,x,y,color):
 8         print(f"{color} 落子在({x},{y})")
 9     # 判断胜负
10     def who_win(self,qipan_model:QipanModel):
11         print(f"黑子:{qipan_model.black_num},白子:{qipan_model.white_num}")
12         if qipan_model.black_num>qipan_model.white_num:
13             print("黑方获得胜利!")
14         else:
15             print("白方获得胜利!")
Caipan

5,创建run.py实现功能
围棋qingGo_0_0围棋qingGo_0_0
 1 import random
 2 import time
 3 
 4 from qingGo.qingGo0_0.caipan import Caipan
 5 from qingGo.qingGo0_0.qipan_model import QipanModel
 6 from qingGo.qingGo0_0.qipan_view import QipanView
 7 from qingGo.qingGo0_0.qishou import Qishou
 8 
 9 if __name__ == '__main__':
10     #绘制棋盘
11     qv = QipanView()
12 
13     #初始化模型
14     qm = QipanModel()
15     #白方上场
16     w = Qishou("white")
17     #黑方上场
18     b = Qishou("black")
19     #裁判上场
20     cp = Caipan()
21 
22     #下棋次数为9*9,加1是为了看棋盘满了后的效果
23     i = qm.n**2+1
24     while i>0:
25         if i%2 == 1:
26             w.xiaqi(qm, qv,cp)
27         else:
28             b.xiaqi(qm, qv,cp)
29         i-=1
30         time.sleep(0.05)
31 
32     # 画画功能
33     qv.mainloop()
run.py

 文章来源地址https://www.toymoban.com/news/detail-416144.html

效果图:

围棋qingGo_0_0

 

简单的目录结构,其中的Pictures文件夹是其他项目的,与此无关

围棋qingGo_0_0

 总结:

    忽略美观程度,可以看到,效果已经有了,毕竟是初代程序,等后续升级.

    至此,我们可以得出结论,在这个版本中,想要赢的胜利,只需要先下棋就行了,毕竟需求没有提到要吃子

 

 

 

 

 

 

 

 

                    

到了这里,关于围棋qingGo_0_0的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 用html实现一个静态登陆页面-可根据需求更改样式

    一、创建html文件,vscode下载相关插件 我们先选择一个文件夹创建login.html,.之前的文件命无所谓,.之后就必须为html或者htm。 在编辑改文件输入!且出现提示后按回车或按tab快捷生成基础代码。 然后我们下载一个可以方便我们开发的插件。 搜索之后点击一下然后下载即可。

    2024年02月04日
    浏览(64)
  • 教你如何写一个符合自己需求的小程序日历组件

    很多时候,我们生活中会有各种打卡的情况,比如 keep 的运动打卡、单词的学习打卡和各种签到打卡或者酒店的入住时间选择,这时候就需要我们书写一个日历组件来处理我们这种需求。 但是更多时候,我们都是网上找一个插件直接套用了,有没有想过自己实现一下呢?如果

    2024年02月10日
    浏览(48)
  • 《软件需求分析与设计》课程综合实践——需求规格说明书

    东莞理工学院 《软件需求分析与设计》课程综合实践 项目名称:《XX培训机构教学管理系统》 需求规格说明书 学院:计算机与网络安全学院 班级: 小组成员: 1 引言 1.1 编写目的 1.2 背景 1.3 定义 1.4 参考资料 2 任务概述 2.1 目标 2.2 用户的特点 2.3 假定和约束 3 需求规定 3

    2024年02月09日
    浏览(80)
  • Unity 从0开始编写一个技能编辑器_01_分析需求

    入职以来一直很想实现一个技能编辑器,在积累了一些经验以后,决定利用ScriptableObject开发一个,在此记录 1.简单的需求分析 在游戏开发中,技能系统是一个至关重要的组成部分。技能决定了游戏角色可以执行的各种动作,例如攻击、治疗、移动等。通常,技能由多个元素

    2024年02月09日
    浏览(43)
  • 高效的敏捷测试第九课 ATDD、需求分析、需求评审和设计评审

    第20讲:没有 ATDD,就没有用户故事的可测试性 从这一讲开始,我们就进入了第 4 部分的学习: 测试左移更体现敏捷测试的价值 。因为敏捷更提倡团队对质量负责、预防缺陷胜于发现缺陷,这两点就意味着我们要构建出高质量的产品,把质量构建推向源头——需求,把测试活

    2023年04月23日
    浏览(91)
  • 架构设计之需求分析

    大家好,我是易安。 设计架构的第一步是需求分析。那么,为什么要做需求分析?如何做好需求分析?今天我们一起聊一聊需求分析这件事儿 为何要做需求分析? 首先 ,当然是因为我们做软件本身就是为了满足用户需求。那么,用户需求到底为何,我们需要清楚定义。 其

    2024年02月04日
    浏览(40)
  • 围棋与育种

    最近因为娃子报名了围棋课,我本着交一次课学两个人的态度,开始学习围棋,之前完全不懂,,买了些书,听了些课,有所得。从开始到入门,学了三个多月,现在6级水平,了解了基本的攻杀技巧,会判断输赢。 下面截图是今天的一盘棋,执黑胜利27子。 围棋作为最后被

    2024年02月11日
    浏览(33)
  • 某软件的一个模块的需求规格说明书中描述【软件测试题目】

    某软件的一个模块的需求规格说明书中描述 (1)年薪制员工:严重过失,扣年终风险金的4%;过失,扣年终风险金的2% (2)非年薪制员工:严重过失,扣除当月薪资的8%;过失,扣除当月薪资的4% (1)分析原因及结果 原因 c1:年薪制员工 c2:非年薪制员工 c3:过失 c4:严重过失

    2024年02月08日
    浏览(50)
  • 需求分析案例:全局错误码设计

    本文介绍了我在一些业务系统中遇到的错误提示问题,以及进行需求分析和设计实现的过程,欢迎进行交流和指点,一起进步。 作为程序员,或多或少,都经历过如下场景: 场景1: 产品经理:xxx,用户反馈说收到一个看不懂的错误,你排查一下是什么问题: 程序员:这是哪

    2024年02月16日
    浏览(41)
  • 【架构设计】高并发架构实战:从需求分析到系统设计

      很多软件工程师的职业规划是 成为架构师 ,但是要成为架构师很多时候要求 先有架构设计经验 ,而不做架构师又怎么会有架构设计经验呢?那么要 如何获得架构设计经验 呢? 高并发是指系统在同一时间内处理的请求量非常大,通常是指每秒处理的请求量达到数千到数百

    2024年02月15日
    浏览(59)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包