#python #list #random #pygame #sprite
#python #Список #Случайный #pygame #спрайт
Вопрос:
Итак, я пытаюсь создать игру «скачки», и я хочу случайным образом выбрать 5 игроков из списка из 10 игроков, и у 5 из них разные случайно выбранные координаты y из списка. Я попробовал свой код, но y иногда совпадают. Я немного застрял, и я очень признателен, если вы, ребята, сможете мне помочь.
class Player1(pygame.sprite.Sprite): #Player1 class ( 2-10 are the same)
def __init__(self, pos_x, pos_y):
super().__init__()
self.sprites = []
self.sprites.append(pygame.transform.scale(pygame.image.load("image/pig/non/1.png").convert_alpha(), (80, 60)))
self.sprites.append(pygame.transform.scale(pygame.image.load("image/pig/non/2.png").convert_alpha(), (80, 60)))
self.sprites.append(pygame.transform.scale(pygame.image.load("image/pig/non/3.png").convert_alpha(), (80, 60)))
self.sprites.append(pygame.transform.scale(pygame.image.load("image/pig/non/4.png").convert_alpha(), (80, 60)))
self.sprites.append(pygame.transform.scale(pygame.image.load("image/pig/non/5.png").convert_alpha(), (80, 60)))
self.sprites.append(pygame.transform.scale(pygame.image.load("image/pig/non/6.png").convert_alpha(), (80, 60)))
self.sprites.append(pygame.transform.scale(pygame.image.load("image/pig/non/7.png").convert_alpha(), (80, 60)))
self.sprites.append(pygame.transform.scale(pygame.image.load("image/pig/non/8.png").convert_alpha(), (80, 60)))
self.sprites.append(pygame.transform.scale(pygame.image.load("image/pig/non/9.png").convert_alpha(), (80, 60)))
self.sprites.append(pygame.transform.scale(pygame.image.load("image/pig/non/10.png").convert_alpha(), (80, 60)))
self.current_sprite = 0
self.image = self.sprites[self.current_sprite]
self.rect = self.image.get_rect(center = (pos_x, pos_y))
def update(self):
self.current_sprite = 0.1
if self.current_sprite >= len(self.sprites):
self.current_sprite = 0
self.image = self.sprites[int(self.current_sprite)]
player_x = 100
random_y = [sf_height-200, sf_height - 290,sf_height-345,sf_height - 420,sf_height - 470]
player1 = Player1(player_x,random.choice(random_y))
player2 = Player2(player_x,random.choice(random_y))
player3 = Player3(player_x,random.choice(random_y))
player4 = Player4(player_x,random.choice(random_y))
player5 = Player5(player_x,random.choice(random_y))
player6 = Player6(player_x,random.choice(random_y))
player7 = Player7(player_x,random.choice(random_y))
player8 = Player8(player_x,random.choice(random_y))
player9 = Player9(player_x,random.choice(random_y))
player10 = Player10(player_x,random.choice(random_y))
player_list = [player1, player2, player3, player4, player5, player6, player7, player8, player9, player10]
player_group = pygame.sprite.Group()
player_group.add(random.sample(player_list, 5))
Комментарии:
1.
positions = random.shuffle(random_y)
для создания копии списка случайным образом перемешивается.Player1(player_x,positions.pop())
возьмите и удалите первый случайный элемент для каждого игрока2. @TheLazyScripter Проблема в том, что
random_y
имеет только 5, а не 10 записей. Я думаю, нам нужно увидеть большеPlayer1-10
(разве индекс не должен быть параметром?) прежде чем прийти к решению.3. Ах, вы правы, я думаю, я не заметил, что было только 5 y-позиций. Имело бы смысл назначить y_pos после выбора случайного игрока. Является ли player1-10 объектом или fn?
4. player1-10 — это объект @TheLazyScripter
5. Я бы сказал, установите ypo после инициализации.
players = random.sample(player_list, 5)
затем установите ypo после перемешивания.random.shuffle(random_y)
.for x in players:x.set_y(random_y.pop())
.set_y
затем метод создастrect
. Можно сделать копиюrandom_y
, чтобы сохранить исходные позиции,random_y_copy = random_y.copy()
а затем перетасовать и извлечь из копии вместо оригинала! Надеюсь, это поможет!
Ответ №1:
Вы можете назначить каждую из 5 y
координат 5 Player1
объектам класса. Сначала это не будет случайным, но оно будет автоматически перетасовано при использовании random.sample
в списке:
player_x = 100
random_y = [sf_height - 200, sf_height - 290, sf_height - 345, sf_height - 420, sf_height - 470]
five_players = [Player1(player_x,random.choice(y)) for y in random_y]
all_players = [...]
player_group = pygame.sprite.Group()
player_group.add(random.sample(five_players, 5))