Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > разработка игр, графический дизайн и моделирование > Gamedev - cоздание игр: Unity, OpenGL, DirectX
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 02.06.2011, 20:32   #21
Daemonghost
Пользователь
 
Аватар для Daemonghost
 
Регистрация: 25.11.2010
Сообщений: 46
По умолчанию

Цитата:
Сообщение от [BeNdeR] Посмотреть сообщение
Да! Далеко ты меня увёл)
Код:
for j:=1 to 100 do
for i:=1 to 100 do
begin
maparray[0].layer1:={загружаем картинку}; // присваивание значения в ячейку 1 слоя
maparray[0].layer2:={загружаем картинку}; // присваивание значения в ячейку 2 слоя
maparray[0].layer3:={загружаем картинку}; // присваивание значения в ячейку 3 слоя
maparray[0].prohod:=true;// присваивание значения в ячейку проходимости
end;
или что здесь надо сделать?
Бендер, я думал ,ты читаешь коментарии.
при этом, этот код из редактора карт. Почему я ставил ... - потому что есть способы помещать в эти самые ячейки значения из файла(файлов)
Код:
for j:=1 to 100 do {это у меня карта 100 на 100, у тебя 28 на 28} 
for i:=1 to 100 do
begin
maparray[0].layer1:=1; {индекс текстуры из банка} {НЕ загружаем картинку, а присваивание значения в ячейку 1 слоя} 
maparray[0].layer2:=2;  // присваивание значения в ячейку 2 слоя
maparray[0].layer3:=6 ; // присваивание значения в ячейку 3 слоя
maparray[0].prohod:=true;{вот тут вот верно} // присваивание значения в ячейку проходимости
end;
Daemonghost вне форума Ответить с цитированием
Старый 02.06.2011, 22:13   #22
[BeNdeR]
Пользователь
 
Аватар для [BeNdeR]
 
Регистрация: 14.04.2011
Сообщений: 74
По умолчанию

Спасибо большое за ответы! А что без редактора карт нельзя препятствия реализовать? И я думал что этот редактор тупо переведёт мой текстового файла в типизированный. А почему нельзя как в #1?

Последний раз редактировалось [BeNdeR]; 03.06.2011 в 01:29.
[BeNdeR] вне форума Ответить с цитированием
Старый 03.06.2011, 20:52   #23
Daemonghost
Пользователь
 
Аватар для Daemonghost
 
Регистрация: 25.11.2010
Сообщений: 46
По умолчанию

Цитата:
Сообщение от [BeNdeR] Посмотреть сообщение
А что без редактора карт нельзя препятствия реализовать?
Редактор позволит заполнить твой типизированый файл значениями. Конкретно, если брать параметр проходимость, то определенная клетка будет иметь возможность допустить персонажа (значение true) или запретит проникновение (значение false)

Цитата:
Сообщение от [BeNdeR] Посмотреть сообщение
И я думал что этот редактор тупо переведёт мой текстового файла в типизированный.
Редактор не переведет твой текстовый файл в типизированный. Но он может воспользоваться твоим текстовым файлом, чтобы заполнить значения одного "слоя" файла.

Цитата:
Сообщение от [BeNdeR] Посмотреть сообщение
А почему нельзя как в #1?
Отрисовка - нерациональная, а если использовать типиированный файл - невозможная. Условия остановки персонажа - если использовать типизированый файл, я уже описывал.
Daemonghost вне форума Ответить с цитированием
Старый 04.06.2011, 23:03   #24
[BeNdeR]
Пользователь
 
Аватар для [BeNdeR]
 
Регистрация: 14.04.2011
Сообщений: 74
По умолчанию

А можно просто загрузить отдельно массив типа boolean и реализовать препятствиe? Типизированный файл это круто конечно, но у меня осталось 7 дней до сдачи курсовой)Просто я не очень понимаю как записать типизированный файл!
[BeNdeR] вне форума Ответить с цитированием
Старый 05.06.2011, 10:54   #25
phomm
personality
Старожил
 
Аватар для phomm
 
Регистрация: 28.04.2009
Сообщений: 2,882
По умолчанию

Вот объявление записи и чтение файла записей , запись в файл практически идентична, только поменять команды чтения на команды записи.
Лично я, правда, рекомендовал бы работать с потоками и классами, а не с записями и типизированными файлами... но это, конечно, уже позднее, ибо автору во-первых, рановато, а во-вторых, это ведь только для курсовой (поправьте , если не прав)
Код:
type
Rcell = record
param1 :  byte;
param2 :  word;
param3 :  char;
param4 :  boolean;
texid : byte;
end;

