forum.boolean.name

forum.boolean.name (http://forum.boolean.name/index.php)
-   2D-программирование (http://forum.boolean.name/forumdisplay.php?f=109)
-   -   id клетки (http://forum.boolean.name/showthread.php?t=11411)

G.A.D 23.01.2010 16:44

Ответ: 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
К сожалению не работает(

moka 23.01.2010 17:06

Ответ: id клетки
 
Конечно не будет работать, я псевдо код написал.. :lol:
Исходя из вопроса, а теперь более убеждённый ответом, рекомендую, ознакомиться с базовыми знаниями самого языка, а затем отдельно, с функциями по работе с файлами (и потоками).

G.A.D 23.01.2010 17:10

Ответ: id клетки
 
хД я базовые знаю)
тьфу мне и не понятно как записать не в строчку а в столбик)
и так у меня есть массив 10 на 10
он заполнен никими цифрами
мне надо записать чтоб было
на каждой строчке по 10 цифр из массива
кажется понял пока сообщение писал)

moka 23.01.2010 17:14

Ответ: id клетки
 
На самом деле просто, на расшифровывать будет не просто.
Записывается функцией WriteLine, но строку, нужно сделать как стринг.
При чтении, тебе придётся этот стринг разбивать, и переносить в числа, впихивая в массив.
Поэтому я предложил нормальный вариант выше.

G.A.D 23.01.2010 17:20

Ответ: id клетки
 
П.с похоже базовые не знаю(
смотря что под ними понимать?

moka 23.01.2010 17:48

Ответ: id клетки
 
Работа с файлами - это база :)
Относительно типов данных, и как они хранятся в файлах, и что из себя представляют. Что такое строка в файле на самом деле. И как строки реализованы в самих языках программирования. Процессор не умеет хранить строк ;)
Строка - это массив, содержащий набор char (символ по ASCII, номер символа от 0 до 256). В файле, в котором записана строка, идёт вроде подобного: сперва записывается длина строки (int число), затем считываются int'ы несколько раз (исходя из длины строки), и вводятся в массив, по очерёдности, далее, функции работы со строками, и вообще как таковой строка, в BlitzMax, очень удобно реализована. Поэтому если узнать суть того как она работает, и как хранятся данные в файлах, ты избавишься от идеи, хранить строками. Это удобно если нужен доступ к файлу, из блокнота, но не практично, ни по скорости загрузки, ни по сохранности данных, т.к. блокнотом можно будет менять всё.
А если записывать не строками, тогда всё будет каракулями в блокноте, и информация будет более сохранна, а скорость загрузки и удобства тоже вырастут многозначно.
Попробуй с простой задачки: создай массив int'ов длинной в 10, запиши в файл, длину массива, и затем запиши все значения, по порядку.
Далее, напиши загрузчик, который прочтёт файл, вычтет длину предполагаемого массива, и создаст его, заполнив данными вычтенными из файла. И естественно на проверку - в дебаглог выведи всё, чтобы убедиться если всё правильно. :) Реализовав это, уже многое будет понятно, как с файлами работать.

G.A.D 23.01.2010 18:11

Ответ: 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
что-то не понимаю как можно эти ф-ии,которые я написал приминить к карте(

moka 23.01.2010 18:39

Ответ: id клетки
 
Код:

Function readmap(file_in$)
 Local file = ReadFile(file_in)
 Local width = ReadInt(file)
 Local height = ReadInt(file)
 Print width+","+height
 Local dim:Int[width,height]
 For y = 0 To height - 1
  For x = 0 To width - 1
  dim[x,y] = ReadInt(file)
  Print dim[x,y]
  Next
 Next
 For b:Int = EachIn dim
  Print b
 Next
 CloseFile(file)
End Function

Код:

Function writemap(file_out$,width%,height%,array:int[])
 Local file = WriteFile(file_out$)
 WriteInt(file, width)
 WriteInt(file, height)
 For y = 0 To height - 1
  For x = 0 To width - 1
  WriteInt(file, array[x,y])
  Next
 Next
 CloseFile(file)
End Function

Редактировал в броузере, поэтому може где ошибка есть, но не должно быть.
Вот 2д массив тебе сохраняется, и загружается.

G.A.D 23.01.2010 18:41

Ответ: id клетки
 
Спасибо!Но странно у меня не работает может я не правильно массив создаю.

G.A.D 24.01.2010 16:30

Ответ: 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?

moka 24.01.2010 16:48

Ответ: id клетки
 
Код:

Global LevMap:Int[10,10]
For Local y%=0 to 9
 For Local x%=0 to 9
  If x=0 or x=9 or y=0 or y=9
  If x<>9 and y<>1
    LevMap[x,y]=1
  EndIf
  EndIf
 Next
Next

Этот цикл, сделает такую же карту, как ты описал.

G.A.D 24.01.2010 17:29

Ответ: id клетки
 
Мне не надо делать карту автоматом
levmap надо записать)

moka 24.01.2010 18:15

Ответ: id клетки
 
Для этого делается редактор :)
Можно использовать DefData, чтобы "записывать" карту.

G.A.D 24.01.2010 20:35

Ответ: id клетки
 
Ясно,спасибо!
П,С все вопросы выше касались редактора,жаль сразу про defdata не сказал

G.A.D 25.01.2010 17:29

Ответ: id клетки
 
а есть какое нибудь другое решение?(если не Defdata)


Часовой пояс GMT +4, время: 04:52.

vBulletin® Version 3.6.5.
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Перевод: zCarot