Извините, ничего не найдено.

Не расстраивайся! Лучше выпей чайку!
Регистрация
Справка
Календарь

Вернуться   forum.boolean.name > Программирование игр для компьютеров > BlitzMax > 2D-программирование

Ответ
 
Опции темы
Старый 23.01.2010, 16:44   #16
G.A.D
Разработчик
 
Регистрация: 28.02.2009
Сообщений: 434
Написано 44 полезных сообщений
(для 96 пользователей)
Ответ: 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
К сожалению не работает(
(Offline)
 
Ответить с цитированием
Старый 23.01.2010, 17:06   #17
moka
.
 
Регистрация: 05.08.2006
Сообщений: 10,429
Написано 3,454 полезных сообщений
(для 6,863 пользователей)
Ответ: id клетки

Конечно не будет работать, я псевдо код написал..
Исходя из вопроса, а теперь более убеждённый ответом, рекомендую, ознакомиться с базовыми знаниями самого языка, а затем отдельно, с функциями по работе с файлами (и потоками).
(Offline)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
G.A.D (23.01.2010)
Старый 23.01.2010, 17:10   #18
G.A.D
Разработчик
 
Регистрация: 28.02.2009
Сообщений: 434
Написано 44 полезных сообщений
(для 96 пользователей)
Ответ: id клетки

хД я базовые знаю)
тьфу мне и не понятно как записать не в строчку а в столбик)
и так у меня есть массив 10 на 10
он заполнен никими цифрами
мне надо записать чтоб было
на каждой строчке по 10 цифр из массива
кажется понял пока сообщение писал)
(Offline)
 
Ответить с цитированием
Старый 23.01.2010, 17:14   #19
moka
.
 
Регистрация: 05.08.2006
Сообщений: 10,429
Написано 3,454 полезных сообщений
(для 6,863 пользователей)
Ответ: id клетки

На самом деле просто, на расшифровывать будет не просто.
Записывается функцией WriteLine, но строку, нужно сделать как стринг.
При чтении, тебе придётся этот стринг разбивать, и переносить в числа, впихивая в массив.
Поэтому я предложил нормальный вариант выше.
(Offline)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
G.A.D (23.01.2010)
Старый 23.01.2010, 17:20   #20
G.A.D
Разработчик
 
Регистрация: 28.02.2009
Сообщений: 434
Написано 44 полезных сообщений
(для 96 пользователей)
Ответ: id клетки

П.с похоже базовые не знаю(
смотря что под ними понимать?
(Offline)
 
Ответить с цитированием
Старый 23.01.2010, 17:48   #21
moka
.
 
Регистрация: 05.08.2006
Сообщений: 10,429
Написано 3,454 полезных сообщений
(для 6,863 пользователей)
Ответ: id клетки

Работа с файлами - это база
Относительно типов данных, и как они хранятся в файлах, и что из себя представляют. Что такое строка в файле на самом деле. И как строки реализованы в самих языках программирования. Процессор не умеет хранить строк
Строка - это массив, содержащий набор char (символ по ASCII, номер символа от 0 до 256). В файле, в котором записана строка, идёт вроде подобного: сперва записывается длина строки (int число), затем считываются int'ы несколько раз (исходя из длины строки), и вводятся в массив, по очерёдности, далее, функции работы со строками, и вообще как таковой строка, в BlitzMax, очень удобно реализована. Поэтому если узнать суть того как она работает, и как хранятся данные в файлах, ты избавишься от идеи, хранить строками. Это удобно если нужен доступ к файлу, из блокнота, но не практично, ни по скорости загрузки, ни по сохранности данных, т.к. блокнотом можно будет менять всё.
А если записывать не строками, тогда всё будет каракулями в блокноте, и информация будет более сохранна, а скорость загрузки и удобства тоже вырастут многозначно.
Попробуй с простой задачки: создай массив int'ов длинной в 10, запиши в файл, длину массива, и затем запиши все значения, по порядку.
Далее, напиши загрузчик, который прочтёт файл, вычтет длину предполагаемого массива, и создаст его, заполнив данными вычтенными из файла. И естественно на проверку - в дебаглог выведи всё, чтобы убедиться если всё правильно. Реализовав это, уже многое будет понятно, как с файлами работать.
(Offline)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
G.A.D (23.01.2010)
Старый 23.01.2010, 18:11   #22
G.A.D
Разработчик
 
Регистрация: 28.02.2009
Сообщений: 434
Написано 44 полезных сообщений
(для 96 пользователей)
Ответ: 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
что-то не понимаю как можно эти ф-ии,которые я написал приминить к карте(
(Offline)
 
Ответить с цитированием
Старый 23.01.2010, 18:39   #23
moka
.
 
Регистрация: 05.08.2006
Сообщений: 10,429
Написано 3,454 полезных сообщений
(для 6,863 пользователей)
Ответ: 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д массив тебе сохраняется, и загружается.
(Offline)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
G.A.D (23.01.2010)
Старый 23.01.2010, 18:41   #24
G.A.D
Разработчик
 
Регистрация: 28.02.2009
Сообщений: 434
Написано 44 полезных сообщений
(для 96 пользователей)
Ответ: id клетки

Спасибо!Но странно у меня не работает может я не правильно массив создаю.
(Offline)
 
Ответить с цитированием
Старый 24.01.2010, 16:30   #25
G.A.D
Разработчик
 
Регистрация: 28.02.2009
Сообщений: 434
Написано 44 полезных сообщений
(для 96 пользователей)
Ответ: 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?
(Offline)
 
Ответить с цитированием
Старый 24.01.2010, 16:48   #26
moka
.
 
Регистрация: 05.08.2006
Сообщений: 10,429
Написано 3,454 полезных сообщений
(для 6,863 пользователей)
Ответ: 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
Этот цикл, сделает такую же карту, как ты описал.
(Offline)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
G.A.D (24.01.2010)
Старый 24.01.2010, 17:29   #27
G.A.D
Разработчик
 
Регистрация: 28.02.2009
Сообщений: 434
Написано 44 полезных сообщений
(для 96 пользователей)
Ответ: id клетки

Мне не надо делать карту автоматом
levmap надо записать)
(Offline)
 
Ответить с цитированием
Старый 24.01.2010, 18:15   #28
moka
.
 
Регистрация: 05.08.2006
Сообщений: 10,429
Написано 3,454 полезных сообщений
(для 6,863 пользователей)
Ответ: id клетки

Для этого делается редактор
Можно использовать DefData, чтобы "записывать" карту.
(Offline)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
G.A.D (24.01.2010)
Старый 24.01.2010, 20:35   #29
G.A.D
Разработчик
 
Регистрация: 28.02.2009
Сообщений: 434
Написано 44 полезных сообщений
(для 96 пользователей)
Ответ: id клетки

Ясно,спасибо!
П,С все вопросы выше касались редактора,жаль сразу про defdata не сказал
(Offline)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
moka (24.01.2010)
Старый 25.01.2010, 17:29   #30
G.A.D
Разработчик
 
Регистрация: 28.02.2009
Сообщений: 434
Написано 44 полезных сообщений
(для 96 пользователей)
Ответ: id клетки

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


Опции темы

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Клетки! Черный Лорд Основной форум 10 01.08.2007 10:42
столкновение со стенкой на уровне в виде клетки aureli0 Основной форум 1 19.04.2007 16:09


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


vBulletin® Version 3.6.5.
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Перевод: zCarot
Style crйe par Allan - vBulletin-Ressources.com