基于TCP的网络对战象棋 |
您所在的位置:网站首页 › 中国象棋大佬 › 基于TCP的网络对战象棋 |
中国象棋是起源于中国的一种棋,属于二人对抗性游戏的一种,在中国有着悠久的历史。由于用具简单,趣味性强,成为流行极为广泛的棋艺活动。 中国象棋是中国棋文化,也是中华民族的文化瑰宝,它源远流长,趣味浓厚,基本规则简明易懂。中国象棋在中国的群众中基础远远超过围棋,是普及最广的棋类项目,中国象棋已流传到十几个国家和地区。 中国象棋使用方形格状棋盘,圆形棋子共有32个,红黑二色各有16个棋子,摆放和活动在交叉点上。双方交替行棋,先把对方的将(帅)“将死”的一方获胜。 设计目标1、勾画简单而形象的象棋棋盘; 2、对战双方通过网络实现实时对战; 3、突出棋手走棋动作; 4、实现不同棋子的走棋规则; 5、实现棋子的吞吃规则; 绘制棋盘象棋盘是象棋子活动的场所,棋盘由九道竖线和十道横线交叉组成。棋盘上共有九十个交叉点。象棋子共有三十二个,分别有红、白两组,每组十六个,各分七种。按照规则摆放正在棋盘的交叉点上。 绘制棋盘导入python的图形包 from tkinter import * #绘制常见的图形以左上角的折点为原点(0,0),建立直角坐标系,这样便于定位每一个坐标点,同时方便定位坐标点上的棋子。 定义坐标点 class Cpoint: def __init__(self, m, n): self.x = m self.y = n定义像素点 class Cpixel: def __init__(self, m, n): self.x = m self.y = n这里对于一个棋子的表示即,例,【马】-- Cpoint点,Cpoint点是基于原点位置的偏移,之所以设置像素点,是因为原点位置对于画布来说是可以自定义的(为了美观起见,这里并不设置棋盘(0,0)为画布的(0,0))。 棋盘展示: 实现TCP服务器和TCP客户端; import socket # 导入 socket 模块突出棋手走棋动作,当棋手点击可以移动的棋子时,将该棋子突出显示,效果如图“炮”: 由于是网络对战平台,因此有必要保证对战双方棋盘的实时同步,即对战双方的棋盘要实时保持一致。 服务器 s = socket.socket() # 创建 socket 对象 host = socket.gethostname() # 获取本地主机名 port = 12345 # 设置端口 s.bind((host, port)) # 绑定端口 print(host) s.listen(5) # 等待客户端连接 print("waitting for connection...") while True: c, addr = s.accept() # 建立客户端连接。 thread = threading.Thread(target=task_func, args=(c, addr,g_count, )) thread.start() g_count += 1客户端 s = socket.socket() # 创建 socket 对象 host = socket.gethostname() # 获取本地主机名 port = 12345 # 设置端口号 s.connect((host, port)) print (str(s.recv(1024),'utf-8')) 走棋规则例如【马】 if qizi.str == "马": #马走日子,且不能有别马子 if self.on_rizi_line(qizi.point, focus_point): #马走日子不能有别子 if self.no_qizi_on_rizi(qizi.point, focus_point): chizi = self.qizi_on_point(focus_point) if chizi != None: if qizi.color != chizi.color: chizi.dead() else: return 0 qizi.set_point(focus_point) return 1例如【象】 if qizi.str == "象" or qizi.str == "相": #象走田字,且不能路径上不能有其它子 if self.on_tianzi_line(qizi.point, focus_point): if self.no_qizi_on_tianzi(qizi.point, focus_point): chizi = self.qizi_on_point(focus_point) if chizi != None: if qizi.color != chizi.color: chizi.dead() else: return 0 qizi.set_point(focus_point) return 1这里的走棋规则其实就是基于逻辑的判断,理清逻辑,多测试,发现问题修复问题。 输赢判断 def check_win(self): red = 0; green = 0; for item in self.qizilist: if item.str == "帅" and item.is_alive(): red = 1 if item.str == "将" and item.is_alive(): green = 1 if red == 0: self.m_master.create_text(self.m_start_piexl.x + self.m_gap*4, self.m_start_piexl.y + self.m_gap*10, text="绿方赢") self.m_over = 1 if green == 0: self.m_master.create_text(self.m_start_piexl.x + self.m_gap * 4, self.m_start_piexl.y + self.m_gap * 10, text="红方赢") self.m_over = 1 对战演示https://github.com/shaozonglin1993/pyChess |
今日新闻 |
推荐新闻 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |