Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 13.07.2010, 08:38   #11
sir.andrey
Форумчанин
 
Регистрация: 06.12.2009
Сообщений: 380
Вопрос

Цитата:
Сообщение от Stilet Посмотреть сообщение
объектную модель.
Тогда как перевести на обьектную модель?
sir.andrey вне форума Ответить с цитированием
Старый 13.07.2010, 09:11   #12
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
sir.andrey
не так уж и сложно. Ты знаешь что такое ООП, как с объектами работать?
Я конечно не говорю тебе обязательно ООП занятся, но на твоем месте я бы в любом случае переписал программу с нуля, и желательно ядро ее вынес в отдельный модуль.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 13.07.2010, 09:33   #13
Korben5E
Форумчанин
 
Аватар для Korben5E
 
Регистрация: 13.07.2010
Сообщений: 346
По умолчанию

эх танкист для начала упрости код программы - проще будет думать
например так

Код:
direction : integer;

function ChekPos(X,Y): boolean;
begin
{проверка координат в нужном регионе}
Result := (X > 150) and (X < 470) and (Y > 60) and (Y < 380 );
end

newPosX := oldPosX;
newPosY :=  oldPosY;


Case key2 of
                #72:Begin           {strelka vverh              }
                    newPosY := newPosY - 1;
                    direction := 1
                    End;
                #75:Begin           {strelka vlevo              }
                    newPosX := newPosX - 1;
                    direction := 2
                    End;
                #77:begin           {strelka vpravo             }
                    newPosX := newPosX + 1;
                    direction := 3
                    End;
                #80:Begin           {strelka vniz               }
                    newPosY := newPosY - 1;
                    direction := 4
{ для стрелок по диагонали тоже самое только с 2мя координатами сразу :) 
также вместо 1 - можно поставить переменную и ты сможешь программно изменять скорость танка
т.е. можешь уже добавлять на карту бонусы :)
}
                end;


if CheckPos(newPosX,newPosY) then
    begin
        ZakraskaTanka(oldPosX,oldPosY);
        oldPosX := newPosX;
        oldPosY := newPosY;
{ при желании функцию рисования танка тоже можно оптимизировать и следующий код убрать }
        case direction of
          1 : TANKvverh(newPosX,newPosY);
          2 : TANKvlevo(newPosX,newPosY);
          3 : TANKvpravo(newPosX,newPosY);
          4 : TANKvniz(newPosX,newPosY);
        end;

end;
From Stilet: Так, танкисты. Код сержант оформлять будет? Или вас заставить гусеницы велонасосом накачивать?
первый раз тут пишу - извиняюсь
Non est culpa vin, sed culpa bibentis

Последний раз редактировалось Korben5E; 13.07.2010 в 09:46.
Korben5E вне форума Ответить с цитированием
Старый 13.07.2010, 14:03   #14
sir.andrey
Форумчанин
 
Регистрация: 06.12.2009
Сообщений: 380
Печаль

Цитата:
Сообщение от Korben5E Посмотреть сообщение
эх танкист для начала упрости код программы - проще будет думать
С верхней частью программы у меня проблем нет...
Короче придется самому как нибудь...
sir.andrey вне форума Ответить с цитированием
Старый 13.07.2010, 15:46   #15
sir.andrey
Форумчанин
 
Регистрация: 06.12.2009
Сообщений: 380
Плохо

К сожалению самому ваще никак...
Все еще надеюсь на ваши умные отзывы помощи.
В коде я оставил только прорисовку танка и выстрел вниз:
Код:
Procedure TANKvniz (x,y,cvet:integer);       {tank edet vniz}
 begin
 SetFillStyle(1,cvet); Bar(160+x,70+y,214+x,114+y); Bar(160+x,70+y,174+x,124+y);
 Bar(200+x,70+y,214+x,124+y); SetFillStyle(1,4); Bar(175+x,85+y,200+x,95+y);
 Bar(185+x,95+y,190+x,124+y);
 end;

