Пятница, 22 Ноября 2024, 10:55

Приветствую Вас Гость

[ Новые сообщения · Игроделы · Правила · Поиск ]
  • Страница 1 из 1
  • 1
Когда строитель занят..
minepecraftДата: Четверг, 02 Июля 2015, 11:37 | Сообщение # 1
участник
Сейчас нет на сайте
Ребят,проблема вот в чем,если строитель занят,то не показывает его занятость,т.е. не отнимается от переменной свободных строителей 1 единица.Раньше все работало ,но сейчас.........В общем вот исходник:http://rghost.ru/8G8RRbmrF , зарание спасибо!С меня плюсик)

ЛеонидДата: Четверг, 02 Июля 2015, 16:57 | Сообщение # 2
постоянный участник
Сейчас нет на сайте
Я ни капли не понял из твоего описания, даже отдаленно. "Не показывает, т.е. не отнимается"?
Rikstone26Дата: Четверг, 02 Июля 2015, 19:19 | Сообщение # 3
частый гость
Сейчас нет на сайте
Цитата Леонид ()
Я ни капли не понял из твоего описания, даже отдаленно. "Не показывает, т.е. не отнимается"?

Я так понял у него в игре есть индикатор, на котором написано количество свободных "рабочих", как только игрок дает команду рабочего, что-то делать, на индикаторе снижается количество рабочих.
Код
на индикаторе 12 рабочих свободно
-игрок даёт приказ
на индикаторе 11 рабочих свободно

Исходник его не смотрел.
minepecraftДата: Пятница, 03 Июля 2015, 18:50 | Сообщение # 4
участник
Сейчас нет на сайте
Rikstone26, да,именно,верно понял)))

Добавлено (02 июля 2015, 19:22)
---------------------------------------------
Ребят,сразу разъясню:
переменная global.workersmax-макс кол-во рабочих(т.е. чтобы показывало сколько рабочих вообще)а global.workers-рабочие,которые свободны.

Добавлено (03 июля 2015, 18:50)
---------------------------------------------
Ну ребят,вы где?)


USeR14Дата: Суббота, 04 Июля 2015, 17:27 | Сообщение # 5
RUSOriginal Studio
Сейчас нет на сайте
Пока не смог до конца разобраться в работе кода, но выявил несколько ошибок:
- Во первых, у тебя в коде рабочего события Step стоит на 4 строке переменная wasFree вместо wasfree.
- Во вторых, переменные isfree и wasfree никогда не меняются и всегда равны 1 (true).




ReanДата: Суббота, 04 Июля 2015, 20:14 | Сообщение # 6
участник
Сейчас нет на сайте
USeR14 всё правильно заметил. Не забывайте, что имена переменных чувствительны к регистру!
Ко всему прочему, значения "global.workers" и "global.workersmax" каждую секунду увеличивается на 1. Так и должно быть?
В общем, логика работы программы не очевидна. Сперва имеет смысл рассказать что и как должно работать, что мы должны увидеть во время функционирования приложения, какие параметры в какой момент времени должны изменяться и прочее.
Ведь сейчас лето. А летом, насколько мне известно, все телепаты в отпуске.

Взглянул более подробно по скрипту: всё же переменные "wasfree" и "isfree" меняются.
И если изменить у объекта "o_worker" в событии "step" на 4 строке скрипта с
Код
wasFree=false
на
Код
isfree=false
, то получится именно то, что требовалось.
Но всё же, оформление кода оставляет желать лучшего smile Старайтесь комментировать код более подробно. И желательно на английском. (у меня, видимо, из-за steam версии съехала кодировка).
Не забывайте выравнивать строки табуляцией, давать переменным говорящие имена (а не просто "global.p") и разделять команды точкой с запятой ";" - всё это помогает при прочтении вашего кода другими программистами. Следовательно, больше шансов, что вам помогут в решении ваших задач.


Сообщение отредактировал Rean - Суббота, 04 Июля 2015, 20:50
minepecraftДата: Суббота, 04 Июля 2015, 21:29 | Сообщение # 7
участник
Сейчас нет на сайте
Rean, да,комментарии и код оставляют желать лучшего,странно,что это все так работает,ведь раньше все работало...Ну и лови плююс)

Добавлено (04 июля 2015, 21:26)
---------------------------------------------
Да,могу и на английском делать комментарии,я его знаю довольно таки хорошо)Но некоторые его знают плохо,по этому и не знаю как быть))))

Добавлено (04 июля 2015, 21:27)
---------------------------------------------
Кстати,у меня там проблемка,ну это не проблема вовсе,но все же стоит ли менять dir(1) на false,когда dir(2)становится true?Эти массивы отвечают за передвижение

Добавлено (04 июля 2015, 21:29)
---------------------------------------------
USeR14, меняются:^


ReanДата: Воскресенье, 05 Июля 2015, 10:32 | Сообщение # 8
участник
Сейчас нет на сайте
minepecraft, мягко говоря, код не оптимизирован и очень запутан для понимания. Большое количество нетривиально используемых массивов. По-хорошему, надо брать и всё переписывать, предварительно обдумав все необходимые алгоритмы. Коль опыт пока не позволяет просчитывать всё в голове - составляйте алгоритмы на бумаге, просчитывайте их. Не думайте, что это скучно и неинтересно - напротив! Во-первых, это облегчит понимание протекающих процессов, а также повысит ваши навыки как программиста и разработчика. Во-вторых, сократит (да, именно!) время на решение как отдельно взятых задач, так и воплощение всего задуманного в целом. А это значит, что ценный энтузиазм не будет расходоваться попросту на "тупиковых" решениях.

Что касательно "dir[]". На первый взгляд, данный массив вообще не имеет смысла. Давайте попробуем перечислить случаи использования массива:
1)
Код

dir[0] = true;
dir[1] = false;

2)
Код

dir[0] = false;
dir[1] = true;

3)
Код

dir[0] = false;
dir[1] = false;


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

dir = 0; //Объект стоит
dir = 1; //Объект направлен влево
dir = 2; //Объект направлен вправо

И в нужный момент времени можно проверять/менять значение переменной (так называемый "флаг").
Для наглядности кода можно использовать перечисления "enum":
Код

// Объявляем перечисления direction где-нибудь в событии Create
enum direction {
     none,
     left,
     right
}

//Пример использования
...
global.currentWorker.dir = direction.none;
...


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

P.S. В своих примерах выше я использовал индексы массива "dir", начиная с 0, потому что именно так принято. Если вы используете только индексы 1 и 2, в памяти всё равно хранится значение для 0 индекса. Даже, если вы к нему не обращаетесь. Это не рационально.
  • Страница 1 из 1
  • 1
Поиск:

Все права сохранены. GcUp.ru © 2008-2024 Рейтинг