Помощь - Поиск - Пользователи - Календарь
Полная версия: Pascal Graph, глюк с прямоугольником
Форум «Всё о Паскале» > Pascal, Object Pascal > Написание игр
zhenka
Проблема в том что после того как я несколько раз стреляю в разные стороны, у меня он не стреляет, заранее благодарю!





 program tanki;
uses crt, graph;
var gd, gm, ax, ay, bx, by, px, py, pux, puy: integer;
color: byte;
ch: char;
gun, vverx, vniz, vlevo, vpravo, doshel, doshelvniz, doshelvverx,
doshelvpravo, doshelvlevo: boolean;
begin
ax := 20;
ay := 20;
bx := 40;
by := 40;
clrscr;
gd := detect;
initgraph(gd, gm, ' ');
cleardevice;
setcolor(2);
rectangle(bx, by, ax, ay);
doshel:=true;
repeat
if keypressed then begin
ch := readkey;
if ch in ['s','w','a','d'] then
begin
setcolor(0);
rectangle(bx, by, ax, ay);
case ch of
's': begin ay := ay + 5;
by := by + 5;
vniz:=true;
vverx:=false;
vlevo:=false;
vpravo:=false;
end;
'w': begin ay := ay - 5;
by := by - 5;
vniz:=false;
vverx:=true;
vlevo:=false;
vpravo:=false;
end;
'a': begin ax := ax - 5;
bx := bx - 5;
vniz:=false;
vverx:=false;
vlevo:=true;
vpravo:=false;
end;
'd': begin ax := ax + 5;
bx := bx + 5;
vniz:=false;
vverx:=false;
vlevo:=false;
vpravo:=true;
end;
end;
end;
end;
setcolor(2);
rectangle(bx, by, ax, ay);
if ch=#32 then
begin
gun:=true;
end;
{ ---------------------------------------------------------------}
if (gun=true) and (doshel=true) and (vniz=true) then
begin
doshelvniz:=true;
py:=by+2;
puy:=ay+2;
px:=bx-2;
pux:=ax+2;
end;
if (gun=true) and (doshel=true) and (vverx=true) then
begin
doshelvverx:=true;
py:=by-2;
puy:=ay-2;
px:=bx-2;
pux:=ax+2;
end;
if (gun=true) and (doshel=true) and (vpravo=true) then
begin
doshelvpravo:=true;
py:=by-2;
puy:=ay+2;
px:=bx-2;
pux:=ax-2;
end;
if (gun=true) and (doshel=true) and (vlevo=true) then
begin
doshelvlevo:=true;
py:=by-2;
puy:=ay+2;
px:=bx-2;
pux:=ax-2;
end;


{-------------------------------------------------------------------------}
{-------------------------------------------------------------------------}
if doshelvverx=true then
begin
doshelvniz:=false;
doshelvpravo:=false;
doshelvlevo:=false;
setcolor(0);
rectangle(px, py, pux, puy);
setcolor(2);
doshel:=false;
py:=py-2;
puy:=puy-2;
rectangle(px, py, pux, puy)
end;
if doshelvniz=true then
begin
doshelvverx:=false;
doshelvpravo:=false;
doshelvlevo:=false;
setcolor(0);
rectangle(px, py, pux, puy);
setcolor(2);
doshel:=false;
py:=py+2;
puy:=puy+2;
rectangle(px, py, pux, puy)
end;
if doshelvpravo=true then
begin
doshelvverx:=false;
doshelvniz:=false;
doshelvlevo:=false;
setcolor(0);
rectangle(px, py, pux, puy);
setcolor(2);
doshel:=false;
px:=px+2;
pux:=pux+2;
rectangle(px, py, pux, puy)
end;
if doshelvlevo=true then
begin
doshelvverx:=false;
doshelvpravo:=false;
doshelvniz:=false;
setcolor(0);
rectangle(px, py, pux, puy);
setcolor(2);
doshel:=false;
px:=px-2;
pux:=pux-2;
rectangle(px, py, pux, puy)
end;

{--------------------------------------------------------------------------}
if (px=0) or (py=0) or (pux=0) or (puy=0) or (px=getmaxx) or
(pux=getmaxx) or (py=getmaxy) or (puy=getmaxy) then
begin
doshel:=true;
doshelvniz:=false;
doshelvverx:=false;
doshelvpravo:=false;
doshelvlevo:=false;
gun:=false;
setcolor(0);
rectangle(px, py, pux, puy);
setcolor(2);
end;

delay(1000);

until ch = #27
end.

zhenka
Нашел Нашел, у меня ведь движение пули идет по 2 пикселям, то есть правильней было бы


if ((px<=1) or (py<=1) or (pux<=1) or (puy<=1) or (px>=getmaxx-1) or
(pux>=getmaxx-1) or (py>=getmaxy-1) or (puy>=getmaxy-1)) and (gun=true)
then
Гость
А где программа написана? В каком паскале?
alex 10
Цитата(Гость @ 13.11.2014 19:26) *

А где программа написана? В каком паскале?

да да. Мне тоже интересно
alex 10
мне кажется программа написана в free pascal ninja.gif ninja.gif ninja.gif

Добавлено через 3 мин.
но точно не в паскаль абц 1.gif
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.