Procedure TANKvverh (x,y,cvet:integer);      {tank edet vverh}
 begin
 SetFillStyle(1,cvet); Bar(160+x,80+y,214+x,124+y); Bar(160+x,70+y,175+x,124+y);
 Bar(200+x,70+y,214+x,124+y); SetFillStyle(1,4); Bar(200+x,110+y,175+x,100+y);
 Bar(185+x,100+y,189+x,70+y);
 end;

Procedure TANKvpravo (x,y,cvet:integer);     {tank edet vpravo}
 begin
 SetFillStyle(1,cvet); Bar(160+x,70+y,200+x,124+y); Bar(160+x,70+y,214+x,84+y);
 Bar(160+x,124+y,214+x,110+y); SetFillStyle(1,4); Bar(175+x,85+y,185+x,110+y);
 Bar(185+x,100+y,214+x,95+y);
 end;

Procedure TANKvlevo (x,y,cvet:integer);      {tank edet vlevo}
 begin
 SetFillStyle(1,cvet); Bar(214+x,124+y,174+x,70+y); Bar(214+x,124+y,160+x,110+y);
 Bar(214+x,70+y,160+x,84+y); SetFillStyle(1,4); Bar(199+x,109+y,190+x,85+y);
 Bar(190+x,95+y,160+x,100+y);
 end;

Procedure ZakraskaTanka (x,y:integer);
 begin
 SetFillStyle(1,0);                {zakraska chernim cvetom         }
 Bar(160+x,70+y,214+x,124+y);      {storona kyba 54                 }
 end;

Procedure SNARADvniz (stopX,stopY,k:integer; var block:integer);
 begin
 SetColor(4); Circle(188+stopX,124+stopY+k,3);
 SetColor(0); Circle(188+stopX,124+stopY+k-3,3);
 block:=stopY+k;
 end;
SetColor (yellow);                 {cvet izobrajeniya "YELLOW"      }
Rectangle (150,60,470,380);        {kyb - storona 320               }
RANDOMIZE;                         {inicializaciya generatora
                                                  slychaynih chisel }
fire1:=false;
x:=0; y:=0; x1:=245; y1:=245;
cvet:=2;                                {vash tank zeleniy          }
TANKvniz(x,y,cvet);                     {vash tank                  }
cvet:=1;                                {vrag golyboy               }
TANKvverh(x1,y1,cvet);                  {vrajeskiy tank             }
fire:=false; fire1:=false;              {ogon ne otkrivat           }
REPEAT
if keypressed then
 Begin
 cvet:=2;
 key:=readkey;
 If key=#0 Then Begin               {esli klavisha rashirennaya }
                key2:=readkey;
                Case key2 of
                #72:Begin           {strelka vverh              }
                    if (y>-9) then
                    begin
                    ZakraskaTanka(x,y);
                    y:=y-1;
                    TANKvverh(x,y,cvet);
                    end;
                    End;
                #75:Begin           {strelka vlevo              }
                    if (x>-9) then
                    begin
                    ZakraskaTanka(x,y);
                    x:=x-1;
                    TANKvlevo(x,y,cvet);
                    end;
                    End;
                #77:begin           {strelka vpravo             }
                    if (x<255) then
                    begin
                    ZakraskaTanka(x,y);
                    x:=x+1;
                    TANKvpravo(x,y,cvet);
                    end;
                    End;
                #80:Begin           {strelka vniz               }
                    if (y<255) then
                    begin
                    ZakraskaTanka(x,y);
                    y:=y+1;
                    TANKvniz(x,y,cvet);
                    end;
                    End;
                end;
                End;
 End;
sir.andrey вне форума Ответить с цитированием
Старый 13.07.2010, 15:52   #16
sir.andrey
Форумчанин
 
Регистрация: 06.12.2009
Сообщений: 380
Вопрос

