Скалолазание Симулятор


Я скалолаз, поэтому я сделал скалолазание игры. У меня есть два концептуальных объектов; альпинист и маршрут. Я в конечном итоге положить их обоих в едином Climber класс, и сделал route метод экземпляра класса.

Мне кажется, что они должны быть отдельно, но я был возникли проблемы с наследованием, поэтому я объединил их.

Я также удалены некоторые другой код, чтобы сделать это более емко. Мой код работает, но я не могу помочь, но думаю, что это может быть лучше - все отзывы.

import sys

print ("""We are playing a game today at Ship Rock. All the bros are 
here. Most points wins.""")

class Climber(object):
    def __init__(self, climber_name, ability): 
    self.climber_name = climber_name
    self.ability = ability
    self.routes_climbed = []
    self.energy_level = 100
    self.pump_level = 0
    self.total_score = 0
    self.pitch_count = 0

    def engine(self):
        next_action = input("What next? ")
        if next_action == "climb":
            self.climb_route((str(input("Enter route name: "))), (float(input("Enter route grade: " ))))
        elif next_action == "finish":
            self.grand_finale()

    def climb_route(self, route_name, grade):
        print ("Climbing...", route_name, " Grade...", grade)
        if grade < (.9 * self.ability):
            self.pump_level += (grade * .8)
        elif grade >= (.9 * self.ability):
            self.pump_level += (grade * 1.5)
        self.energy_level -= (grade * 1.7)
        self.total_score += grade
        self.routes_climbed.append(route_name)
        self.pitch_count += 1
        if self.energy_level <= self.pump_level:
            print ("Your day is over.")
            self.grand_finale()
        self.engine()

    def grand_finale(self):
        sys.exit() #quits program

climber1 = Climber("Erich Purpur", 13.0)
climber1.engine()


Комментарии
1 ответ

Я не знаю ничего о восхождении. Но я попробую по аналогии.

Я представляю, что альпинистские маршруты может быть что-то вроде лыжных трасс. Вы можете иметь курорт с множеством гор. Каждая гора может иметь несколько прогонов. Маршруты не обязательно начинать на том же месте, ни конца в том же месте. Маршруты могут иметь различные уровни сложности.

Так что у вас есть:


  • Курорт имеет горы м

  • Гора имеет


    • начиная с точки (где подъемники у вас)

    • е конечные точки (где работает до конца, и вы можете ехать домой)

    • P очков


  • Точка Р пробегает, оставляя его

  • Бег имеет рейтинг сложности (зеленый круг, синий квадрат, Черный бриллиант)

Как подойти к этому в игре? Ну, у вас есть некоторые из них уже. В pump_level и energy_level все хорошо.

Я бы сказал, что несколько топовых вещей (курорт, горы, отправная точка) - это серия текстовые подсказки. Что у вас есть-это графика. Когда игрок начинает, он находится на центральном узле на графике. Это "важное решение", которая решит остальной части решения: "какой курорт вы хотите посетить?"

Оттуда, вы можете изменить курортов (который является медленным и трудоемким и дорогостоящим, но может потребоваться для игры, или может быть "уровень" особенность - вы можете изменить только курорты как вам лучше). Или вы можете отправиться на различные отправные точки, принимая различные подъемники. Или вы могли бы пойти в другом горы, взяв фургон, потом подъемник. И т. д.

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

Я хотел отменить это для восхождения. Есть несколько мест, чтобы начать, может быть, некоторые "маршруты", которые доставят вас до основания несколько маршрутов. Когда вы поднимаетесь вверх, вы достигаете точки, что вы можете менять маршруты. Тогда в конечном итоге вы достигнете вершины, или некоторые другие конечные точки и т. д.

Обновление:

Так что у вас есть альпинист пересекает этот график начала/середины/конечные точки по различным маршрутам. Поэтому узлы (точки) имеют различные взвешенными ребрами (вес = сложность, стоимость и т. д.) и все они имеют имена.

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

class PathNode:
def __init__(self, ...):
self.routes = []

class Route:
def __init__(self, name: string, grade: float, start: PathNode, end: PathNode):
...

Независимо от цели вашего "подножия горы" Тип (я назвал это "курорт" в Примере лыж) будет иметь набор стандартных стартовых узлов.

class Resort:
def __init__(self, ...):
self.start_nodes = []

Ваш альпинист окажет текущего узла:

class Climber:
def __init__(self, ...):
self.location = None

Вы можете рассмотреть вопрос о внесении Resort наследовать от PathNode и использовать кучу с нулевой стоимостью маршруты для подключения к исходным точкам. Что бы сделать все в обход графа.

Если вы поставите "сообщение" в каждом маршруте, описывая борьбу, тогда курорт -> сообщения пуск может сыграть на том, что:


Вы садитесь в фургон с парой хипстеров, и головы для нижней части Эль Дьябло. Интересно, если эти ребята что нужно, чтобы сделать восхождение?"

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

1
ответ дан 12 марта 2018 в 03:03 Источник Поделиться