столкновение со стенкой на уровне в виде клетки
как правильно проверять колизию например для такого случая
есть герой и уроыень в виде клеток type hero_type = record up,down,right,left,fire,death:boolean;// виртуальная клавиатура героя xs,ys:integer; end; var hero:array [1..6] of hero_type; num:integer //порядковый номер героя level:array[0..19,0..19] of string; XL,YL:integer; shag_setki:integer; ... begin num:=1; repeat уровень грузим из текстового файла в ресурсе 111 101 000 единица - это стенка for xl:=1 to 3 do for yl:=1 to 3 do begin lf level [xl,yl]>0 then выводим стеку в положение xl*shag_setki,yl_shag_setki end при нажатии клавиши вверх проверяем есть ли стенка по направлению движения героя num=1,если нету то даем добро на движение if level[hero[num].xs,hero[num].ys]<>1 then hero[num].up:=true; *** until false end. Паскаль ругается на ***: Как павильно зделать в данном случае контроль героя на столкновение со стенкой? |
Re: столкновение со стенкой на уровне в виде клетки
я както давно писал подобную фигню на Delphi
попробуй так: const maph=10;//высота карты mapw=10;//ширина карты var map:array[1..maph]of array[1..mapw]of boolean; px,py:integer//текущие координаты //карта. если true то можно стать, если false, то нельзя procedure draw; begin //рисуем героя в PX:PY end; procedure initmap var xx,yy:integer; begin for yy:=1 to maph do for xx:=1 to mapw do begin if map[xx,yy]=false then рисуем_стену; end; end; //процедуры движения procedure up; begin py:=py-1; if map[py][px]=true then //стать можно begin draw; end else py:=py+1;//стать нельзя , возвращаем координату наместо end; //аналогично для каждой команды |
Часовой пояс GMT +4, время: 17:01. |
vBulletin® Version 3.6.5.
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Перевод: zCarot