简单的纸牌游戏
我正在尝试制作一个简单的接龙游戏,里面会有随机数量的牌堆,每个牌堆里有随机数量的牌。比如说,我们有四个牌堆,里面的牌数分别是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