Код
{Tanki, by Dean Cane Kenoby}
program Tanki;
uses graph,crt;
var
gd,gm,x,y,i,k,j,x1,y1,x2,y2,x3,y3,k1,li1,li2,w,w1:integer;
s1,s2: string;
t,z: text;
procedure F1; {Процедура подключения файлов для ведения счета}
begin
clrscr;
assign(t,'C:t22.txt');
rewrite(t); close(t);
append(t);
writeln(t,li1);
close(t);
clrscr;
assign(z,'C:t33.txt');
rewrite(z); close(z);
append(z);
writeln(z,li2);
close(z);
end;
procedure str; {Процедура преобразования счета в строковый формат}
begin
reset(t);
readln(t,s1);
close(t);
reset(z);
readln(z,s2);
close(z);
end;
procedure kvadrat; {Процедура построения первого танка}
begin
setcolor(4);
setfillstyle(11,4);
bar(x,y,x+30,y+30);
setcolor(22);
line(x+15,y+15,x+x1,y+y1); {Пушка}
circle(x+15,y+15,5);
end;
procedure kvadrat2; {Процедура построения второго танка}
begin
setcolor(1);
setfillstyle(7,4);
bar(x2,y2,x2-30,y2-30);
setcolor(12);
line(x2-15,y2-15,x2-x3,y2-y3); {Пушка}
circle(x2-15,y2-15,5);
end;
procedure exp2; {Процедура взрыва и восстановления второго танка}
begin
circle(x2-15,y2-15,5); delay(5000);
circle(x2-15,y2-15,10);delay(5000);
circle(x2-15,y2-15,15);delay(5000);
circle(x2-15,y2-15,20);delay(5000);
x2:=getmaxx; y2:=getmaxy;
li1:=li1+1;
circle(x2-15,y2-15,20);delay(5000);
circle(x2-15,y2-15,15);delay(5000);
circle(x2-15,y2-15,10);delay(5000);
circle(x2-15,y2-15,5); delay(5000);
end;
procedure exp; {Процедура взрыва и восстановления первого танка}
begin
circle(x+15,y+15,5); delay(5000);
circle(x+15,y+15,10);delay(5000);
circle(x+15,y+15,15);delay(5000);
circle(x+15,y+15,20);delay(5000);
x:=1; y:=1;
li2:=li2+1;
circle(x+15,y+15,20);delay(5000);
circle(x+15,y+15,15);delay(5000);
circle(x+15,y+15,10);delay(5000);
circle(x+15,y+15,5); delay(5000);
end;
procedure shot; {Выстрел первого танка, если на траэкт. пули есть 2 танк происходит взрыв(exp2)}
begin
if w=2 then
begin
for i:=y+y1+15 to getmaxy do
begin
putpixel(x+15,i,13); delay(100);
putpixel(x+15,i-1,0); delay(100);
if (i=y2-15) and (x+15=x2-15) then exp2;
end;
end;
if w=8 then
begin
for i:=y-15 downto 0 do
begin
putpixel(x+15,i,13); delay(100);
putpixel(x+15,i+1,0); delay(100);
if (i=y2-15) and (x+15=x2-15) then exp2;
end;
end;
if w=4 then
begin
for i:=x-15 downto 0 do
begin
putpixel(i,y+15,13); delay(100);
putpixel(i+1,y+15,0); delay(100);
if (i=x2-15) and (y+15=y2-15) then exp2;
end;
end;
if w=6 then
begin
for i:=x+x1+15 to getmaxx do
begin
putpixel(i,y+15,13); delay(100);
putpixel(i-1,y+15,0); delay(100);
if (i=x2-15) and (y+15=y2-15) then exp2;
end;
end;
end;
procedure shot2; {Выстрел второго танка, если на траэкт. пули есть 1 танк происходит взрыв(exp)}
begin
if w1=2 then
begin
for i:=y2-y3 to getmaxy do
begin
putpixel(x2-15,i,11); delay(100);
putpixel(x2-15,i-1,0); delay(100);
if (i=y+15) and (x2-15=x+15) then exp;
end;
end;
if w1=8 then
begin
for i:=y2-35 downto 0 do
begin
putpixel(x2-15,i,11); delay(100);
putpixel(x2-15,i+1,0); delay(100);
if (i=y+15) and (x2-15=x+15) then exp;
end;
end;
if w1=4 then
begin
for i:=x2-35 downto 0 do
begin
putpixel(i,y2-15,11); delay(100);
putpixel(i+1,y2-15,0); delay(100);
if (i=x+15) and (y2-15=y+15) then exp;
end;
end;
if w1=6 then
begin
for i:=x2-x3 to getmaxx do
begin
putpixel(i,y2-15,11); delay(100);
putpixel(i-1,y2-15,0); delay(100);
if (i=x+15) and (y2-15=y+15) then exp;
end;
end;
end;
procedure move; {Процедура отвечающая за движения и выстрел обоих танков}
begin
k:=ord(readkey);
case k of
115: begin y:=y+32; x1:=15; y1:=35; w:=2 end; {2}
119: begin y:=y-32; x1:=15; y1:=-5; w:=8 end; {8}
97: begin x:=x-32; x1:=-5; y1:=15; w:=4 end; {4}
100: begin x:=x+32; x1:=35; y1:=15; w:=6 end; {6}
50: begin y2:=y2+32; x3:=15; y3:=-5; w1:=2 end; {2}
56: begin y2:=y2-32; x3:=15; y3:=35; w1:=8 end; {8}
52: begin x2:=x2-32; x3:=35; y3:=15; w1:=4 end; {4}
54: begin x2:=x2+32; x3:=-5; y3:=15; w1:=6 end; {6}
32: shot;
48: shot2;
else j:=1;
end;
end;
procedure ramka; {Процедура разгранения поля по клеткам и таблица очков}
begin
cleardevice;
setfillstyle(1,2);
bar(getmaxx-158,0,getmaxx,32);
setcolor(14);
moveto(getmaxx-150,8);
outtext('Player 1');
moveto(getmaxx-60,8);
outtext(s1);
setcolor(4);
moveto(getmaxx-150,20);
outtext('Player 2');
moveto(getmaxx-60,20);
outtext(s2);
setcolor(2);
line(0,0,getmaxx,0);
line(0,0,0,getmaxy);
line(0,getmaxy,getmaxx,getmaxy);
line(getmaxx,0,getmaxx,getmaxy);
for i:=0 to round(getmaxx/32) do line(i*32,0,i*32,getmaxy);
for i:=0 to round(getmaxy/32) do line(0,i*32,getmaxx,i*32);
end;
begin {Начало программы}
gd:=detect;
initgraph(gd,gm,'c:\tp7\unit');
setbkcolor(0);
textcolor(0);
x:=1; y:=1; {Задание начальных координат и значений}
x1:=35; y1:=15;
x2:=getmaxx; y2:=getmaxy;
x3:=35; y3:=15;
li1:=0; li2:=0;
repeat {Основной цикл игры}
clrscr;
cleardevice;
f1; str;
ramka;
kvadrat;
kvadrat2;
move;
until j=1; {Выход из программы}
readln;
end. {Конец программы}
program Tanki;
uses graph,crt;
var
gd,gm,x,y,i,k,j,x1,y1,x2,y2,x3,y3,k1,li1,li2,w,w1:integer;
s1,s2: string;
t,z: text;
procedure F1; {Процедура подключения файлов для ведения счета}
begin
clrscr;
assign(t,'C:t22.txt');
rewrite(t); close(t);
append(t);
writeln(t,li1);
close(t);
clrscr;
assign(z,'C:t33.txt');
rewrite(z); close(z);
append(z);
writeln(z,li2);
close(z);
end;
procedure str; {Процедура преобразования счета в строковый формат}
begin
reset(t);
readln(t,s1);
close(t);
reset(z);
readln(z,s2);
close(z);
end;
procedure kvadrat; {Процедура построения первого танка}
begin
setcolor(4);
setfillstyle(11,4);
bar(x,y,x+30,y+30);
setcolor(22);
line(x+15,y+15,x+x1,y+y1); {Пушка}
circle(x+15,y+15,5);
end;
procedure kvadrat2; {Процедура построения второго танка}
begin
setcolor(1);
setfillstyle(7,4);
bar(x2,y2,x2-30,y2-30);
setcolor(12);
line(x2-15,y2-15,x2-x3,y2-y3); {Пушка}
circle(x2-15,y2-15,5);
end;
procedure exp2; {Процедура взрыва и восстановления второго танка}
begin
circle(x2-15,y2-15,5); delay(5000);
circle(x2-15,y2-15,10);delay(5000);
circle(x2-15,y2-15,15);delay(5000);
circle(x2-15,y2-15,20);delay(5000);
x2:=getmaxx; y2:=getmaxy;
li1:=li1+1;
circle(x2-15,y2-15,20);delay(5000);
circle(x2-15,y2-15,15);delay(5000);
circle(x2-15,y2-15,10);delay(5000);
circle(x2-15,y2-15,5); delay(5000);
end;
procedure exp; {Процедура взрыва и восстановления первого танка}
begin
circle(x+15,y+15,5); delay(5000);
circle(x+15,y+15,10);delay(5000);
circle(x+15,y+15,15);delay(5000);
circle(x+15,y+15,20);delay(5000);
x:=1; y:=1;
li2:=li2+1;
circle(x+15,y+15,20);delay(5000);
circle(x+15,y+15,15);delay(5000);
circle(x+15,y+15,10);delay(5000);
circle(x+15,y+15,5); delay(5000);
end;
procedure shot; {Выстрел первого танка, если на траэкт. пули есть 2 танк происходит взрыв(exp2)}
begin
if w=2 then
begin
for i:=y+y1+15 to getmaxy do
begin
putpixel(x+15,i,13); delay(100);
putpixel(x+15,i-1,0); delay(100);
if (i=y2-15) and (x+15=x2-15) then exp2;
end;
end;
if w=8 then
begin
for i:=y-15 downto 0 do
begin
putpixel(x+15,i,13); delay(100);
putpixel(x+15,i+1,0); delay(100);
if (i=y2-15) and (x+15=x2-15) then exp2;
end;
end;
if w=4 then
begin
for i:=x-15 downto 0 do
begin
putpixel(i,y+15,13); delay(100);
putpixel(i+1,y+15,0); delay(100);
if (i=x2-15) and (y+15=y2-15) then exp2;
end;
end;
if w=6 then
begin
for i:=x+x1+15 to getmaxx do
begin
putpixel(i,y+15,13); delay(100);
putpixel(i-1,y+15,0); delay(100);
if (i=x2-15) and (y+15=y2-15) then exp2;
end;
end;
end;
procedure shot2; {Выстрел второго танка, если на траэкт. пули есть 1 танк происходит взрыв(exp)}
begin
if w1=2 then
begin
for i:=y2-y3 to getmaxy do
begin
putpixel(x2-15,i,11); delay(100);
putpixel(x2-15,i-1,0); delay(100);
if (i=y+15) and (x2-15=x+15) then exp;
end;
end;
if w1=8 then
begin
for i:=y2-35 downto 0 do
begin
putpixel(x2-15,i,11); delay(100);
putpixel(x2-15,i+1,0); delay(100);
if (i=y+15) and (x2-15=x+15) then exp;
end;
end;
if w1=4 then
begin
for i:=x2-35 downto 0 do
begin
putpixel(i,y2-15,11); delay(100);
putpixel(i+1,y2-15,0); delay(100);
if (i=x+15) and (y2-15=y+15) then exp;
end;
end;
if w1=6 then
begin
for i:=x2-x3 to getmaxx do
begin
putpixel(i,y2-15,11); delay(100);
putpixel(i-1,y2-15,0); delay(100);
if (i=x+15) and (y2-15=y+15) then exp;
end;
end;
end;
procedure move; {Процедура отвечающая за движения и выстрел обоих танков}
begin
k:=ord(readkey);
case k of
115: begin y:=y+32; x1:=15; y1:=35; w:=2 end; {2}
119: begin y:=y-32; x1:=15; y1:=-5; w:=8 end; {8}
97: begin x:=x-32; x1:=-5; y1:=15; w:=4 end; {4}
100: begin x:=x+32; x1:=35; y1:=15; w:=6 end; {6}
50: begin y2:=y2+32; x3:=15; y3:=-5; w1:=2 end; {2}
56: begin y2:=y2-32; x3:=15; y3:=35; w1:=8 end; {8}
52: begin x2:=x2-32; x3:=35; y3:=15; w1:=4 end; {4}
54: begin x2:=x2+32; x3:=-5; y3:=15; w1:=6 end; {6}
32: shot;
48: shot2;
else j:=1;
end;
end;
procedure ramka; {Процедура разгранения поля по клеткам и таблица очков}
begin
cleardevice;
setfillstyle(1,2);
bar(getmaxx-158,0,getmaxx,32);
setcolor(14);
moveto(getmaxx-150,8);
outtext('Player 1');
moveto(getmaxx-60,8);
outtext(s1);
setcolor(4);
moveto(getmaxx-150,20);
outtext('Player 2');
moveto(getmaxx-60,20);
outtext(s2);
setcolor(2);
line(0,0,getmaxx,0);
line(0,0,0,getmaxy);
line(0,getmaxy,getmaxx,getmaxy);
line(getmaxx,0,getmaxx,getmaxy);
for i:=0 to round(getmaxx/32) do line(i*32,0,i*32,getmaxy);
for i:=0 to round(getmaxy/32) do line(0,i*32,getmaxx,i*32);
end;
begin {Начало программы}
gd:=detect;
initgraph(gd,gm,'c:\tp7\unit');
setbkcolor(0);
textcolor(0);
x:=1; y:=1; {Задание начальных координат и значений}
x1:=35; y1:=15;
x2:=getmaxx; y2:=getmaxy;
x3:=35; y3:=15;
li1:=0; li2:=0;
repeat {Основной цикл игры}
clrscr;
cleardevice;
f1; str;
ramka;
kvadrat;
kvadrat2;
move;
until j=1; {Выход из программы}
readln;
end. {Конец программы}