IPB
ЛогинПароль:

 
 Ответить  Открыть новую тему 
> 2d игра, Ошибка в коде
ilua_great
сообщение 9.05.2007 14:10
Сообщение #1


Новичок
*

Группа: Пользователи
Сообщений: 28
Пол: Мужской
Реальное имя: Илья

Репутация: -  0  +


Код

program game;
uses graph,crt;
var x,y:integer;
    exit:integer;
procedure start_graph;
var gd,gm:integer;
begin
gd:=detect;
gm:=5;
initgraph(gd,gm,'');
end;

procedure draw_spr(x1,y1,x2,y2:integer;path:string);
var xd,yd:integer;
    filespr:text;
    id:integer;
begin
assign(filespr,path);
reset(filespr);
for yd:=y1 to y2 do
  begin
  for xd:=x1 to x2 do
   begin
   read(filespr,id);
   putpixel(xd,yd,id);
   end;
  end;
close(filespr);
end;

procedure control;
var key:char;
begin
key:=readkey;
case ord(key) of
  72: y:=y-1;
  80: y:=y+1;
  75: x:=x-1;
  77: x:=x+1;
  27: exit:=1;
  end;
end;

procedure main;
begin
x:=1;
y:=1;
exit:=0;
end;

begin
start_graph;
main;
repeat
  draw_spr(x,y,12,10,'player.spr');
  control;
  cleardevice;
until exit=1;
end.

Эта прога должна рисовать из файла картинку и двигать её, но она не работает. mega_chok.gif В чём проблема blink.gif
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
volvo
сообщение 9.05.2007 14:17
Сообщение #2


Гость






Цитата
В чём проблема blink.gif
Вот в этом:

procedure control;
var key:char;
begin
key:=readkey;
case ord(key) of
  72: y:=y-1;
  80: y:=y+1;
  75: x:=x-1;
  77: x:=x+1;
  27: exit:=1;
  end;
end;
Коды клавиш - расширенные, первый байт - 0, второй - то что ты показал... То есть, обрабатывать так:
procedure control;
var key:char;
begin
key:=readkey;
case ord(key) of
  0: case ord(readkey) of
      72: y:=y-1;
      80: y:=y+1;
      75: x:=x-1;
      77: x:=x+1;
      end;
  27: exit:=1;
  end;
end;
 К началу страницы 
+ Ответить 
ilua_great
сообщение 9.05.2007 15:29
Сообщение #3


Новичок
*

Группа: Пользователи
Сообщений: 28
Пол: Мужской
Реальное имя: Илья

Репутация: -  0  +


Да нет.
Управление работает, тока картинка искажается!


Прикрепленные файлы
Прикрепленный файл  arcade.rar ( 13.89 килобайт ) Кол-во скачиваний: 158
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
TarasBer
сообщение 9.05.2007 18:38
Сообщение #4


Злостный любитель
*****

Группа: Пользователи
Сообщений: 1 755
Пол: Мужской

Репутация: -  62  +


draw_spr(x,y,12,10,'player.spr')
->
draw_spr(x,y,x+11,y+11,'player.spr')
Тогда будет без искажений.
А вообще каждый цикл читать картинку из файла - это неправильно.
Правильнее заранее её считать в массив, а потом из массива выводить, используя GetImage-PutImage.
И графику за собой надо закрывать.
Полный вариант:

program game;
uses graph, crt;
var x, y, ox, oy: integer;
    exit: integer;
    Size: integer;
    Image: pointer;

procedure start_graph;
var gd,gm:integer;
begin
 gd:=detect;
 gm:=5;
 initgraph(gd,gm,'');
end;

procedure draw_spr(x1,y1,x2,y2:integer;path:string);
var xd,yd:integer;
    filespr:text;
    id:integer;
begin
  assign(filespr,path);
  reset(filespr);
  for yd:=y1 to y2 do begin
    for xd:=x1 to x2 do begin
      read(filespr,id);
      putpixel(xd,yd,id);
    end;
  end;
  close(filespr);
end;

procedure control;
var key:char;
begin
 key:=readkey;
 case ord(key) of
  72: y:=y-1;
  80: y:=y+1;
  75: x:=x-1;
  77: x:=x+1;
  27: exit:=1;
  end;
end;

procedure main;
begin
 x:=1;
 y:=1;
 exit:=0;
end;

begin
  start_graph;
  main;
  draw_spr(x, y, 12, 10, 'player.spr');
  Size := ImageSize(x, y, 12, 10);
  GetMem(Image, Size);
  GetImage(x, y, 12, 10, Image^);
  ClearDevice;
  repeat
    PutImage(x, y, Image^, XorPut);
    ox := x;
    oy := y;
    control;
    PutImage(ox, oy, Image^, XorPut);
  until exit=1;
  FreeMem(Image, Size);
  CloseGraph;
end.



--------------------
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
ilua_great
сообщение 10.05.2007 15:20
Сообщение #5


Новичок
*

Группа: Пользователи
Сообщений: 28
Пол: Мужской
Реальное имя: Илья

Репутация: -  0  +


Сп.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 

- Текстовая версия 10.08.2025 3:28
Хостинг предоставлен компанией "Веб Сервис Центр" при поддержке компании "ДокЛаб"