Помощь - Поиск - Пользователи - Календарь
Полная версия: ТАНКИ
Форум «Всё о Паскале» > Pascal, Object Pascal > Написание игр
Dean_Cane_Kenoby
Вот "отцовская" программа:

Код
{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.   {Конец программы}
Ivs
Что-то она у меня не пошла...............
Slam
У меня что-то тоже!!
Непорядок!
AlaRic
Танкист smile.gif не пашет игра!
Slam
Давай проси "отца", чтоб исправлял... ;)
deman
А что у вас не пашет? В каком смысле? Игра вообще не идёт?
Dean_Cane_Kenoby
Не понял в чем проблема??? у меня все в порядке!!!!

Я за неё зачет получил за год!!!
Alex
У меня кстати тоже!!
Alex
Только как то ограничений маловато и постоянное обновление экрана ухудшают дело!!
Good_Day
>>У меня не идёт.
А вы пробовали в InitGraph поменять папку где драва паскалевские для графики. Не, у меня так всё идёт.
Echelone
Цитата(AlaRic @ 27.03.03 16:31)
Танкист smile.gif не пашет игра!

У меня тоже не пашет - пишет ошибка формата файла Graph.tpu...
Цитирую:
File format error (Graph.tpu)

что делать?
Вроде новые апдейты graph скачал - никак.
volvo
Echelone
Чем пытаешься скомпилировать? TP70 прошла без проблем...
Guest
Цитата(volvo @ 6.01.05 19:05)
Echelone
Чем пытаешься скомпилировать? TP70 прошла без проблем...

Компилировал в TP 7.01 - нифига.
А еще с borland-овского сайта скачал "пропатченный" graph - нифига.
Altair
никаких проблемм быть не может...
используйте стандартный модуль для TP70.
укажите путь к граф. драйверу... и все.
Echelone
Цитата(Oleg_Z @ 6.01.05 23:07)
никаких проблемм быть не может...
используйте стандартный модуль для TP70.
укажите путь к граф. драйверу... и все.

Вроде скомпилировалась...работает...

Странно - новый модуль с borland-овского сайта и старый - байт в байт по размерам, а если сравнить по содержимому - разные...Наверное, в этом лаг...
Echelone
Спасибо за исходник.

А кто может дать инфу по искуственному интеллекту, ведь не делать же движение RANDOMом?

[quote]
ФИДОШ ИКИ - Е ПРОМЕ ЯЕМ БУКВУ " " А ПОГА ЫЙ ПРОБЕЛ!
Dark
Ну в оригинальных танках имнно рандомом =)))) пока не появится слева или справа куда повернуть - едем
SHnur
Мне не понравилось , что при нажатии любой кнопки не относыщийся к кнопкам управления , вылетает из игры .
А ещё то , что можно уехать за экран .
А так , ничего . smile.gif
Lan
чуваки если кто заглянет на эту тему ещё разок посмотрите мои танчики, они немножко переделаны.


Я выложил сюда, а то на народе внешние ссылки запрещенны.
Нажмите для просмотра прикрепленного файла
Altair
не, чего-то не то, управление идет одним танком а стреляет другой... или я не разобрался в упрвлени? где HELP ? smile.gif
Lan
Ща хэлп напортачу:
Зелёный танк управление стрелочками, стрелять на ноль на цыфроблоке,
Жёлтый танк управление на AWDS, стрелять на пробел.

Исходники я потерял, у меня комп ломался, а вшивый мастер всё утёр.
Там на сайте есть ещё Invaders, посмотри. Сделана на VGA драве без буфера ---> фиговая перересовка. Исходники тоже потерял, но щас тружусь над новой версие этой проги, на 320*200*256.

Я кстате ссылку на своём саёте на ваш поставил. В ближайшее время собераюсь обновить (Сайт не очень выглядит) sad.gif
Altair
Да, Invaders, я тоже посомтрел - ничего.... (не понравилось только то, что можно неболее одного снаряда посылать по тарелкам)
Кстати исходники если хочешь ты можешь размещать прямо на сайте pascal.net.ru (а уебя делать только ссылку) - у нас мощный сервер (по сравнению с народом-то ;)) и ссылка получается доступной отовсюду...
Просто скидывай мне их на почту Oleg_Z@pascal.net.ru
С указанием авторства, и с описанием (кратким)...
Lan
Ура!!! Я обновил сайт. Sanchous-game. Скоро им займусь вплотную. Кто хочет посмотрите.
Oleg_Z если я ещё чтонить сбацаю на Турбе, можно вместе с исходникими и выполнимый файл присылать, и чтоб он такой на вашем сайте висел?
Altair
Да, конечно!
В архив помещаешь исходники, EXE, ну мальнький README.txt, в которой краткочто это вообще такое, и соответсвенно не забудь имя автора, чтобы написать на сайте... ;)
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.