Top.Mail.Ru
Ответы
Аватар пользователя
7мес
Аватар пользователя
Аватар пользователя
Аватар пользователя
Программирование
+2

Помогите пожалуйста с программным кодом. Python

По дате
По рейтингу
Аватар пользователя
Гуру
7мес

Чего не так та

Аватар пользователя
Просветленный
7мес

1)Чтобы что-то случилось/не случилось, удобно использовать флаги с помощью типа Boolean;
Пример:

1234
 if x>1:
   no_step_2 = True
if (x<3) and no_step_2:
   //Этот код случится только при совпадении двух условий сразу => только при целом значении 2 

2)Не стоит писать в таком формате текстовый квест в принципе, лучше сформировать полноценную функцию шага и хранить прогресс прохождения отдельно, по нему извлекать данные этого этапа и ответы из массива строк (JSON отлично подойдет).
Продемонстрирую простейшую реализацию такого подхода:

123456789101112131415161718192021222324252627282930313233343536
 stages = [ 
    ["Вы на краю скалы, совершить прыжок?", "ДаTD1", "НетTD2"], 
    ["Вы превратились в мокрое место у подножия. Зачем?"], 
    ["Ваша жизнь скучна. Но все еще существует", "Я передумал, мне стоит прыгнуть?TD0", "Спуститься той же дорогой, которой пришел сюдаTD3", "Постоять еще немногоTD2"], 
    ["Споткнулись и покатились вниз. Жаль"] 
] 
k = 0 
play = True 
 
def endgame(): 
    print('Игра окончена') 
def player(x): 
    if len(x)>1: 
        print(x.pop(0)) 
        count = 1 
        moves = [] 
        for i in x: 
            td = i.split(sep="TD") 
            moves.append(int(td[1])) 
            print(count, '. ', td[0]) 
            count += 1 
        nextStep = int(input('>>> ')) 
        stage = int(moves[nextStep-1]) 
        return stage 
    else: 
        print(x[0]) 
        return 666 
     
     
while play: 
 
    a = stages[k].copy() 
    k = player(a) 
    if (k == 666) or (k > len(stages)-1): 
        play = False 
        endgame()     


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

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

  • И, конечно, здесь все еще многое стоит улучшить. Например, вынести массив stages отдельным файлом, сделать словари вместо строк, обеспечить дополнительные интерфейсные возможности (например, картинки или меню).

  • Отсутствие вариантов ответа в выбранном элементе массива автоматически сделает данный вариант концовкой.

Аватар пользователя
Искусственный Интеллект
7мес

Я так понял ты пишешь текстовый квест.
Что то мне подсказывает что его надо писать не постоянно через if/elif

Аватар пользователя
7мес

Код нужно предоставлять в полном виде, а также писать свою проблему и то, что тебе требуется на самом деле.