2015-05-07 1 views
2

Я всегда писал программы, такие, что у меня есть основной цикл:Почему я не могу иметь основной цикл

initialiseStuff(); 
while(1){ 
    doRepetitiveStuff(); 
} 

Но, кажется, что screeps даст мне «консоль не отвечает» ошибка, если я попробуйте это.

Зачем это происходит? Я предполагаю, что игра ждет конца вашего скрипта, прежде чем что-то сделать?

Как я могу достичь того, что хочу (некоторые методы, задавать переменные, только один раз), когда весь основной символ повторяется каждый тик?

+0

попробуйте lazy -грузите любую «настройку», в которой вы нуждаетесь; или, как упоминалось в @artch, не заботятся об этом вообще, и имеют другой дизайн. по крайней мере, вы узнаете новую парадигму. – vivri

ответ

4

Как я могу достичь того, что хочу (некоторые методы, задавать переменные, только один раз), когда весь основной символ повторяется каждый галочкой?

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

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

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

Подробнее о том, как работает игровой цикл в этой статье: Understanding game loop, time and ticks.

0

Ваш скрипт никогда не заканчивается (в этом случае цикл while, который никогда не заканчивается). Обратите внимание, что сценарий запускается в отдельном процессе, который синхронизирован.

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

Лучшее, что вы можете сделать, это избегать трудных вычислений или распространять их по отдельным тикам, сохраняя при этом результат в памяти. Обратите внимание, что симулятор не изменяет состояние игры во время выполнения своего бота (это происходит только тогда, когда все боты выполнили свой код).

Любые проблемы с этой частью?

+0

Screeps api можно найти здесь http://support.screeps.com/hc/en-us/articles/203084991-API-Reference Вот краткий пример для счетчика, который отметит 1 выше каждый раз, когда он выполняется: 'if (Memory.ticks === undefined) Memory.ticks = 0; Memory.ticks ++; ' – avdg

+0

Также см. Http://support.screeps.com/hc/en-us/sections/201052561-Scripting – avdg