Проблема в игре Dungeon & Dragon с питоном - PullRequest
0 голосов
/ 28 декабря 2018

Я только что написал эту мини-игру с подземельями и драконами. Она еще не закончена, я не написал функцию дракона или функцию, которая выдает ошибку, когда пользователь ударяет по стене.Я просто хочу переместить игрока "X", сколько раз я хочу, но я не могу.это код:

import random
import os

def clear_screen():
    os.system('cls' if os.name == 'nt' else 'clear')

dungeon = [(0,0),(0,1),(0,2),(0,3),(0,4),
        (1,0),(1,1),(1,2),(1,3),(1,4),
        (2,0),(2,1),(2,2),(2,3),(2,4),
        (3,0),(3,1),(3,2),(3,3),(3,4),
        (4,0),(4,1),(4,2),(4,3),(4,4)
        ]

def first_random_position():
    return(random.choice(dungeon))

def make_dungeon(player_position):
    print(" _ _ _ _ _")
    for cell in dungeon:
        y = cell[1]
        if y < 4:
            if cell == player_position:
                print("|X", end = "")
            else:
                print("|_", end = "")
        elif cell == player_position:
            print("|X|")
        else:
            print("|_|")

def move_player(position,m_input):
    x,y = position
    if m_input.upper() == "UP":
        x -= 1
    elif m_input.upper() == "LEFT":
        y -= 1
    elif m_input.upper() == "RIGHT":
        y += 1
    elif m_input.upper() == "DOWN":
        x += 1
    position = x,y
    return(x,y)

def main():
    print("Welcome to the Dungeon!")
    input("Press 'Enter' on your keyboard to start the game!")
    first_pos = first_random_position()
    make_dungeon(first_pos)
    print("You are currently in room {}".format(first_pos))
    print("Enter LEFT , RIGHT , UP and DOWN to move the 'X'")
    print("Enter 'QUIT' to quit")
    main_input = input("\n")
    location = move_player(first_pos,main_input)
    clear_screen()
    make_dungeon(location)

main()

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

1 Ответ

0 голосов
/ 28 декабря 2018

Когда вы запускаете строки:

main_input = input("\n")
location = move_player(first_pos,main_input)
clear_screen()
make_dungeon(location)

Он запрашивает ввод пользователя только один раз, как заметил Патрик Артнер, вам нужно использовать loops в вашем скрипте.Если вы окружите этот скрипт while True:, он должен позволить вам продолжать двигаться:

def main():
    print("Welcome to the Dungeon!")
    input("Press 'Enter' on your keyboard to start the game!")
    location = first_random_position()
    make_dungeon(location)
    print("You are currently in room {}".format(location))
    while True:
        print("Enter LEFT , RIGHT , UP and DOWN to move the 'X'")
        print("Enter 'QUIT' to quit")
        main_input = input("\n")
        location = move_player(location,main_input)
        clear_screen()
        make_dungeon(location)

Вы должны использовать location вместо first_pos, потому что он обновляется с предыдущим движением.


Хотя это не связано с вопросом, я думаю, что эти изменения помогут вашему коду в будущем.Во-первых, я бы рекомендовал добавить elif m_input.upper() == "QUIT": exit() как временный способ выхода из игры.Во-вторых, вместо того, чтобы выписывать переменную подземелья, используйте ее для создания списка dungeon = [(x,y) for x in range(5) for y in range(5)].


Полный обновленный код

import random
import os

def clear_screen():
    os.system('cls' if os.name == 'nt' else 'clear')

dimensions = (6,6)
dungeon = [(x,y) for x in range(dimensions[0]) for y in range(dimensions[1])]

def first_random_position():
    return(random.choice(dungeon))

def make_dungeon(player_position):
    print(" _"*dimensions[1])
    for cell in dungeon:
        y = cell[1]
        if y < dimensions[1]-1:
            if cell == player_position:
                print("|X", end = "")
            else:
                print("|_", end = "")
        elif cell == player_position:
            print("|X|")
        else:
            print("|_|")

def move_player(position,m_input):
    x,y = position
    if m_input.upper() == "UP":
        x -= 1
    elif m_input.upper() == "LEFT":
        y -= 1
    elif m_input.upper() == "RIGHT":
        y += 1
    elif m_input.upper() == "DOWN":
        x += 1
    elif m_input.upper() == "QUIT":
        exit()
    position = x,y
    return(x,y)

def main():
    print("Welcome to the Dungeon!")
    input("Press 'Enter' on your keyboard to start the game!")
    location = first_random_position()
    make_dungeon(location)
    print("You are currently in room {}".format(location))
    while True:
        print("Enter LEFT , RIGHT , UP and DOWN to move the 'X'")
        print("Enter 'QUIT' to quit")
        main_input = input("\n")
        location = move_player(location,main_input)
        clear_screen()
        make_dungeon(location)
main()

Надеюсь, это помогло.


Вот простое объяснение таблицы для дальнейшего использования:

Simple Explanation

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