Здравствуйте, уважаемые форумчане.
Пишу от нечего делать игрушку на Borland Pascal'e 7.0, смысл которой - убегание персонажем (о) от злого бота (х).
Управление:
стрелочки - изменение координат персонажа "о"
кнопка End - выход из "игры"
Перед выходом маленькая задержка (хотя, у кого как - с нынешними процессорами задержка у всех разная)
Однако бот оказался на столько злой, что, почему-то, делает два шага вместо одного.
Собственно, вот код:
Спойлер (Показать/Скрыть)
Код
uses crt;
var x,y,bx,by,dead,rand,score: integer;
{x - координата персонажа по горизонтали
y - координата персонажа по вертикали
bx - координата бота по горизонтали
by - координата бота по вертикали
dead - переменная, хранящее в себе значения от 0 до 2 в зависимости от того, не умерли ли вы, выходите из игры или проиграли
rand - рандомное значение от 0 до 1 для того, чтобы бот выбрал себе то, куда ему пойти, если расстояние до вас по x и y одинаковы
score - счёт}
msg: string; {сообщение при выходе из игры}
C:string[2]; {не знаю, как это работает, но оно определяет то, какую кнопку нажал игрок}
procedure movie;
begin {перемещение персонажа 'o' во все 4 стороны}
C:=ReadKey;
if C=#77 then begin
x:=x+1;
clrscr;
gotoxy(x,y);
write('o');
end;
if C=#75 then begin
x:=x-1;
clrscr;
gotoxy(x,y);
write('o');
end;
if C=#80 then begin
y:=y+1;
clrscr;
gotoxy(x,y);
write('o');
end;
if C=#72 then begin
y:=y-1;
clrscr;
gotoxy(x,y);
write('o');
end;
if C=#79 then begin {выход по нажатию End}
dead:=1;
end;
end;
procedure botx; {перемещение бота по x}
begin
if x>bx then bx:=bx+1 else
if x<bx then bx:=bx-1;
end;
procedure boty; {перемещение бота по y}
begin
if y>by then by:=by+1 else
if y<by then by:=by-1;
end;
procedure bot; {главная функция, отвечающая за бота(ИИ)}
begin
if ABS(x-bx) > ABS(y-by) then botx else
if ABS(x-bx) < ABS(y-by) then boty else
if ABS(x-bx) = ABS(y-by) then
begin
rand:=random(2);
if rand>0 then botx else boty;
end;
gotoxy(bx,by);
write('x');
end;
procedure deadline; {если бот скушает игрока, то мы умерли ((c) Captain Obvious) }
begin
if ((bx=x) and (by=y)) then dead:=2;
end;
begin
x:= 40; y:= 15; bx:=1; by:=15; dead:=0; {начальные значения координат персонажа, бота, а также переменная, отвечающая за "живы ли мы"}
clrscr;
gotoxy(x,y); write('o'); {отрисовка персонажа}
gotoxy(bx,by); write('x'); {отрисовка бота}
while dead=0 do begin
movie; {перемещения персонажа}
bot; {перемещения бота}
score:=score+1;
gotoxy(1,1);
write(score);
deadline; {мы живы?}
end;
clrscr;
gotoxy(1,1);
write(score);
gotoxy(35,14);
if dead=1 then msg:='Good Bye!' {при выходе}
else if dead=2 then msg:='You are DEAD!'; {при смерти}
write(msg);
delay(1000);
end.
Уже и так, и сяк пробовал исправить проблему - никак.
Можете натолкнуть на идею?
Исходник с кодом, написанным выше, прикреплён к сообщению.
Сообщение отредактировано: SaheR - 21.04.2013 20:29