原创
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。
流程图依旧需要:
吃子的条件是啥呢?
1、当前自己的棋子有被选中(select_chess 不为空)·
2、鼠标点击了对方的棋子
3、按照吃子规则,对方的棋子可吃
4、按照吃子规则,对方的棋子在位置上可以被吃。
第四条进一步解释:
比如说,车只能吃与它相邻的上下左右的对方棋子,不能吃斜角或其它位置的棋子,这就是位置上可以被吃。
if event.type == MOUSEBUTTONDOWN:if event.button ==1:# 按下鼠标左键#print(event.pos) selected = is_chess_clicked(chess_list,event)#print(selected)if selectedisnotNone:# 本次点击点击到了棋子if selected.state == ChessPieces.CHOOSED_STATE:passelif selected.state == ChessPieces.ACTIVE_STATE:if player_role == selected.role:# 当前用户点击自己的棋子# 重复点击了多次自己的某一个棋子# 或例子:# 先点击了自己的车,又点击了自己的马 select_chess = selected selected.state = ChessPieces.ACTIVE_STATEelse:# 当前用户点击别人的棋子# 选定自己要吃的对方的子if select_chessisnotNone:# 判断是否可以吃该子if select_chess.eat(selected,event.pos,chess_list): select_chess =None# ‘将’ 可以吃 其它所有# 是否可吃需要满足两个条件# 1、是否满足该子的行走规律# 2、是否满足该子的吃子规律defeat(self,enemy_chess,pos,chess_list):if can_eat(self.type,enemy_chess.type):# 吃子规则判断可吃if self.move(pos):# 将select_chess 移动到选定位置# 并将被吃子状态修改为死亡状态 self.rect.left = enemy_chess.rect.left self.rect.top = enemy_chess.rect.top enemy_chess.state = DEAD_STATEreturnTrueelse: print('点击位置不在范围内,无法吃子')returnFalse# 吃子规则# 这个规则我们可以自己随便写# 我的规则是 值大的可以吃值小的 兵可以吃将,炮可以吃全部,不过炮翻山才可以吃 JIANG_TYPE =11 SHI_TYPE =12 XIANG_TYPE =13 CHE_TYPE =14 MA_TYPE =15 PAO_TYPE =16 ZU_TYPE =17defcan_eat(typea,typeb):if typeain (JIANG_TYPE,PAO_TYPE):returnTrueelif typeain (SHI_TYPE,XIANG_TYPE,MA_TYPE,CHE_TYPE):if typea