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

2 страниц V  1 2 >  
 Ответить  Открыть новую тему 
> Не двигается(((
сообщение
Сообщение #1


Новичок
*

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

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


Мне нужно движение вне массива,так как сам герой у меня больше блоков.Вроде всё прописал а он не двигается.
вот код,подскажите в чём ошибка пожалуйста.


uses graph,crt;

const n=25;
dx=27;
dy=22;
up=#72;
left=#75;
right=#77;
down=#80;
esc=#27;
probel=#32;
enter=#13;
type massiv = array[1..n,1..n] of integer;

const a:massiv=((3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3),
(2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,10,2),
(2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,2),
(2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,2),
(2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,2),
(2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,2),
(2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,9,0,0,4,2),
(2,0,0,0,8,0,0,0,0,0,8,0,0,0,0,8,0,0,0,0,0,0,0,4,2),
(2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,2),
(2,1,1,4,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2),
(2,0,0,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2),
(2,0,0,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2),
(2,0,0,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2),
(2,0,0,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2),
(2,0,0,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2),
(2,8,0,4,0,0,7,0,0,0,8,0,0,0,8,0,0,0,0,8,0,0,0,0,2),
(2,0,0,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2),
(2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,4,1,2),
(2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,0,2),
(2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,0,2),
(2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,0,2),
(2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,6,0,4,0,2),
(2,0,8,0,8,0,0,0,0,8,0,0,0,8,0,0,0,8,0,0,0,0,4,0,2),
(2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,0,2),
(2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2));


var p_zem,p_nebo,p_deva,p_dev,p_devs,p_yabloko,p_pulya,p_snaryad,p_yablonya,p_ship,p
_volk1,p_volk2,p_volkk,p_stypen,p_stena:pointer;
x0,y0,gd,gm,x_deva,y_deva,dx_deva,dy_deva:integer;
tab:massiv;
ch:char;

procedure load_image(name_file:string; var p:pointer);
var f:file;
size:word;
begin
assign(f,name_file);
reset(f,1);
size:=filesize(f);
getmem(p,size);
blockread(f,p^,size);
close(f);
end;

procedure initpict;
begin
load_image('zemlya',p_zem);
load_image('nebo',p_nebo);
load_image('stena',p_stena);
load_image('stypen',p_stypen);
load_image('devochka',p_deva);
load_image('volk',p_volk1);
load_image('volk',p_volk2);
load_image('ship',p_ship);
load_image('yabloko',p_yabloko);
load_image('yablonya',p_yablonya);
load_image('volkk',p_volkk);
load_image('devochk',p_dev);
load_image('devochks',p_devs);
load_image('pulya',p_pulya);
load_image('snaryad',p_snaryad);
end;

Procedure upr_move(var x,y:integer;dx,dy:integer;p:pointer);
begin

ch:=readkey;
if ch=#0 then
begin
ch:=readkey;
putimage(x,y,p^,xorput);
Case ch of
left: x:=x-dx;
right: x:=x+dx;
up: y:=y-dy;
down:y:=y+dy;
end;
putimage(x,y,p^,xorput);
end;
end;

procedure initdata;
begin
x_deva:=320;
y_deva:=510;
dx_deva:=20;dy_deva:=20;
putimage (x_deva,y_deva,P_deva^,xorput);
end;

procedure drawlab;
var x,y,i,k:integer;
begin
cleardevice;
x0:=150;
y0:=50;
for i:=1 to n do
for k:=1 to n do
tab[i, k]:=a[i, k];
for i:=1 to n do
for k:=1 to n do
begin
x:=x0+(k-1)*dx;
y:=y0+(i-1)*dy;
case tab[i,k] of
1: putimage(x,y,p_zem^,normalput);
2: putimage(x,y,p_stena^,normalput);
3: putimage(x,y,p_nebo^,normalput);
4: putimage(x,y,p_stypen^,normalput);
{ 5: begin
putimage(x,y,p_deva^,xorput);
i_devochka:=i;
k_devochka :=k;
tab[i, k]:=0;
end;}
6: putimage(x,y,p_volk1^,normalput);
7: putimage(x,y,p_ship^,normalput);
8: putimage(x,y,p_yabloko^,normalput);
9: putimage(x,y,p_volk2^,normalput);
10: putimage(x,y,p_yablonya,xorput);
end;
end;
end;

procedure game;
var x,y:integer;
begin
cleardevice;
drawlab;
initdata;
repeat
if keypressed then
upr_move(x_deva,y_deva,dx_deva,dy_deva,p_deva);
until ch=esc;
end;


begin
gd:=detect;
initgraph(gd,gm,'');
initpict;
game;
readln;
end.


Сообщение отредактировано: justix -
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #2


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

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

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


А ты перерисовываешь новые положения? Или один раз нарисовал, а потом координаты меняешь?


--------------------
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #3


Новичок
*

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

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


Цитата(TarasBer @ 19.12.2011 12:58) *

А ты перерисовываешь новые положения? Или один раз нарисовал, а потом координаты меняешь?

Procedure upr_move(var x,y:integer;dx,dy:integer;p:pointer);
begin

ch:=readkey;
if ch=#0 then
begin
ch:=readkey;
putimage(x,y,p^,xorput); <----стёр в старом положении
Case ch of
left: x:=x-dx;
right: x:=x+dx;
up: y:=y-dy;
down:y:=y+dy;
end;
putimage(x,y,p^,xorput); <---нарисовал уже в новом
end;
end;


Ну вроде рисую

Добавлено через 18 мин.
Цитата(justix @ 19.12.2011 14:21) *

Procedure upr_move(var x,y:integer;dx,dy:integer;p:pointer);
begin

ch:=readkey;
if ch=#0 then
begin
ch:=readkey;
putimage(x,y,p^,xorput); <----стёр в старом положении
Case ch of
left: x:=x-dx;
right: x:=x+dx;
up: y:=y-dy;
down:y:=y+dy;
end;
putimage(x,y,p^,xorput); <---нарисовал уже в новом
end;
end;
Ну вроде рисую

А вроде у меня он просто напросто клавиатуру не отслеживаетОоПотому что другие самые простенькие программы он и там не двигает и даже интер и ескейп не робятОо

Сообщение отредактировано: justix -
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #4


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

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

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


Так ты отладку запусти.
Допиши что-нибудь в код обработки нажатия клавиши, чтобы было сразу видно, что это произошло.
Поставь там точку прерывания программы.

И используй же теги! А то неформатированный код читать невозможно.


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


Новичок
*

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

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


Цитата(TarasBer @ 19.12.2011 15:10) *

Так ты отладку запусти.
Допиши что-нибудь в код обработки нажатия клавиши, чтобы было сразу видно, что это произошло.
Поставь там точку прерывания программы.

И используй же теги! А то неформатированный код читать невозможно.

Извини,как теги использовать не знаю(((
И как отладку делать с чем то дописыванием в код обработки нажатия клавиши,подскажи пожалуйста.

Сообщение отредактировано: justix -
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #6


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

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

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


> Извини,как теги использовать не знаю(((

Ну блин, перед кодом пишешь

{code=pas} (только скобочки квадратные, а не круглые)

а после - {/code}

Или выделяешь код и нажимаешь на жирную надпись CODE, что над формой ответа, выбираешь Pascal

> И как отладку делать с чем то дописыванием в код обработки нажатия клавиши,подскажи пожалуйста.

Ну ставишь курсор на нужную строчку и дальше жмёшь Debug->Breakpoints-> Add Breakpoint. Всё, теперь программа будет останавливаться при достижении этой строчки.


--------------------
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #7


Новичок
*

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

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


Цитата(TarasBer @ 19.12.2011 15:33) *

> Извини,как теги использовать не знаю(((

Ну блин, перед кодом пишешь

{code=pas} (только скобочки квадратные, а не круглые)

а после - {/code}

Или выделяешь код и нажимаешь на жирную надпись CODE, что над формой ответа, выбираешь Pascal

> И как отладку делать с чем то дописыванием в код обработки нажатия клавиши,подскажи пожалуйста.

Ну ставишь курсор на нужную строчку и дальше жмёшь Debug->Breakpoints-> Add Breakpoint. Всё, теперь программа будет останавливаться при достижении этой строчки.

Тааак,и что мне это должно дать?
поставил где в процедуре Upr_move "ch:=readkey;" запустилось и показалась ошибка.ВсёОо
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #8


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

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

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


Что за ошибка, что написано?


--------------------
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #9


Новичок
*

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

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


Цитата(TarasBer @ 19.12.2011 15:48) *

Что за ошибка, что написано?

Run time error 4211795
error addres $00000000
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #10


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

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

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


А если убрать точку остановки (то есть сам текст кода не трогать, только само красное выделение убрать), то всё работает нормально?

Сообщение отредактировано: TarasBer -


--------------------
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #11


Новичок
*

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

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


Цитата(TarasBer @ 19.12.2011 16:02) *

А если убрать точку остановки (то есть сам текст кода не трогать, только само красное выделение убрать), то всё работает нормально?

Да,запускается,рисуется,но не двигается(((
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #12


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

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

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


Впервые вижу такое, чтобы точка остановки заставляла программу вылетать.
Короче, я чуть позже попробую запустить твою программу (сейчас не могу), отпишусь.


--------------------
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #13


Новичок
*

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

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


Цитата(TarasBer @ 19.12.2011 16:11) *

Впервые вижу такое, чтобы точка остановки заставляла программу вылетать.
Короче, я чуть позже попробую запустить твою программу (сейчас не могу), отпишусь.

я думаю это связано с самим паскалем,мб не такой какой то.
Давай я те тогда папку с картинками скину чтоб спокойно запускал?
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #14


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

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

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


Папку заархивируй и тоже сюда выложи.
(я не могу запускать, потому что винда блин семёрка)


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


Новичок
*

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

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


Цитата(TarasBer @ 19.12.2011 16:19) *

Папку заархивируй и тоже сюда выложи.
(я не могу запускать, потому что винда блин семёрка)



Прикрепленные файлы
Прикрепленный файл  levl1.rar ( 46.42 килобайт ) Кол-во скачиваний: 277
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #16


Гость






У тебя какая версия Паскаля?
Потому что у меня на ТП-7 твои файлы читаются неверно, на экране фигня.
 К началу страницы 
+ Ответить 
сообщение
Сообщение #17


Новичок
*

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

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


Цитата(-TarasBer- @ 19.12.2011 17:47) *

У тебя какая версия Паскаля?
Потому что у меня на ТП-7 твои файлы читаются неверно, на экране фигня.

Free PAscal 2.4.4
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #18


Гуру
*****

Группа: Пользователи
Сообщений: 1 013
Пол: Мужской
Ада: Разработчик
Embarcadero Delphi: Сторонник
Free Pascal: Разработчик

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


justix, скажи, ты когда что-то выкладываешь, ты вообще задумываешься, ответят тебе, или нет? Тебе это важно? Судя по содержимому архива - не очень: ты в первом посте привел код, для которого надо по меньшей мере в ТРИ РАЗА больше картинок, чем есть у тебя в проекте!!! В чем смысл? Выложить EXE-шник, и думать, что кто-то его будет запускать? Толку от этого - ноль, нужно видеть код, чтоб сказать, в чем проблема.

Либо выкладывай ИСХОДНИК (со всеми необходимыми файлами для успешной компиляции и запуска), либо до свидания...

P.S. для того, чтобы при использовании FPC модуль CRT отслеживал нажатие клавиш, фокус ввода должен быть на консольном окне, а не на графическом. Или надо использовать WinGraph + WinCRT.

Сообщение отредактировано: IUnknown -
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #19


Новичок
*

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

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


Цитата(IUnknown @ 20.12.2011 10:37) *

justix, скажи, ты когда что-то выкладываешь, ты вообще задумываешься, ответят тебе, или нет? Тебе это важно? Судя по содержимому архива - не очень: ты в первом посте привел код, для которого надо по меньшей мере в ТРИ РАЗА больше картинок, чем есть у тебя в проекте!!! В чем смысл? Выложить EXE-шник, и думать, что кто-то его будет запускать? Толку от этого - ноль, нужно видеть код, чтоб сказать, в чем проблема.

Либо выкладывай ИСХОДНИК (со всеми необходимыми файлами для успешной компиляции и запуска), либо до свидания...

P.S. для того, чтобы при использовании FPC модуль CRT отслеживал нажатие клавиш, фокус ввода должен быть на консольном окне, а не на графическом. Или надо использовать WinGraph + WinCRT.

да у меня в архиве всё как бе есть....
А как сделать чтоб на консольном был?
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #20


Гуру
*****

Группа: Пользователи
Сообщений: 1 013
Пол: Мужской
Ада: Разработчик
Embarcadero Delphi: Сторонник
Free Pascal: Разработчик

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


Цитата
да у меня в архиве всё как бе есть....
"Как бэ" - это к окулисту. Вот содержимое твоего архива:
Где все выделенные файлы? Где исходник? Отсутствуют.
Прикрепленное изображение
Цитата
А как сделать чтоб на консольном был?
На панели задач выбрать окно FPC, а не "Graph Window Application", тогда фокус будет на консольном окне, и кнопки будут читаться (для запуска пришлось закомментировать в коде все, что касается отсутствующих картинок)

Прикрепленное изображение

Но лучше все-таки сделать свое приложение графическим (вообще не имеющим консольного окна) и работать с ним через WinGraph/WinCRT...
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

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

 





- Текстовая версия 4.12.2022 1:01
500Gb HDD, 6Gb RAM, 2 Cores, 7 EUR в месяц — такие хостинги правда бывают
Связь с администрацией: bu_gen в домене octagram.name