const size = 28;
cellsize = 32;
texcnt = 10;

var 
texar : array [0..texcnt] of tbitmap; // массив текстур
map : array [0..size-1, 0..size-1] of rcell;  // лучше сразу привыкай к индексации с нуля
// но если кроме курсовой ты никогда этим заниматься не пожелаешь, то можно и [1..28, 1..28]
// но я пишу пример для индекцсации от 0, так же надо будет немного переделать если нужна индексация от 1
...
function load(fname : string); //вернет false если чтение было с ошибкой
var i , j : byte;
f : file of rcell;
begin
result := false;
if fileexists(fname)
  then  try
assignfile(f,fname);
reset(f);
i:= 0;
j:= 0;
repeat
read(f, map[i,j]) // карта[строка, столбец]
if j = size-1 then // в конце строки, при последнем столбце осуществим перевод индексов на новую строку и столбец с 0
      begin
       inc (i);
       j := 0;
      end
     else inc (j);
    until i = size;
result := true;
except
end;
closefile(f);
end;
После этого отрисовка карты будет очень проста :
Код:
for i := 0 to size-1 do // строка
for j := 0 to size-1 do // столбец
canvas.draw(j*cellsize, i*cellsize, texar[map[i,j].texid]);
Массив текстур, конечно, отдельно грузим, можно просто много раз написать в Form.Oncreate (можно даже в цикле, если файлы картинок с одинаковыми именами и отличаются только номерами):
Код:
texar[номер] := tbitmap.create;
texar[номер].loadfromfile('диск:\путь\имя.bmp');
ну и в FormClose :
Код:
for i := 1 to texcnt do texar[i].free;
Примечание : писал тут, без проверки в среде(мог чуток нагрешить), но делал так много раз, и знаю, что рабочее ))

Последний раз редактировалось phomm; 06.06.2011 в 00:18.
phomm вне форума Ответить с цитированием
Старый 05.06.2011, 18:21   #26
[BeNdeR]
Пользователь
 
Аватар для [BeNdeR]
 
Регистрация: 14.04.2011
Сообщений: 74
По умолчанию

Тут что тоже типизированный файл?
Код:
f:file of rcell;
И как вообще можно записать файл типа rcell?
Я вот так пытался:
Код:
 type
  Rcell = record
  param1 : byte;
  param2 : word;
  param3 : char;
  param4 : boolean;
texid : byte;
end;

var
  Form1: TForm1;
  mas:array[0..28,0..22] of char;
  mas2:array[0..28,0..22] of real;//видимо не такой тип 
implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
var
 i,j:integer;
 f: TextFile;
 f1: file of rcell;

begin
  AssignFile(f,'1.txt');
  AssignFile(f1,'2.txt');
  Reset(f);
  Rewrite(f1);
  for j:=0 to 22 do
    for i:=0 to 28 do
      if i<28 then begin
        read(f,mas[i,j]);
        end
      else  begin
        readln(f,mas[i,j]);
        end;

for i:=0 to 28 do
for j:=0 to 22 do
stringgrid1.Cells[i,j]:=mas[i,j];

for j:=0 to 22 do
for i:=0 to 28 do
        mas2[i,j]:=strtofloat(stringgrid1.Cells[i,j]);

 for j:=0 to 22 do
 for i:=0 to 28 do
      if i<28 then
       write(f1,mas2[i,j])
      else
        writeln(f1,mas2[i,j]);
CloseFile(f);
CloseFile(f1);
end;
end.
но это была плохая идея.

Последний раз редактировалось [BeNdeR]; 05.06.2011 в 19:01.
[BeNdeR] вне форума Ответить с цитированием
Старый 05.06.2011, 19:35   #27
phomm
personality
Старожил
 
Аватар для phomm
 
Регистрация: 28.04.2009
Сообщений: 2,882
По умолчанию