Причем красная процедура точно правильная!!!
Код:
RasstX:=x1-x; RasstY:=y1-y;         { rasstoyanie mejdy koordinatami tankov }
Variant:=RANDOM(4)+1;
if (Variant<>3) and (Variant<>4) and
(Variant<>4) and (Variant<>5) then begin
cvet:=1;
IF (x1>x) AND (y1>y) THEN
 BEGIN {*1}
  If Variant=1 Then Begin
                    ZakraskaTanka(x1,y1);
                    x1:=x1-1;
                    TANKvlevo(x1,y1,cvet);
                    
                    End;
  If Variant=2 Then Begin
                    ZakraskaTanka(x1,y1);
                    y1:=y1-1;
                    TANKvverh(x1,y1,cvet);
                  
                    End;
 END {*1}
                     ELSE
 BEGIN {*2}
  If (x1<x) and (y1<y) Then
   Begin {*3}
    If Variant=1 Then Begin
                      ZakraskaTanka(x1,y1);
                      x1:=x1+1;
                      TANKvpravo(x1,y1,cvet);

                      End;
    If Variant=2 Then Begin
                      ZakraskaTanka(x1,y1);
                      y1:=y1+1;
                      TANKvniz(x1,y1,cvet);
                      if ((RasstX<=20) and (RasstX>-20))
                      and (fire=false) then begin
                                            fire1:=true;
                                            stopX:=x1;
                                            stopY:=y1;
                                            Storona:=4;
                                            end;
                      End;
   End {*3}
                       Else
   Begin {*4}
    if (x1>x) and (y1<y) then
     begin {*5}
      if Variant=1 then begin
                        ZakraskaTanka(x1,y1);
                        x1:=x1-1;
                        TANKvlevo(x1,y1,cvet);
                     
                        end;
      if Variant=2 then begin
                        ZakraskaTanka(x1,y1);
                        y1:=y1+1;
                        TANKvniz(x1,y1,cvet);
                       
                        end;
     end {*5}
                         else
     begin {*6}
      if (x1<x) and (y1>y) then
       begin {*7}
        if Variant=1 then begin
                          ZakraskaTanka(x1,y1);
                          x1:=x1+1;
                          TANKvpravo(x1,y1,cvet);
                     
                          end;
        if Variant=2 then begin
                          ZakraskaTanka(x1,y1);
                          y1:=y1-1;
                          TANKvverh(x1,y1,cvet);
                        
                          end;
       end {*7}
                           else
       begin {*8}                     { vrag idet po odnoy traektorii }
        if (x1>x) and (y=y1) then
         begin
         ZakraskaTanka(x1,y1);
         x1:=x1-1;
         TANKvlevo(x1,y1,cvet);
    
         end;
        if (x>x1) and (y=y1) then
         begin
         ZakraskaTanka(x1,y1);
         x1:=x1+1;
         TANKvpravo(x1,y1,cvet);
      
         end;
        if (y1>y) and (x=x1) then
         begin
         ZakraskaTanka(x1,y1);
         y1:=y1-1;
         TANKvverh(x1,y1,cvet);
        
         end;
        if (y1<y) and (x=x1) then
         begin
         ZakraskaTanka(x1,y1);
         y1:=y1+1;
         TANKvniz(x1,y1,cvet);
     
         end;
       end; {*8}
     end; {*6}
   End; {*4}
 END; {*2}
                   end;
If fire1=true Then Begin
                   k:=k+3;
                   if Storona=4 then begin
                                     SNARADvniz(stopX,stopY,k,block);
                                     {If (stopX>(x-32)) and (stopX<(30+x)) Then
                                     Begin
                                     if (block<y+56) and (block>(y-56)) then
                                     begin
                                     exit;
                                     end;
                                     End;}
                                     if block>265 then begin
                                                       SetColor(0); Circle(188+stopX,124+stopY+k,3);
                                                       fire1:=false;
                                                       k:=0;
                                                       end;
                                     end;
                   End;


