Как вызвать случайность в пигмеях? - PullRequest
0 голосов
/ 26 апреля 2019

Я пытаюсь создать звездную ночь в пигмеях.На самом деле это было дано в качестве упражнения в книге «Я следую за ускоренным курсом Python» Эрика.До сих пор я создал скоординированный флот звезд, но в соответствии с заданием, мне нужно расположить звезды случайным образом, используя randint.Я не могу понять, как это сделать?Я новичокЕго питон 3

До сих пор я пытался удалить доступное пространство и пытался использовать его для поиска int, но у меня не получилось.

def get_number_stars(s_settings, star_width):
    """Detertmine the number of stars that fit in a row."""
    available_space_x = s_settings.screen_width - 2 * star_width
    number_stars_x = int(available_space_x / (2 * star_width))
    return number_stars_x


def get_number_rows(s_settings, star_height):
    """Determine the number of stars that fit on the screen."""
    avaialble_space_y = (s_settings.screen_height - (3 * star_height))
    number_rows = int(avaialble_space_y / (2 * star_height))
    return number_rows


def create_star(s_settings, screen, stars, star_number, row_number):
    """Create an star and place it in the row."""
    star = Star(screen, s_settings)
    star_width = star.rect.width
    star.x = star_width + 2 * star_width * star_number
    star.rect.y = star.rect.height + 3 * star.rect.height * row_number
    star.rect.x = star.x
    stars.add(star)


def create_stars_group(s_settings, screen, stars):
    """Create a full group of aliens."""
    # Create an star and find the number of stars in each row
    star = Star(screen, s_settings)
    number_stars_x = get_number_stars(s_settings, star.rect.width)
    number_rows = get_number_rows(s_settings, star.rect.height)

    # Create the first row of stars
    for row_number in range(number_rows):
        for star_number in range(number_stars_x):
            create_star(s_settings, screen, stars, star_number, row_number)

Мне нужны случайно расположенные звезды, но все, что я имею 'Я получаю координаты звезд, как в коде.Спасибо за помощь!

Ответы [ 3 ]

3 голосов
/ 26 апреля 2019

Прямо сейчас вы создаете фиксированное количество звездочек для каждой строки:

number_stars_x = int(available_space_x / (2 * star_width))

попробуйте сделать это число от 0 до некоторого максимального числа!

# number_stars_x = randint(0, max_number)
# Note: // will produce an int in python3
number_stars_x = randint(0, available_space_x // (2 * star_width))

Это будетуже сделать это выглядит случайным!Случайное расположение также возможно, но вам понадобится код, чтобы убедиться, что они также не перекрываются.

В этом случае вы можете начать с

star.x = randint(star_width, available_space_x - star_width)
1 голос
/ 26 апреля 2019

Это во многом зависит от того, что вы подразумеваете под «случайным».

Вы можете либо поставить случайное количество звездочек, как предложено @Mars.

Вы также можете предопределить некоторые из них "звездочки "и заполните любое их число методом random.choice

possible_x_stars = [star_width + 2 * star_width * i for i in star_number]
next_star.x = random.choice(possible_x_stars) # You will need to remove the chosen value afterward.

Другим методом может быть создание цикла while (если звезд не так много), например:

number_of_stars = 0
tries = 0
placed_stars = []
while number_of_stars < maximum_stars_wanted and tries < max_number_of_try: # To avoid taking too much time
    next_star_x = random.randint(0, screen.width)
    if does_not_overlap(next_star_x, placed_stars): # You will need to create this method
         placed_stars.append(next_star_x)
         number_of_stars += 1
    tries += 1
create_all_stars_from_x(placed_stars) # You will also need to create this method
0 голосов
/ 26 апреля 2019

Просто используйте randint (min, max). Генерирует число от мин до макс.

num_stars = randint(0, available_space_x / (2 * star_width))

Для более сложного использования генерации случайных чисел рекомендуется использовать модуль случайных чисел (списки случайных чисел, числа с плавающей запятой, варианты выбора ...).

import random
num_stars = random.randrange(0, available_space_x / (2 * star_width))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...