简单的纸牌游戏

2 投票
2 回答
3080 浏览
提问于 2025-04-16 23:22

我正在尝试制作一个简单的接龙游戏,里面会有随机数量的牌堆,每个牌堆里有随机数量的牌。比如说,我们有四个牌堆,里面的牌数分别是4、5、7和1。接下来,我们会从每个牌堆里各拿走一张牌,形成一个新的牌堆。这样下一步的牌堆就变成了3、4、6和4。

这个接龙游戏会在牌堆的数量稳定下来时结束,比如说当牌堆的数量变成5、3、2时,下一步会变成4、2、1、3,然后再变成3、1、2、4……如果把这些数字按顺序排列,我们会发现总是得到同样的四个值。

那么,怎么才能最好地实现这个过程呢?我对编程有一些基础知识,但还不算深入。

到目前为止,我尝试过一些方法,但效果不太好,我不知道怎么让循环在达到稳定数字时停止。

while len(y) > 1:
    for i in range(len(y)):
        y[i] -= 1
    y = [x for x in y if x != 0]
    y.append(len(y))
    y.sort()
    print(y)

2 个回答

0

这个怎么样:

def step(list):
    new_list = [x-1 for x in list if (x-1) > 0] #You remove one from each heap
    new_list.append(len(list)) #Now add the new heap
    if sorted(new_list) == sorted(list):
        return new_list, True
    else:
        return new_list, False

然后你可以像这样调用这个方法:

new_config, is_done = step(list)

直到 is_done 变成 true。我希望你能理解我的想法。

2

所以,实际的牌(颜色、面值)根本不重要,因为你只需要模拟一些堆的数量吗?

可以用一个列表来设置,整数来表示这些堆,然后用random模块来生成初始的配置。编写游戏逻辑应该会比较简单。


更新

你的代码是个不错的开始。为了让事情更简单,考虑把它拆分成几个不同的函数。例如:

def next_configuration(y):
    """Take a configuration of heaps and remove one card from each
    heap to create a new heap.
    """
    new_y = [x - 1 for x in y if x > 1]
    new_y.append(len(y))
    new_y.sort(reverse=True)
    return new_y

现在你可以测试这个函数是否按预期工作:

>>> next_configuration([5, 1, 3, 2])
[4, 4, 2, 1]

要一直玩到最后,生成下一个配置,直到当前的配置不再变化为止:

config = generate_initial_configuration()
for i in range(max_rounds):
    new_config = next_configuration(config)
    if new_config == config:
        break
    config = new_config

撰写回答