Начал изучать Python как свой первый язык 20 дней назад, так что, пожалуйста, извините меня, если это глупый вопрос.

Я сделал Snake Game с помощью 100-дневного курса Анжелы Ву по программированию Python на udemy. Каждый раз, когда «еда» съедается, змея становится длиннее. Все идет нормально. Теперь я изменил цвет новой еды на случайный цвет с помощью функции (или метода?) make_color в food.py:

    def make_color(self):
        r = random.randint(0, 255)
        g = random.randint(0, 255)
        b = random.randint(0, 255)
        random_color = r, g, b
        return random_color

В следующем методе, где создается новый сегмент змеи, я вызвал (?) этот метод:

    def refresh(self):
        self.setheading(random.randint(0, 360))
        self.color(self.make_color())
        random_x = random.randint(-280, 280)
        random_y = random.randint(-280, 280)
        self.goto(random_x, random_y)

Оба находятся внутри класса Food.

Так что теперь каждая новая еда имеет случайный цвет — как я и хотела.

Когда еда съедена, змея получает еще один сегмент, это происходит в змее.py внутри класса змеи.

    def add_segment(self, position):
        new_segment = Turtle(shape="square")
        new_segment.color(255, 255, 255)
        new_segment.penup()
        new_segment.goto(position)
        self.segments.append(new_segment)

Это прекрасно работает, новый сегмент белый, так как я использовал 255, 255, 255. Но я хочу, чтобы он имел тот же случайный цвет, что и еда, которую он только что съел. И я просто не могу заставить его работать.

Думаю, мне нужно использовать random_color из food.py, но я не могу понять, как это сделать. еда импортируется в змейку.py через from food import Food

Заранее спасибо, извините, если это глупый и простой вопрос для Google.

2
Zapfhahn_ 21 Янв 2022 в 19:55
2
Хорошая работа, показывающая только соответствующий код! И хорошо, что вы задаете вопросы помимо учебника.
 – 
Mad Physicist
21 Янв 2022 в 20:02
1
Вы должны гордиться собой. Многие из нас видели, как многие начинающие программисты публикуют вопросы низкого качества (чего и следовало ожидать). Это, без исключения, лучший вопрос, заданный начинающим программистом, которого я когда-либо видел. Ты собираешься пойти далеко, Kid.
 – 
Warlax56
21 Янв 2022 в 20:09

3 ответа

Вам понадобится метод add_segment, чтобы принять другой аргумент вместе с position, в этом случае этот аргумент должен быть объектом Food (поэтому, возможно, вызовите аргумент food). Затем в add_segment вы можете извлечь цвет food (при условии, что метод color в Food устанавливает атрибут, содержащий цветовой кортеж, или есть метод, скажем, , get_color(), который получает кортеж). Например.:

def add_segment(self, position, food):
    new_segment = Turtle(shape="square")
    new_segment.color(food.get_colour())
    new_segment.penup()
    new_segment.goto(position)
    self.segments.append(new_segment)

Это означает, что вам нужно изменить везде, где в вашем коде вызывается add_segment, чтобы передать ему объект еды, который только что был съеден.

2
Matt Pitkin 21 Янв 2022 в 20:06
Если оператор хочет того же цвета, что и конкретная еда, это правильный ответ. Мой более философский
 – 
Mad Physicist
21 Янв 2022 в 20:12

Обратите внимание, что в make_color вы не используете аргумент self. Это хорошее эмпирическое правило: что-то не должно быть в вашем классе, поскольку это функция полезности. Как вы уже поняли, служебные функции полезны везде, а не только в том месте, где вы их написали.

Первый шаг — вынести make_color за пределы класса и удалить аргумент self:

def make_color():
    r = random.randint(0, 255)
    g = random.randint(0, 255)
    b = random.randint(0, 255)
    random_color = r, g, b
    return random_color

Теперь в snake.py вы импортируете его вместе с Food:

from food import Food, make_color

И вуаля, теперь вы можете использовать его в любом месте модуля snake. Не забудьте splat аргументы:

new_segment.color(*make_color())
0
Mad Physicist 21 Янв 2022 в 20:10
Я не уверен, что это то, о чем спрашивал ОП. Цель состоит в том, чтобы сделать сегмент new_segment того же цвета, что и еда, которую только что съела змея. Разве это не сделает цвет новым случайным цветом?
 – 
Warlax56
21 Янв 2022 в 20:12
Примечание: видел ваш комментарий в ответе Мэтта. Хотя это не отвечает на прямой вопрос OP, я думаю, что это полезно для демонстрационных целей, поскольку на самом деле цель состоит в том, чтобы изучить принципы кодирования, а не создавать игру со змеями.
 – 
Warlax56
21 Янв 2022 в 20:15

Если вы используете Pycharm, вам нужно сначала установить папку как корневую папку. Вы можете попробовать в левом представлении проекта щелкните правой кнопкой мыши папку, которую вы увидите

-2
SampoValo 21 Янв 2022 в 20:00
Это не то, о чем спрашивает OP
 – 
Mad Physicist
21 Янв 2022 в 20:02