我是新来的,正在寻找建议。
我正在通过实现自己制作的游戏来学习如何使用Python(3.8)。我看到的每个新主题,都会或多或少从头开始,以介绍和实践我学到的新元素。我目前正试图摆脱班级的束缚。
我在使用“列表”时遇到了这个问题,但是:我想要一个“类”来创建编号的对象。为此,我创建了一个空白列表(players_vector = []
),并使用“ for”循环将新对象附加到该列表。因此,我可以通过它们在该列表上的索引访问每个对象:例如players_vector[i].player_color
。
我无法理解的问题:
player_vector[i].pawn_coordinates
是一个类似于[[x1,y1], [x2, y2]]
的列表#有两个Pawn。
每次我尝试为其中一位玩家(例如:players_vector[2].pawn_coordinates[0] = [new_x, new_y]
)更改其中一位时,所有其他玩家也将相同的pawn坐标也更改为相同的值。 (player_color等其他属性也可以正常工作)
重现问题的一段代码:
import pyinputplus as pyip
WIDTH = 5
HEIGHT = 5
players_vector = []
class Player:
def __init__(
self,
player_color=None,
pawn_position=[-1, -1],
pawn_coordinates=[[-1, -1], [-1, -1]],
pawn_previous_position=[-1, -1]
):
self.player_color = player_color
self.pawn_position = pawn_position
self.pawn_coordinates = pawn_coordinates
self.pawn_previous_position = pawn_previous_position
self.player_score = 0
def return_position(self, WIDTH, pawn_index):
return WIDTH*(self.pawn_coordinates[pawn_index][1]-1)+(self.pawn_coordinates[pawn_index][0]-1)
players_vector.append(Player('Brown'))
players_vector.append(Player('Orange'))
players_vector.append(Player('White'))
def place_pawns(WIDTH, players_vector):
print(
f"Player {players_vector[1].player_color}, please enter the starting coordinates for your Pawns:"
)
x = pyip.inputNum(f"Enter X (1-5) for your 1st Pawn: ", min=1, max=5)
y = pyip.inputNum(f"Enter Y (1-5) for your 1st Pawn: ", min=1, max=5)
players_vector[1].pawn_previous_position[0] = players_vector[1].pawn_position[0]
players_vector[1].pawn_coordinates[0] = [x, y]
players_vector[1].pawn_position[0] = players_vector[1].return_position(WIDTH, 0)
x = pyip.inputNum(f"Enter X (1-5) for your 2nd Pawn: ", min=1, max=5)
y = pyip.inputNum(f"Enter Y (1-5) for your 2nd Pawn: ", min=1, max=5)
players_vector[1].pawn_previous_position[1] = players_vector[1].pawn_position[1]
players_vector[1].pawn_coordinates[1] = [x, y]
players_vector[1].pawn_position[1] = players_vector[1].return_position(WIDTH, 1)
place_pawns(WIDTH, players_vector)
print(f'Coordinates: {players_vector[0].pawn_coordinates} Color: {players_vector[0].player_color}')
print(f'Coordinates: {players_vector[1].pawn_coordinates} Color: {players_vector[1].player_color}')
print(f'Coordinates: {players_vector[2].pawn_coordinates} Color: {players_vector[2].player_color}')
print('Then trying to change the first [x,y] of White to [3,2] and the Orange color to Green')
players_vector[2].pawn_coordinates[0] = [3,2]
players_vector[1].player_color = 'Green'
print(f'Coordinates: {players_vector[0].pawn_coordinates} Color: {players_vector[0].player_color}')
print(f'Coordinates: {players_vector[1].pawn_coordinates} Color: {players_vector[1].player_color}')
print(f'Coordinates: {players_vector[2].pawn_coordinates} Color: {players_vector[2].player_color}')