Использование random.choice () с классами - PullRequest
0 голосов
/ 27 марта 2020

Как предрасположенность к этому посту, я очень новичок в программировании. Я был звукорежиссером в течение последних 5 лет, но из-за отсутствия работы в моем районе я решил go вернуться в школу для разработки программного обеспечения. Занятия начинаются в сентябре, но, хотя сейчас у меня простои из-за состояния мира (Коронавирус), я решил, что использую свое время в своих интересах и получу преимущество. Я решил начать с python, потому что синтаксис довольно прост, и я баловался им лет go, когда я был ребенком.

Так или иначе, я следовал учебным пособиям по YouTube и просто копировал код людей и чувствовал, что ничего не изучаю. Поэтому, когда у меня была базовая c концепция достаточного количества основ, чтобы начать, я решил, что просто начал что-то кодировать и учиться методом проб и ошибок и чтением документации. Я начал программировать простую текстовую RPG-игру.

Проблема, с которой я столкнулся, заключается в использовании функции random.choice () вместе со списком объектов, представляющих монстров, когда монстр выбран с определенным набором из статистики и уровня et c, он фиксирует их как первоначальный выбор. например.

У меня есть список из двух объектов-монстров, например:

monster = [Monster_Blob("Blob", 0, 0, 0, 0, 0), Monster_Skeleton("Skeleton", 0, 0, 0, 0, 0)]
pick = random.choice(monster)

Их характеристики внутри класса, такие как Level, определяются случайными целыми числами. Затем, наряду с этим, у игрока есть функция поиска:

def monster_search():
    global pick
    pick = random.choice(monster)
    print()
    print("You found a " + pick.Name)
    print()
    print("Name: " + str(pick.Name), "Level: " + str(pick.Lvl))
    print("HP: " + str(pick.BaseHP), "MP: " + str(pick.BaseMP))
    print("Str: " + str(pick.BaseStr), "Dex: " + str(pick.BaseDex))
    battle()

Когда HP монстров уменьшается до 0 и функция битвы заканчивается, когда вы снова вызываете функцию поиска, он повторяет те же 2 монстра с тем же статистика, которая была заблокирована во время начального поиска. Есть ли что-то еще, что я должен делать, кроме определения пика как случайного выбора монстра во время функции поиска?

Я знаю, что это довольно простой c материал, но он застрял у меня достаточно долго, и я нашел время написать это.

Спасибо за чтение.

1 Ответ

0 голосов
/ 27 марта 2020

Если я правильно понимаю, вы хотите, чтобы тип монстра определялся вашим случайным выбором из списка, но чтобы индивидуальные характеристики монстра определялись только после его выбора, а не при настройке исходного списка.

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

class Skeleton:  # the monster types should be set up to do stat randomization in __init__
    ...

class Blob:
    ...

monster_types = [Skeleton, Blob]

def pick_monster():
    picked_type = random.choice(monster_types)
    monster = picked_type()   # this does Skeleton() or Blob()

    ... # do stuff with the monster here, or maybe return it

Это прекрасный пример функции Python модели объектно-ориентированного программирования: Классы сами по себе являются объектами, поэтому вы можете делать с ними то, что обычно делаете с объектами других типов, например помещать их в списки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...