Понедельник, 23 Декабря 2024, 22:14

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

[ Новые сообщения · Игроделы · Правила · Поиск ]
  • Страница 1 из 1
  • 1
GM не позволяет делать разнотипные массивы?!
AGENTX001Дата: Пятница, 05 Августа 2011, 10:52 | Сообщение # 1
почётный гцупер
Сейчас нет на сайте
Всем доброго дня! Сегодня столкнулся с очень странной проблемой - Game Maker не может работать с массивом, в котором ячейки с разными типами данных. Я был намерен хранить инфу на серве в двумерном массиве, типо ulist[id],ulist[id,login] и т. д. Так вот, при id,login = "test", весь массив превращается в стринговый.... походу придётся переписывать сервер на хранение в нескольких массивах...Или заюзать ооп и класс юзера либо список... Ненавижу списки)

Добавлено (05.08.2011, 10:52)
---------------------------------------------
Да, я был прав, переписал на два массива, всё работает, только наскока это рационально - неизвестно... списки мне никогда не нраились... наверно надо будет придумать собственную систему хранения инфы...

elis1112Дата: Пятница, 05 Августа 2011, 10:52 | Сообщение # 2
Igni et ferro
Сейчас нет на сайте
познавательно)
ЙакудДата: Пятница, 05 Августа 2011, 10:58 | Сообщение # 3
участник
Сейчас нет на сайте
AGENTX001, а в чем собственно проблема? Можно хранить весь массив в строке, а для того, чтобы узнать изначально строка это или нет можно использовать самописную простейшую функцию:

#string_is_real
Code
if(is_real(argument0)) return argument0;
if(string_digits(argument0) == argument0)
   return real(argument0);
return false;


Эта функция не кушает систеных ресурсов и пользоваться ей тоже можно...

И ещё.. Твои мысли на счет того, что гм не позволяет сделать значения разного типа в одном массиве, я могу опровергнуть приведенным ниже кодом.
Скопируй и запусти у себя его...
Code
a[0] = 1;
a[1] = 5;
a[2] = "string";
a[3] = 100;

txt = '';
for(i = 0; i < 4; i += 1)
{
   txt += "a["+string(i)+"] = "+string(a[i])+"; type = ";
   if(is_real(a[i]))
     txt += "real;#"
   else
     txt += "string;#"
}

show_message(txt);


"Хороший художник – копирует, гениальный – ворует!" — Pablo Picasso
.blanco 2.0
AGENTX001Дата: Пятница, 05 Августа 2011, 11:16 | Сообщение # 4
почётный гцупер
Сейчас нет на сайте
Йакуд, странно. Действительно можно.... Но мне писал "нимагу сравнить аргументы".... в простейшем коде
Code

if ulist[i] != -1 {
...
}

Причём это происходило как только выполнялся код
Code

ulist[i,_login] = dll39_read_string(0)//_login это идентификатор, объявлен в криэйте
ЙакудДата: Пятница, 05 Августа 2011, 11:30 | Сообщение # 5
участник
Сейчас нет на сайте
Quote (AGENTX001)
Но мне писал "нимагу сравнить аргументы".... в простейшем коде

Видимо в цикле ты в каком-то месте сравниваешь строку с реальной величиной.
можно сделать так:
Code
if(is_real(ulist[i]))
if ulist[i] != -1 {  
  ...  
}


"Хороший художник – копирует, гениальный – ворует!" — Pablo Picasso
.blanco 2.0
AGENTX001Дата: Пятница, 05 Августа 2011, 11:44 | Сообщение # 6
почётный гцупер
Сейчас нет на сайте
Йакуд, та не вроде, всё норм. Лана, я всёравно буду юзать несколько массивов, удобнее.
VinchensooДата: Пятница, 05 Августа 2011, 11:59 | Сообщение # 7
Злобный социопат с комплексом Бога
Сейчас нет на сайте
AGENTX001, можно вопрос?
Quote (AGENTX001)
list[i] != -1

Quote (AGENTX001)
ulist[i,_login]

Как это понимать вообще?

Ты двумерному массиву сообщаешь один индекс? Так и надо? <_<


AGENTX001Дата: Пятница, 05 Августа 2011, 12:07 | Сообщение # 8
почётный гцупер
Сейчас нет на сайте
Vinchensoo, i - переменная цыкла for, _login - переменная, обьявлена в create, равна 4.

Добавлено (05.08.2011, 12:07)
---------------------------------------------

