![]() |
![]() ![]() |
![]() |
ilua_great |
![]() ![]()
Сообщение
#1
|
![]() Новичок ![]() Группа: Пользователи Сообщений: 28 Пол: Мужской Реальное имя: Илья Репутация: ![]() ![]() ![]() |
Код 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. Эта прога должна рисовать из файла картинку и двигать её, но она не работает. ![]() ![]() |
volvo |
![]()
Сообщение
#2
|
Гость ![]() |
Цитата В чём проблема Вот в этом:![]() 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 |
![]()
Сообщение
#3
|
![]() Новичок ![]() Группа: Пользователи Сообщений: 28 Пол: Мужской Реальное имя: Илья Репутация: ![]() ![]() ![]() |
Да нет.
Управление работает, тока картинка искажается! Прикрепленные файлы ![]() |
TarasBer |
![]()
Сообщение
#4
|
![]() Злостный любитель ![]() ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 1 755 Пол: Мужской Репутация: ![]() ![]() ![]() |
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.
-------------------- |
ilua_great |
![]()
Сообщение
#5
|
![]() Новичок ![]() Группа: Пользователи Сообщений: 28 Пол: Мужской Реальное имя: Илья Репутация: ![]() ![]() ![]() |
Сп.
|
![]() ![]() |
![]() |
Текстовая версия | 10.08.2025 3:28 |