Да, извиняюсь, я забыл указать тип , проглядел ((
Код:
map : array [0..size-1, 0..size-1] of rcell;
Совет : используй-таки константы вместо кучи этих 28 и 22 (например, mapwidth = 22, mapheight=28)
А использовать readln вообще не надо !
Чтобы положить какие-то данные в stringgrid.cells[x,y] они должны быть типа string

Последний раз редактировалось phomm; 05.06.2011 в 19:39.
phomm вне форума Ответить с цитированием
Старый 05.06.2011, 20:40   #28
[BeNdeR]
Пользователь
 
Аватар для [BeNdeR]
 
Регистрация: 14.04.2011
Сообщений: 74
По умолчанию

Если я объявлю массив типом rcell, то будет несоответствие типов! А стринггрид у меня заполняется, а во второй файл незаписывается! А за совет спасибо, так и сделаю!

Последний раз редактировалось [BeNdeR]; 05.06.2011 в 20:52.
[BeNdeR] вне форума Ответить с цитированием
Старый 06.06.2011, 08:39   #29
phomm
personality
Старожил
 
Аватар для phomm
 
Регистрация: 28.04.2009
Сообщений: 2,882
По умолчанию

Может, уже научишься говоря А , говорить и Б ? Куда указывает ошибка несоответствия типов ? сюда ?
Код:
mas2[i,j]:=strtofloat(stringgrid1.Cells[i,j]);
Если да, то она и должна туда указывать !
Объявить тип ты объявил, а работаешь с ним всё также, по-старому... я же написал, как грузить из файла, а в грид чтобы записть, нужно сперва то , что ты хочешь записать, перевести в строку, причем не всю запись rcell можно перевести в строку, а только 1 конкретный элемент (хотя можно и все элементы, в том числе и функцией), например
Код:
stringgrid1.Cells[i,j] := inttostr(mas[i,j].param1);
Возьми, уже наконец, самый простейший мануал по дельфи и изучи тему записи...

Последний раз редактировалось phomm; 06.06.2011 в 08:42.
phomm вне форума Ответить с цитированием
Старый 06.06.2011, 12:57   #30
[BeNdeR]
Пользователь
 
Аватар для [BeNdeR]
 
Регистрация: 14.04.2011
Сообщений: 74
По умолчанию

Читал я мануалы, но как то там не по теме всё! Вопрос: зачем
Код:
stringgrid1.Cells[i,j] := inttostr(mas[i,j].param1);
если map[i,j] у меня типа char и просто так записывается в стринггрид.
А ошибка да, вот тут выскакивает
Код:
mas2[i,j]:=strtofloat(stringgrid1.Cells[i,j]);
вот я чуть поправил:

Код:
  type
   Rcell = record
  param1 : byte;
  param2 : word;
  param3 : char;
  param5 : boolean;
  texid : byte;
end;

const
sizex=29;
sizey=23;

var
Form1: TForm1;
mapmas:array[0..sizex-1,0..sizey-1] of char;
mas2:array[0..sizex-1,0..sizey-1] of rcell;

implementation
{$R *.dfm}

//гружу как ты показывал
function  loadlevel(fname : string):boolean; 
var
i , j : byte;
f : textfile;
begin
result := false;
if fileexists('level1.txt')
then
assignfile(f,'level1.txt');
reset(f);
i:= 0;
j:= 0;
repeat
read(f,mapmas[i,j]);
if j = sizex-1 then 
 begin
      inc (i);
      j := 0;
      end
   else inc (j);
until i = sizey-1;
result := true;
closefile(f);
end;


procedure TForm1.Button1Click(Sender: TObject);
var
 i,j:integer; //èíäåêñû
 f: TextFile;
 f1: file of rcell;
begin
loadlevel('level1.txt');
AssignFile(f1,'2.txt');
Rewrite(f1);


for i:=0 to sizex-1 do
for j:=0 to sizey-1 do
stringgrid1.Cells[i,j]:=mapmas[i,j];

for i:=0 to sizex-1 do
for j:=0 to sizey-1 do
mas2[i,j].param1:=strtofloat(stringgrid1.Cells[i,j]);

//вот это вообще тут нужно?
i:= 0;
j:= 0;
repeat
write(f1,mas2[i,j]);
if j = sizex-1 then 
 begin
      inc (i);
      j := 0;
      end
   else inc (j);
until i = sizey-1;
result := true;
CloseFile(f1);
end;
end.
А нельзя сразу из одного массива в другой грузить?

Последний раз редактировалось [BeNdeR]; 06.06.2011 в 13:01.
[BeNdeR] вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Добавление препятствия в игру или закраска столбца в StringGrid Arm!n Помощь студентам 1 29.12.2010 21:23
Реализация stopvirus Общие вопросы Delphi 12 24.12.2010 19:44
Как соединить 2 image ломаной линией, обходящей препятствия (другие визуальные компоненты) Zerofill Помощь студентам 0 08.03.2010 00:15
Препятствия! anton14 Gamedev - cоздание игр: Unity, OpenGL, DirectX 2 01.02.2009 12:50
Препятствия в игре. Манжосов Денис :) Gamedev - cоздание игр: Unity, OpenGL, DirectX 2 07.06.2008 14:14