如何制作基本棋盘游戏中的老虎机?



我有一个圆形板(一个列表),其中包含10个槽。在乞讨时,插槽是空的,当玩家移动到一个无主的插槽时,玩家成为所有者,并且必须为插槽想出一个字符串。如果另一个玩家进入这个插槽,玩家必须猜出字符串。如果客人正确,他将成为投币槽的新主人并获得硬币。

我不明白这个代码中的问题是什么?

from dataclasses import dataclass
@dataclass
class Player: 

firstname: str

lastname: str

coins: int

slot: int

def full_info(self) -> str:

return f"{self.firstname} {self.lastname} {self.coins} {self.slot}"
@classmethod
def from_user_input(cls) -> 'Player':        
return cls(        
firstname=input("Please enter your first name:"),

lastname=input("Please enter your second name: "),

coins=200,

slot= 0)
minplayer, maxplayer, n = 2, 5, -1
while not(minplayer <= n <= maxplayer):   #definding the maximum and minimum players 
n = int(input(f" Choose a number of players between {minplayer} and {maxplayer}: "))    
playersingame = []   #storing it in the list
for i in range(n):    
playersingame.append(Player.from_user_input())
print([player.full_info() for player in playersingame])
board = [[ ] for i in range(10)]
for player in playersingame:    
board[ player.slot ].append(player)
print(board)
print()
import random
for player in playersingame:    
input(f"{player.firstname} {player.lastname}, please press enter to roll your die...")    
die = random.randint(1,6)    
print(f"You take {die} step{'s'* (die>1)} forward")    
board[player.slot].remove(player)    
player.slot += die    
board[player.slot].append(player)
print(board)
def shift(seq, n=0):
a = n % len(seq)
return seq[-a:] + seq[:-a] 
round_counter=1
rounds=30 
# round counter
while (round_counter <= rounds):    
for player in playersingame:        
input(f"{player.firstname} {player.lastname}, please press enter to roll your die...")        
die = random.randint(1,6)        
print(f"You take {die} step{'s'*(die>1)} forward")        
board[player.slot].remove(player)        
player.slot = (player.slot + die) % len(board)
board[player.slot].append(player)

问题出在第35行,电路板在那里制作我试着制作插槽:

board = [[ ] for i in range(10)]
board = 
slot[1] = {"MagicString": "pizza", "Owner": ""} 
slot[2] = {"MagicString": "pasta", "Owner": ""}
slot[3] = {"MagicString": "cupcake", "Owner": ""}
slot[4] = {"MagicString": "chocolate", "Owner": ""}
slot[5] = {"MagicString": "tea", "Owner": ""}
slot[6] = {"MagicString": "Wings", "Owner": ""}
slot[7] = {"MagicString": "jelly", "Owner": ""}
slot[8] = {"MagicString": "milk", "Owner": ""}
slot[9] = {"MagicString": "soup", "Owner": ""}
slot[10] = {"MagicString": "cake", "Owner": ""}
board = [[ ] for i in range(10)]  // line 1
board =                           // line 2
slot[1] = {"MagicString": "pizza", "Owner": ""}  // line 3
...

这段代码没有意义。

在第1行中,您将board定义为空列表的列表。这没什么不对的。

但是在第2行中,您抛弃了该定义,并重新开始定义board。但是您没有完成这一行并为表达式提供右侧。你想把board赋值为什么?

在第3行中,您尝试给slot[1]赋值,但是您之前没有将slot定义为可以用[]操作符下标的对象。

所以这里至少有三个错误,其中两个将被Python解释器拒绝。

如果你想用字典替换board列表中的条目,你可以这样写board[0] = {...}

或者,如果您想将这些字典添加到board列表中的列表中,您可以输入board[0].append({...})

更好的方法可能是定义另一个类来表示一个棋盘槽,并定义函数将玩家和/或字符串添加到该类的对象中。然后在板子上列出这些槽对象。

这样应该可以;当然,最好将板打印放入"圆形"循环中,最好是在"圆形n"打印之后,并更好地格式化它,包括每个插槽所有者的信息:

minplayer, maxplayer, n = 2, 5, -1
while not(minplayer <= n <= maxplayer):   #definding the maximum and minimum players 
n = int(input(f" Choose a number of players between {minplayer} and {maxplayer}: "))    
playersingame = []   #storing it in the list
for i in range(n):    
playersingame.append(Player.from_user_input())
print('Players in game: ',[player.full_info() for player in playersingame],'n')

board = [{'players':[ ], 'magicstring': None, 'owner': None} for i in range(10)]
for player in playersingame:    
board[player.slot]['players'].append(player)
print([[p.full_info() for p in s['players']] for s in board], 'n')

import random
round_counter=1
rounds=30 
# round counter
while (round_counter <= rounds):
print("nnRound ", round_counter,'nn')
for player in playersingame:        
input(f"{player.firstname} {player.lastname}, please press enter to roll your die...")        
die = random.randint(1,6)        
print(f"You take {die} step{'s'*(die>1)} forward")        
board[player.slot]['players'].remove(player)        
player.slot = (player.slot + die) % len(board)
board[player.slot]['players'].append(player)
if board[player.slot]['owner'] == None:
board[player.slot]['owner'] = player
board[player.slot]['magicstring'] = input('Choose your magic string: ')
else:
print('placeholder')
round_counter += 1

最新更新