第二章第3节纸牌游戏

您所在的位置:网站首页 两人扑克牌钓鱼 第二章第3节纸牌游戏

第二章第3节纸牌游戏

2024-07-02 09:51| 来源: 网络整理| 查看: 265

一、前言 1.游戏规则

将一副扑克牌平均分成两份,每人拿一份。小哼先拿出手中的第一张扑克牌放在桌上,然后小哈也拿出手中的第一张扑克牌,并放在小哼刚打出的扑克牌的上面,就像这样两人交替出牌。出牌时,如果某人打出的牌与桌上某张牌的牌面相同,即可将两张相同的牌及其中间所夹的牌全部取走,并依次放到自己手中牌的末尾。当任意一人手中的牌全部出完时,游戏结束,对手获胜。(小哼和小哈手中牌的牌面只有1~9)

2.规则分析 小哼和小哈有两种操作,分别是出牌和赢牌,这恰好对应队列的两个操作,出牌就是出队,赢牌就是入队。桌子就是一个栈,每打出一张牌放到桌上就相当于入栈。当有人赢牌的时候,依次将牌从桌上拿走,这就相当于出栈。枚举桌上的每一张牌,如果某人打出的牌与桌子上的某张牌相同,即可将两张牌以及中间所夹的牌全部取走。综上所述,我们需要两个队列、一个栈来模拟整个游戏。 二、源码 # 第 3 节 纸牌游戏——小猫钓鱼 class Queue: def __init__(self): self.data = [None] * 1000 self.head = 0 self.tail = 0 self.name = None class Stack: """top 用来存储栈顶,数组 data 用来存储栈中的元素,大小设置为 10。因为只有 9""" def __init__(self): self.data = [None] * 10 self.top = 0 def init(s: str, name: str) -> Queue: """初始化-发牌""" q = Queue() q.head = 1 q.tail = 1 q.name = name for v in list(s): # print(v) q.data[q.tail] = v q.tail += 1 # print(q.data) # print(q.tail) return q def play(s: Stack, q: Queue): """出牌函数""" # print(q.name + '出牌时,桌面上的牌:' + str(s.data)) # print(q.name + '手中的牌:' + get_card(q)) # 小哼先亮出一张牌 t = q.data[q.head] # 枚举桌上的每一张牌与 t 进行比对 flag = 0 if s.top > 0: temp = s.top while temp > 0: if s.data[temp] == t: flag = 1 break temp -= 1 # 如果 flag 的值为 0 就表明小哼没能赢得桌上的牌,将打出的牌留在桌上。 if flag == 0: q.head += 1 s.top += 1 s.data[s.top] = t # 如果 flag 的值为 1 就表明小哼可以赢得桌上的牌,需要将赢得的牌依次放入小哼的手中。 if flag == 1: q.head += 1 # 小哼已经打出一张牌,所以要把打出的牌出队 q.data[q.tail] = t # 因为此轮可以赢牌,所以紧接着把刚才打出的牌又放到手中牌的末尾 q.tail += 1 # 把桌上可以赢得的牌(从当前桌面最顶部一张牌开始取,直至取到与打出的牌相同为止)依次放到手中牌的末尾 while s.data[s.top] != t: q.data[q.tail] = s.data[s.top] s.data[s.top] = None q.tail += 1 s.top -= 1 # 取走最后一张相等的牌 q.data[q.tail] = s.data[s.top] q.tail += 1 s.data[s.top] = None s.top -= 1 def get_card(q: Queue) -> str: rs = '' temp = q.head while temp < q.tail: rs += q.data[temp] temp += 1 return rs def get_table_card(s: Stack) -> str: rs = '' temp = 0 while temp < len(s.data): if s.data[temp]: rs += s.data[temp] temp += 1 return rs def print_result(q: Queue, s: Stack): if q.head != q.tail: print(q.name + '胜利') rs = get_card(q) print('手中的牌是:' + rs) print('桌面上的牌是:' + get_table_card(s)) def game(q1: Queue, q2: Queue, s: Stack): # print("游戏开始") while (q1.head < q1.tail) and (q2.head < q2.tail): # 当任意一人手中的牌全部出完时,游戏结束,对手获胜。 if q2.head < q2.tail: play(s, q1) if q1.head < q1.tail: play(s, q2) # 输出比赛结果 print_result(q1, s) print_result(q2, s) if __name__ == '__main__': # s1 = '241256' # s2 = '313564' s1 = input("输入小哼手中的牌:") s2 = input("输入小哈手中的牌:") qu1 = init(s1, "小哼") qu2 = init(s2, '小哈') # print(get_card(qu1)) # print(get_card(qu2)) # 桌面上的牌 stack = Stack() # 开始出牌 game(qu1, qu2, stack) 三、运行结果



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3