Quote (Vinchensoo)
Ты двумерному массиву сообщаешь один индекс? Так и надо?

втф, а что такого? проверял, всё работает. Я просто гдето
Quote (Йакуд)
Видимо в цикле ты в каком-то месте сравниваешь строку с реальной величиной.
VinchensooДата: Пятница, 05 Августа 2011, 12:08 | Сообщение # 9
Злобный социопат с комплексом Бога
Сейчас нет на сайте
Quote (AGENTX001)
Vinchensoo, i - переменная цыкла for, _login - переменная, обьявлена в create, равна 4.

Сам ты цЫкл, блин.

Вот код:

Code
arr[1]=10;
arr[1,5]=4;

Попробуй откомпилировать его на гм.

Скажешь, что будет.

Quote (AGENTX001)
втф, а что такого? проверял, всё работает. Я просто гдето

В том, что ты к матрице обращаешься по индексу biggrin

Он тебе даже в идеале не может вернуть.

Ну, например, есть матрица:

Code
1 2 3
7 5 2
5 6 7


Ты обращаешься к ней arr[1]. Что он тебе вернет? Всю строку?

Я, конечно, не знаю, как это обрабатывает гм, но так делать- ни разу не культурно.


AGENTX001Дата: Пятница, 05 Августа 2011, 12:13 | Сообщение # 10
почётный гцупер
Сейчас нет на сайте
Quote (Vinchensoo)
Сам ты цЫкл, блин.

Оскорбление))
Quote (Vinchensoo)
Попробуй откомпилировать его на гм.

Всё пашет! Я ж говорю
Quote (AGENTX001)
проверял, всё работает.

Если так хочешь, то и твой код запущу

Добавлено (05.08.2011, 12:10)
---------------------------------------------
Всё норм!!

Добавлено (05.08.2011, 12:11)
---------------------------------------------
Еслибы ошибка была в этом, то не пахалобы с самого начала, когда объявлял массив...

Добавлено (05.08.2011, 12:13)
---------------------------------------------
Vinchensoo, какая разница собственно)) Всёравно юзаю несколько массивов. хз как это скажется на производительности...

VinchensooДата: Пятница, 05 Августа 2011, 12:31 | Сообщение # 11
Злобный социопат с комплексом Бога
Сейчас нет на сайте
Гм меня убил. Больше никогда не скажу, что он хороший happy

Юзай несколько массивов.


AGENTX001Дата: Пятница, 05 Августа 2011, 12:51 | Сообщение # 12
почётный гцупер
Сейчас нет на сайте
Vinchensoo, biggrin
Quote (Vinchensoo)
Юзай несколько массивов.

Ага.
Dva_KotaДата: Пятница, 05 Августа 2011, 15:28 | Сообщение # 13
заслуженный участник
Сейчас нет на сайте
Если для двухмерного массива указать только один индекс, то первый индекс будет считаться равным нолю. Т.е. для двухмерного массива запись arr[1] будет идентичной записи arr[0,1].

Новый пример инвентаря! /20.06.2012/

Energy Wars


Сообщение отредактировал Dva_Kota - Пятница, 05 Августа 2011, 15:28
froexДата: Пятница, 05 Августа 2011, 15:45 | Сообщение # 14
Руководитель Froexilize team
Сейчас нет на сайте
Quote (AGENTX001)
массивом, в котором ячейки с разными типами данных

По определению массив хранит только однотипные данные. Читай Вирта для начала.


Не превращайте форум в чат. Пишите более развернуто и понятно - всё равно вас попросят объяснить подробнее.
Алгоритмы, программирование, оптимизация, тестирование, ведение проектов.
Ищу художника, дизайнера, тестера, программистов С и С++
Обучаю процессам разработки и программированию.
AGENTX001Дата: Пятница, 05 Августа 2011, 18:16 | Сообщение # 15
почётный гцупер
Сейчас нет на сайте
Quote (froex)
По определению массив хранит только однотипные данные. Читай Вирта для начала.

к ГМ это не относится))

Добавлено (05.08.2011, 18:16)
---------------------------------------------

Quote (Dva_Kota)
Если для двухмерного массива указать только один индекс, то первый индекс будет считаться равным нолю. Т.е. для двухмерного массива запись arr[1] будет идентичной записи arr[0,1].

Спс, эт многое проясняет...
  • Страница 1 из 1
  • 1
Поиск:

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