delay(20);
UNTIL key=#27;
CloseGraph;
End.
Я все остальные выстрелы удалил, т.е. остался только выстрел вниз
при координатах врага меньше чем мего танка!!!

Может вы мне обьясните почему во время движения снаряд сдвигается???
Хотя те переменные stopX и stopY остаются неизменными!!!
Т.е. снаряд должен двигаться только прямо вниз!!!:confuse d:

Я уже не знаю, может паскаль кривой?

Последний раз редактировалось sir.andrey; 13.07.2010 в 16:00.
sir.andrey вне форума Ответить с цитированием
Старый 13.07.2010, 16:47   #17
Korben5E
Форумчанин
 
Аватар для Korben5E
 
Регистрация: 13.07.2010
Сообщений: 346
По умолчанию

если-бы не тратил время на обдумывание проблемы, а на удаление половины своего кода - который кстати мешает тебе думать - было-бы проще

снаряд - объект, обладающий собственными координатами
10 снарядов - 10 объектов и у каждого свои координаты и координаты изменяются в разные стороны.

как только сократишь свой код в 2 раза - будем заниматься стрельбой
иначе у тебя код вырастет еще раз в 20...
Non est culpa vin, sed culpa bibentis
Korben5E вне форума Ответить с цитированием
Старый 14.07.2010, 10:35   #18
sir.andrey
Форумчанин
 
Регистрация: 06.12.2009
Сообщений: 380
Радость

Цитата:
Сообщение от Korben5E Посмотреть сообщение

как только сократишь свой код в 2 раза - будем заниматься стрельбой
иначе у тебя код вырастет еще раз в 20...
А какой смысл сокращать код?
Я только так могу.
sir.andrey вне форума Ответить с цитированием
Старый 14.07.2010, 10:53   #19
Korben5E
Форумчанин
 
Аватар для Korben5E
 
Регистрация: 13.07.2010
Сообщений: 346
По умолчанию

Цитата:
Сообщение от sir.andrey Посмотреть сообщение
А какой смысл сокращать код?
Я только так могу.
мое дело предложить - твое тра....ся
я кстати твой код переработал и написал - достаточно было внимательное его посмотреть


а теперь по существу игры:

1. определить максимальное количество снарядов допустимых в игре
2. создать структуру и массив структур для снарядов
3. в цикле перебирать все снаряды и обрабатывать перемещение/попадание/уничтожение
4. по чем стреляем-то??? - создать массив объектов по которым стреляем
5. написать функцию которая будет определять куда ты попал - или ты решил пикселем в пиксель попадать???
6. исходя из пункта 5 - определить откуда должен вылетать снаряд и кому он пренадлежит
7. задаться вопросом как будет играть 2й игрок(тебе-же мультиплеер интереснее )

ну и
8. изменить функцию отрисовки с помощью GetImage, PutImage



вроде ничего не забыл.
Non est culpa vin, sed culpa bibentis
Korben5E вне форума Ответить с цитированием
Старый 14.07.2010, 12:28   #20
sir.andrey
Форумчанин
 
Регистрация: 06.12.2009
Сообщений: 380
Плохо

Вы на своем паскале проверьте мою игру и посмотрите, бедет ли у вас смещаться снаряд летящий вниз.
sir.andrey вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
графическая игрушка alex(21) Паскаль, Turbo Pascal, PascalABC.NET 19 04.05.2012 22:54
Игрушка Nester Gamedev - cоздание игр: Unity, OpenGL, DirectX 4 15.01.2009 19:02
Игрушка Rusl92 Мультимедиа в Delphi 8 25.09.2008 12:11
игрушка в курсовике EDG_aka_Dima Помощь студентам 2 25.05.2007 06:13
Игрушка Rozalinda Gamedev - cоздание игр: Unity, OpenGL, DirectX 9 14.01.2007 22:00