id клетки
Создаю поле 20x20
как мне для каждой клетке создать свою номер(id) Цитата:
|
Ответ: id клетки
например (не точно но суть ясна)
v.id$=int(str(i)+str(j)) |
Ответ: id клетки
не понимаю(
зачем тут str? |
Ответ: id клетки
Вот попробуй так
V.id=j+(i-1)*size |
Ответ: id клетки
в таком случае обратный вопрос!
Какой формулой(законом) вы руководствуетесь? |
Ответ: id клетки
Я ведь программист, я всё придумываю сам, ТАРАМ-ПАМ-ПАМ. Так что мыслим и думаем товарищи
|
Ответ: id клетки
G.A.D
тут бесконечное количество вариантов, по-сути ты хочешь от нас некую функцию z = f(x,y), которых может сколько угодно много как вариант использовать перевод двух индексов 2д массива в 1 индекс 1д массива, те Z = Y * array_width_size + X (по-сути это и происходит с двумя индексами когда ты обращаешься к 2д массиву, потому что 2д массив в памяти это 1д массив и компилятор просто переводит 2 индекса в 1 индекс) |
Ответ: id клетки
G.A.D: Такие вещи лучше массивом сразу делать и с типом не париться...
|
Ответ: id клетки
Ага, и создавать НЕСКОЛЬКО массивов чтобы загнать все необходимые свойства ОДНОГО объекта. Это конечно же во много раз легче, чем создать ОДИН тип. Спасибо Капитан Легкий Путь, вы нам помогли
|
Ответ: id клетки
Нафига тут несколько массивов? Тут как раз одним все обходится..
У него же не присваивается каждой клеточке уникальное имя.. Карту (или поверхность) как раз удобнее описывать через массив! А в другом случае, с разными типами данных уже лучше использовать тип.. Я не прав?))) |
Ответ: id клетки
Массив, может хранить хэндлы на элементы из класса. Для этого, изучите функции Handle и Object.
Инфа по этим функциям, на этом форуме обсуждалась многократно. |
Ответ: id клетки
Спасибо!
У меня есть массив Код:
massiv:int=[1,0,0,1,.. притом не в одну строку? а примерно так 1,0,0,1 1,0,0,1 0,1,1,0 |
Ответ: id клетки
как в блицу можно, командами
Writeline Readline |
Ответ: id клетки
Я наверное не так сформулировал задачу
надо чтоб в каждой строчке было по 4 символа как в массиве) затем следующая строка по 4 символа т.е 1,1,1,1, 0,1,1,0 1,1,1,1 а не 1,1,1,1,0,1,1,0,1,1,1,1 |
Ответ: id клетки
А зачем? Храни всё в битах, первым, запиши размер массива:
WriteInt(file,mwidth) Затем высоту: WriteInt(file,mheight) Замет циклом: For y=0 to mwidth-1 For x=0 to mheight-1 WriteByte(file,massive[x,y]) Next Next Читать также, сперва читаешь размер, потом вычитываешь данные. При этом, хранить всё в бинарном виде, а не в строках, намного лучше, и защищённей.. (да и со строками медленно работать) |
Ответ: id клетки
Для карты нужно)
Local stream:TStream = WriteStream("map.n") Local LevMap:Int[] =[1, 1, 1, 1, 1, 1, 1, 1, 1, 1, .. 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, .. 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, .. 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, .. 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, .. 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, .. 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, .. 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, .. 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, .. 1, 1, 1, 1, 1, 1, 1, 1, 1, 1] Local mwidth = 10 stream.WriteInt(mheight) stream.WriteInt(mwidth) For y = 0 To mwidth - 1 For x=0 to mheight-1 stream.WriteByte(levmap[x, y]) Next Next К сожалению не работает( |
Ответ: id клетки
Конечно не будет работать, я псевдо код написал.. :lol:
Исходя из вопроса, а теперь более убеждённый ответом, рекомендую, ознакомиться с базовыми знаниями самого языка, а затем отдельно, с функциями по работе с файлами (и потоками). |
Ответ: id клетки
хД я базовые знаю)
тьфу мне и не понятно как записать не в строчку а в столбик) и так у меня есть массив 10 на 10 он заполнен никими цифрами мне надо записать чтоб было на каждой строчке по 10 цифр из массива кажется понял пока сообщение писал) |
Ответ: id клетки
На самом деле просто, на расшифровывать будет не просто.
Записывается функцией WriteLine, но строку, нужно сделать как стринг. При чтении, тебе придётся этот стринг разбивать, и переносить в числа, впихивая в массив. Поэтому я предложил нормальный вариант выше. |
Ответ: id клетки
П.с похоже базовые не знаю(
смотря что под ними понимать? |
Ответ: id клетки
Работа с файлами - это база :)
Относительно типов данных, и как они хранятся в файлах, и что из себя представляют. Что такое строка в файле на самом деле. И как строки реализованы в самих языках программирования. Процессор не умеет хранить строк ;) Строка - это массив, содержащий набор char (символ по ASCII, номер символа от 0 до 256). В файле, в котором записана строка, идёт вроде подобного: сперва записывается длина строки (int число), затем считываются int'ы несколько раз (исходя из длины строки), и вводятся в массив, по очерёдности, далее, функции работы со строками, и вообще как таковой строка, в BlitzMax, очень удобно реализована. Поэтому если узнать суть того как она работает, и как хранятся данные в файлах, ты избавишься от идеи, хранить строками. Это удобно если нужен доступ к файлу, из блокнота, но не практично, ни по скорости загрузки, ни по сохранности данных, т.к. блокнотом можно будет менять всё. А если записывать не строками, тогда всё будет каракулями в блокноте, и информация будет более сохранна, а скорость загрузки и удобства тоже вырастут многозначно. Попробуй с простой задачки: создай массив int'ов длинной в 10, запиши в файл, длину массива, и затем запиши все значения, по порядку. Далее, напиши загрузчик, который прочтёт файл, вычтет длину предполагаемого массива, и создаст его, заполнив данными вычтенными из файла. И естественно на проверку - в дебаглог выведи всё, чтобы убедиться если всё правильно. :) Реализовав это, уже многое будет понятно, как с файлами работать. |
Ответ: id клетки
Может кому понадобятся)
Function readmap(file_in$) Local file = ReadFile(file_in) Local dim:Int[] Local dlin = ReadInt(file) Print dlin For i = 0 To dlin - 1 dim[i] = ReadInt(file) Print dim[i] Next For b:Int = EachIn dim Print b Next CloseFile(file) End Function Function writemap(file_out$,dlina:int,array:int[]) Local dim:Int[] =array Local file = WriteFile(file_out$) Local dlin = dlina WriteInt(file, dlin) For i = 0 To dlin - 1 WriteInt(file, dim[i]) Next CloseFile(file) End Function что-то не понимаю как можно эти ф-ии,которые я написал приминить к карте( |
Ответ: id клетки
Код:
Function readmap(file_in$) Код:
Function writemap(file_out$,width%,height%,array:int[]) Вот 2д массив тебе сохраняется, и загружается. |
Ответ: id клетки
Спасибо!Но странно у меня не работает может я не правильно массив создаю.
|
Ответ: id клетки
Global LevMap:Int[] =[1, 1, 1, 1, 1, 1, 1, 1, 1, 1, ..
1, 0, 0, 0, 0, 0, 0, 0, 0, 0, .. 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, .. 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, .. 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, .. 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, .. 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, .. 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, .. 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, .. 1, 1, 1, 1, 1, 1, 1, 1, 1, 1] writemap("d.ng", 10, 10, LevMap) readmap("d.ng") Error:Incorect array dimension Я так понимаю ,что я не указал второе измерение ,но не пойму где? получается что Levmap 1d массив. как его преобразовать в 2d? |
Ответ: id клетки
Код:
Global LevMap:Int[10,10] |
Ответ: id клетки
Мне не надо делать карту автоматом
levmap надо записать) |
Ответ: id клетки
Для этого делается редактор :)
Можно использовать DefData, чтобы "записывать" карту. |
Ответ: id клетки
Ясно,спасибо!
П,С все вопросы выше касались редактора,жаль сразу про defdata не сказал |
Ответ: id клетки
а есть какое нибудь другое решение?(если не Defdata)
|
Ответ: id клетки
Написать свой визуальный редактор. :)
|
Ответ: id клетки
Самый первый мой вопрос про запись в файл был для создания редактора.
(визуального) карту лучше хранить в массиве,а зачем ты мне тогда defdata порекомендовал? |
Ответ: id клетки
Ты хотел для начала сразу назначить массив. Я предложил вариант как это сделать :)
Используя DefData, можно в самом исходнике хранить тестовые данные. :) А насчёт редактора - я тебя к нему и вёл :) |
Ответ: id клетки
Я видно не так объяснил и ты меня не так понял)
И так в чём мне лучше карту хранить? В массиве как я предложил или в Defdata? Моя идея редактора была такова 1)Записать всё данные из массива в файл 2)Сохранить его 3) В самой игре считать данные и занести в массив 4)Построить карту из данных в массиве На 2 пункте у меня и возник вопрос как массив сохранить в файл |
Ответ: id клетки
делай как тебе удобно, эти мелкие формальности на результат не повлияют (есои правильно сделаешь) храни всё в текстовых файлах - если нравится. а вот как написать редактор и принцип его работы придумай и реализуй сам.
|
Ответ: id клетки
Цитата:
Поясню: я предложил DefData заместо этого (что ты хотел): Код:
Global LevMap:Int[] =[1, 1, 1, 1, 1, 1, 1, 1, 1, 1, .. Короче говоря, я то понял, но тебя не многа с толку сбил. DefData я предложил как уже сказал, как тестовый момент. Его вообще не используй в будущем. Напиши 2 программки, в одной можно будет мышкой менять массив. А в другой кодом определённый массив (как тут уже было выше расписано), научись сохранять, и загружать. Далее совмести :) Nite, сказал не о чём.. (нефтему) |
Ответ: id клетки
|
Ответ: id клетки
Moka,
в смысле много информации? первое написал с сохранением опять проблемы. как обозначают класс Blitzmax? в С++ class |
Ответ: id клетки
Посмотри примеры исходников, в поставке с бм. "Type"
|
Часовой пояс GMT +4, время: 03:15. |
vBulletin® Version 3.6.5.
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Перевод: zCarot