Game Maker - создание игр | HellRoom Games

Game Maker | GameMaker: Studio [Game-Maker.ru] => Для новичков: вопросы и ответы по Game Maker => Тема начата: kvok от Июнь 13, 2023, 11:13:56



Название: Отображение случайного текста из списка.
Отправлено: kvok от Июнь 13, 2023, 11:13:56
Появляется ошибка thanksMessages not set before reading it. Не создаётся глобальная переменная или создаётся слишком поздно. Должно появиться случайное сообщение из списка. (Вывод на экран сам доделаю.) Помогите.
Вот код:

в событии Create:
// Создание переменной science
var science = 134;
// Создаем глобальную переменную, которая будет хранить список сообщений
globalvar scienceMessages;
if (!scienceMessages) {
 scienceMessages = ds\_list\_create();
}

// Добавляем сообщение в список
if (!ds\_list\_find\_index(scienceMessages, "Спасибо за науку!")) {
 ds\_list\_add(scienceMessages, "Спасибо за науку!");
}
if (!ds\_list\_find\_index(scienceMessages, "Спасибо всем!")) {
 ds\_list\_add(scienceMessages, "Спасибо всем!");
}

в событии Step:
// Действия в событии Step
if (place\_meeting(x, y, oPlayer) && keyboard\_check\_pressed(ord("E")) && (oPlayer.science  0)) {
 // Передача науки объекту oPlayer
 var max\_transfer = min(science / 2, 100 - oPlayer.science);
 oPlayer.science += max\_transfer;
 // Уменьшение науки объекта oTree на количество, переданное объекту oPlayer
 oTree.science -= max\_transfer;

 // Если есть сообщения в списке, выбираем случайное сообщение и выводим его на экран, затем удаляем его из списка
 if (ds\_list\_size(scienceMessages) > 0) {
 var index = irandom(ds\_list\_size(scienceMessages) - 1);
 var message = ds\_list\_find\_value(scienceMessages, index);
 show\_message(message);
 ds\_list\_delete(scienceMessages, index); // Удаляем сообщение из списка
 }
}


Название: Re: Отображение случайного текста из списка.
Отправлено: ярик от Июнь 13, 2023, 17:03:51

 :gm123:
Код:
var science = 134;          // Создание переменной science
globalvar scienceMessages; // Создаем глобальную переменную, которая будет хранить список сообщений

if (!scienceMessages) {
 scienceMessages = ds_list_create();
}

if (!ds_list_find_index(scienceMessages, "Спасибо за науку!")) {
 ds_list_add(scienceMessages, "Спасибо за науку!");
}
if (!ds_list_find_index(scienceMessages, "Спасибо всем!")) {
 ds_list_add(scienceMessages, "Спасибо всем!");
}

  • Объявление локальных переменных происходит без конструкции с "var".
  • К чему "(!scienceMessages)"? И к чему тут булева инверсия?
  • Полагаю символы "\" в вашем коде - это какая-та ошибка копирования и на деле не выступают в его работе.
  • Зачем вы проверяете List на (не)наличие некоторых элементов, а затем эти же самые элементы добавляете? Любая структура после своей инициализации пуста! Поэтому заносите в неё новые элементы без проверок на их отсутствие


Починка:

Прочий код я не рассматривал ввиду его кривизны оформления.


Название: Re: Отображение случайного текста из списка.
Отправлено: kvok от Июнь 13, 2023, 21:02:46
Спасибоза ответ.  Мне помогает разбираться с кодом, славный ChatGPT. косяков у него хватает, но он единственный, кто может бесплатно обучать.


Название: Re: Отображение случайного текста из списка.
Отправлено: ярик от Июнь 14, 2023, 01:46:07
В программирование главное не исправить ошибку, а понять её..................  sm_sad