# 俩子抵一个 # 游戏规则 # 1 黑白双方各四枚棋,棋盘 4X4 # 2 黑棋先 # 3 横向或竖向 三枚棋子连续 黑棋2枚白棋一枚则该枚白棋出局,反之亦然。 # 4 一方剩余棋子小于2枚,则另一方胜 import pprintpp class Chess(object): def __init__(self, uid, flag, location=None): self.uid = uid self.flag = flag self.location = location def __str__(self): return self.flag class Board(object): dir = {‘u‘: (-1, 0), ‘r‘: (0, 1), ‘d‘: (1, 0), ‘l‘: (0, -1)} error = ‘ERROR‘ def __init__(self, flag1, flag2): self.layout = [[0, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0]] self.flag1 = flag1 self.flag2 = flag2 str1 = self.flag1+self.flag1+self.flag2 str2 = self.flag2+self.flag2+self.flag1 self.label =[str1, str2] self.chesses = {flag1: [], flag2: []} for x in range(4): self.layout[0][x] = self.flag1+str(x+1) self.layout[3][x] = self.flag2+str(x+1) a = Chess(x, self.flag1+str(x+1), (0, x)) self.chesses[flag1].append(a) b = Chess(x, self.flag2+str(x+1), (3, x)) self.chesses[flag2].append(b) def __rule(self): lay = self.layout label = self.label result = None for x in range(4): for y in range(4): a = lay[x][y] if a == 0: continue else: a = a[0] if x < 2: b = lay[x - 3][y] b = b[0] if b != 0 else b c = lay[x - 2][y] c = c[0] if c != 0 else c abc = str(a) + str(b) + str(c) if abc in label or abc[::-1] in label: if a == b: lay[x - 2][y] = 0 result = x+2, y break else: lay[x][y] = 0 result = x, y break if y < 2: b = lay[x][y - 3] b = b[0] if b != 0 else b c = lay[x][y - 2] c = c[0] if c != 0 else c abc = str(a) + str(b) + str(c) if abc in label or abc[::-1] in label: if a == b: lay[x][y - 2] = 0 result = x, y + 2 break else: lay[x][y] = 0 result = x, y break return result def __update(self): a = self.__rule() info =‘‘ if a: ch1 = len(self.chesses[self.flag1]) self.chesses[self.flag1] = [ch for ch in self.chesses[self.flag1] if ch.location != a] self.chesses[self.flag2] = [ch for ch in self.chesses[self.flag2] if ch.location != a] if len(self.chesses[self.flag1]) < ch1: info = ‘【‘+self.flag1+‘】失去一枚棋子‘ else: info = ‘【‘ + self.flag2 + ‘】失去一枚棋子‘ return info def chess_move(self, flag, num, d): chess = [x for x in self.chesses[flag] if x.uid == (num-1)][0] a, b = chess.location x = a + Board.dir[d][0] y = b + Board.dir[d][1] info =‘‘ if x < 0 or x > 3 or y < 0 or y > 3 or self.layout[x][y] != 0: return Board.error else: self.layout[a][b] = 0 chess.location = x, y self.layout[x][y] = chess.flag print(‘【‘+flag+‘】移动了棋子{}-->{}‘.format((a, b), (x, y))) rst = self.__update() print(rst) print(self.layout) if len(self.chesses[self.flag1]) < 2: info = ‘【‘+self.flag2+‘】获胜,GAME OVER‘ if len(self.chesses[self.flag2]) < 2: info = ‘【‘ + self.flag1 + ‘】获胜,GAME OVER ‘ return info class Gamer(object): def __init__(self, flag): self.flag = flag def move_chess(self, num, d, bd): return bd.chess_move(self.flag, num, d) if __name__ == ‘__main__‘: person1 = Gamer(‘b‘) person2 = Gamer(‘w‘) board = Board(person1.flag, person2.flag) while True: print(board.layout) tmp = ‘【{}】拥有棋子:{};【{}】拥有棋子:{}‘ info1, info2 = ‘‘, ‘‘ for x in board.chesses[person1.flag]: info1 += x.flag+‘ ‘ for x in board.chesses[person2.flag]: info2 += x.flag+‘ ‘ print(tmp.format(person1.flag, info1, person2.flag, info2)) print(‘【‘ + person1.flag + ‘】请选择棋子,输入棋子数字‘) c = int(input()) print(‘请选择移动方向 u:上,r:右 d:下 l:左‘) direction = input() result = person1.move_chess(c, direction, board) if "GAME OVER" in result: print(result) break elif result == "ERROR": print("重新开始") continue else: print(result) print(‘【‘ + person2.flag + ‘】请选择棋子,输入棋子数字‘) c = int(input()) print(‘请选择移动方向 u:上,r:右 d:下 l:左‘) direction = input() result = person2.move_chess(c, direction, board) if "GAME OVER" in result: print(result) break elif result == "ERROR": print("重新开始") continue else: print(result)
自己写的小游戏,原创原创原创
玩家类 Gamer , 棋子类 Chess,棋盘类 Board,
时间: 2024-11-06 21:57:39