我是Python的初学者。我正在尝试创建一个扑克游戏,其中发出5x5网格牌,然后玩家可以分别左/右或上/下移动任何行或列。
我决定用五个五个字符串列表代表这个。 (虽然,如果你有更好的主意,我会很高兴听到它)。所以起始板可能看起来像:
['Ks', '5h', 'Ts', '3s', '7h']
['As', '9d', '5c', 'Jd', '8c']
['9s', '6h', '6d', '3c', '2c']
['Qd', '8h', 'Jh', '2d', 'Td']
['4h', 'Kd', 'Qs', '5d', '9c']
玩家可能会选择将顶行向左移动一个空格,这样可以给出一个像这样的棋盘:
['5h', 'Ts', '3s', '7h', 'Tc']
['As', '9d', '5c', 'Jd', '8c']
['9s', '6h', '6d', '3c', '2c']
['Qd', '8h', 'Jh', '2d', 'Td']
['4h', 'Kd', 'Qs', '5d', '9c']
最左边的牌掉落了,右边的牌组添加了一张新牌。然后玩家可以对任何行或列重复此操作,直到卡片用完卡片为止。
我遇到的问题是定义适用于任何这些列表的函数,而不是必须为我想做的任何事情创建五个近似重复项。
所以我从所有扑克牌的列表(称为“牌组”)和五个空列表开始,名为row0到row4。为了生成起始板,我现在要去:
def drawRight0():
card = random.randint(0,len(deck)-1)
row0.append(deck[card])
del deck[card]
def drawRight1():
card = random.randint(0,len(deck)-1)
row1.append(deck[card])
del deck[card]
...
def firstBoard():
for i in range (5):
drawRight0(), drawRight1(), drawRight2(), drawRight3(), drawRight4()
当然,我应该能够将其简化为“rowx.append”,但我无法理解。
这是一个类似于游戏动作的故事。如果我想定义如何向左移动一行,我可以这样做:
def shiftLeft0():
for i in range(4):
row0[i] = row0[i+1]
del row1[4]
drawLeft1()
......对于每一行,但这似乎效率低下。
最后,上下移动卡片有点棘手。目前,我正在使用以下功能:
def shiftUp0():
row0[0] = row1[0]
row1[0] = row2[0]
row2[0] = row3[0]
row3[0] = row4[0]
del row4[0]
card = random.randint(0,len(deck)-1)
row4.insert(0,deck[card])
del deck[card]
我应该能够循环前四行(虽然这不是一个大问题)。但同样,主要问题是需要为每列定义不同的功能,比如我还需要这样做:
def shiftUp3():
row0[3] = row1[3]
row1[3] = row2[3]
row2[3] = row3[3]
row3[3] = row4[3]
del row4[3]
card = random.randint(0,len(deck)-1)
row4.insert(0,deck[card])
del deck[card]
我想也许我应该对列表列表做些什么,比如
rows = [row0, row1, row2, row3, row4]
...但我不知道如何以我想要的方式应用它。
感谢您的协助!
答案 0 :(得分:0)
这似乎是使用5x5电路板的一种非常困难的方式。你可以通过一个包含5个列表的列表更容易地做到这一点,每个列表有5个值,而不是像你在帖子末尾提到的那样有5个单独的列表。这可以像这样创建:
board = [[0 for i in range(5)] for j in range(5)]
然后,您可以像您一样使用电路板,通常可以访问列表中的值:
board[0][0] = 1
board[1][1] = 2
board
--> [[1,0,0,0,0],[0,2,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0]]
我认为你可以很容易地找出如何轻松地解决这个问题,如果事情不清楚或者你被困住,可以随时寻求更多的帮助。