Суббота, 23 Ноября 2024, 03:18

Приветствую Вас Гость

[ Новые сообщения · Игроделы · Правила · Поиск ]
  • Страница 1 из 1
  • 1
Создание 1 игры (змейки) на PascalABC
CreatingOverДата: Четверг, 15 Августа 2013, 09:22 | Сообщение # 1
ColdGamedev
Сейчас нет на сайте
По скольку сам уже долго изучаю pascal и владею достаточными знаниями, хочу поделиться ими с вами. И так, начнем. Не знаю, много ли 118 строк кода для первого урока, но писать нам их придется. Не волнуйтесь, каждые 5-10 строчек я объяснять не буду, объясню лишь самое главное.
Код
Uses graphabc, events,timers;

И так, этот код хоть и короткий, но очень важный. Здесь мы подключаем графический модуль graphabc, ну и события и таймеры (попробуйте его удалить и посмотрите что получится). Едем дальше.
Код
const
r=5 ;
d=7;

type
TDirection = (None, Left, Right, Up, Down);

var x,t,y,i,z,xr,yr,prin1,prin2,prin3,prin4,prin5,k,s4et,prin6: integer;
    Direction :TDirection;
    xs,ys,bufx,bufy:array[1..200]of integer;

Этим кодом мы задаем необходимые переменные и типы перемещения ("Нет" - не нажата ни одна клавиша, стоим на одном месте. "Влево" - движение влево. "Вправо" - движение вправо. "Вверх" - движение вверх, и соответственно "Вниз " - движение вниз.)
С этим закончили. Теперь еще один код, который я объясню по нормальному, а дальше попрет уже основная часть (примерно 80-90 строк).
Код
   procedure shar3;
       begin
       SetBrushColor(clYellow);
       circle(xs[k],ys[k],r);
       end;

procedure Circl;
begin
    SetBrushColor(clBlack);
    circle(x,y,r);
end;

procedure rshar ;
        begin
        xr:=Random(WindowWidth) ;
        yr:=Random( WindowHeight);
        end;

procedure rshar2;
         begin
         SetBrushColor(clYellow);
        circle(xr,yr,r);
end;

Тут мы прорисовываем черный круг (меняйте на что угодно) - голова нашей змейки и желтый круг- тело, такой же круг будет прибавляться после пожирания "шарика". Цвет шарика указан после procedure rshar2, прибавляющегося шарика - shar3.
Приступаем к основному коду:
Код
procedure XP(Key:integer);
              begin
                     case Key of
                     VK_Left: Direction := Left ;
                     VK_Right:Direction := Right ;
                     VK_UP:  Direction := UP ;
                     VK_Down: Direction :=Down ;
                     end;
               circle(x,y,r);
               end;

             procedure pause;
                         begin
                    for i:=1 to 1 do
                    begin
                    Circl;
                    rshar2;
                    ClearWindow;
                    rshar2  ;
                    prin1:=(xr-x+r)*(xr-x+r)+(yr-y)*(yr-y)  ;
                    prin2:=(xr-x-r)*(xr-x-r)+(yr-y)*(yr-y)  ;
                    prin3:=(xr-x)*(xr-x)+(yr-y+r)*(yr-y+r)  ;
                    prin4:=(xr-x)*(xr-x)+(yr-y-r)*(yr-y-r)  ;
                    prin5:=R*R;
                    if (prin1)<=(prin5) then begin
                     rshar ;
                     s4et:=s4et+1;
                     end;

                     if (prin2)<=(prin5) then begin
                     rshar ;
                     s4et:=s4et+1;
                     end;
                     if (prin3)<=(prin5) then begin
                     rshar ;
                     s4et:=s4et+1;
                     end;
                     if (prin4)<=(prin5) then begin
                     rshar ;
                     s4et:=s4et+1;
                     end;

                      case Direction of
                      Left: begin   x:=x-d; if x<=0 then x:=WindowWidth  end;
                      Up:  begin    y:=y-d; if y<=0 then y:=WindowHeight  end;
                      Right: begin  x:=x+d; if x>=WindowWidth then x:=0  end;
                      Down: begin   y:=y+d; if y>=WindowHeight then y:=0  end;
                      end;
                    xs[1]:=x;
                    ys[1]:=y;
                    for k:=1 to s4et do
                    begin
                     bufx[k]:=xs[k];
                     bufy[k]:=ys[k];

                    end;
                    for k:=1 to s4et do
                    begin
                    xs[k+1]:=bufx[k];
                    ys[k+1]:=bufy[k] ;
                    end;
                    for k:=2 to s4et do
                    shar3;
                             Circl;
                       end;
                  end;
   begin
rshar;
s4et:=2;

   Direction := None;

   x:=WindowWidth div 2;
   y:=WindowHeight div 2;
    OnKeyDown:=XP;
    CreateTimer(150,pause);

end.

Это уже полностью конец кода. Здесь мы указали все самое основное: движение, поедание, повороты. На этом, я наверно, закончу наш с вами урок. Хотя и уроком это трудновато назвать. Просто много букаф (точнее кода, причем легкого), где мало точных пояснений. А вообще, лучше, поройтесь в коде сами. Я объяснил вам все самое необходимое. Поэкспериментируйте с цветами, переменными и клавишами. (Лично я так освоил pascal). Всем до свидания и до следующих уроков! smile


Я снова с вами:з
Возвращение легенды. (нет)


Сообщение отредактировал CreatingOver - Четверг, 15 Августа 2013, 09:27
DestroyДата: Четверг, 15 Августа 2013, 15:34 | Сообщение # 2
постоянный участник
Сейчас нет на сайте
еще полезней было бы кинуть исходник
LunarPixelДата: Четверг, 15 Августа 2013, 15:47 | Сообщение # 3
старожил
Сейчас нет на сайте
Во-первых, это не урок. А во-вторых, подозреваю, что код не твой. smile

CreatingOverДата: Четверг, 15 Августа 2013, 15:51 | Сообщение # 4
ColdGamedev
Сейчас нет на сайте
Цитата (LunarPixel)
Во-первых, это не урок. А во-вторых, подозреваю, что код не твой.

Где как. smile


Я снова с вами:з
Возвращение легенды. (нет)
GameMixДата: Четверг, 15 Августа 2013, 15:54 | Сообщение # 5
старожил
Сейчас нет на сайте
Цитата (CreatingOver)
А вообще, лучше, поройтесь в коде сами.

Ну класс lol зачем тогда вообще урок писать? Выложил бы исходник в соотв. раздел на сайте и успокоился на этом.
Цитата (CreatingOver)
Я объяснил вам все самое необходимое.

Спасибо! happy То, что ты объяснил, может придумать каждый человек. Т.к. это простой алгоритм, шаги написания программы.

Цитата (CreatingOver)
Где как.

Тогда ссылки на источники в студию, иначе нельзя так - выдавать чужое за своё.


Steel Standoff - 2D аркада.
Мои статьи


Сообщение отредактировал GameMix - Четверг, 15 Августа 2013, 15:56
DronCodeДата: Четверг, 15 Августа 2013, 15:56 | Сообщение # 6
Best Byte forever
Сейчас нет на сайте
В паскале нету комментариев к коду? Или язык этого не может? В общем без комментариев кода это просто копипаста. dry

Занимаюсь программированием на PHP, JavaScript (jQuery), C# (не Unity3d!), Action Script 3.0 (в основном клепаю игрушки под соц сети.), Node.JS
Недавно стал изучать Python.
XakepДата: Вторник, 10 Сентября 2013, 07:34 | Сообщение # 7
めちゃくちゃちゃ
Сейчас нет на сайте
Цитата (CreatingOver)
var x,t,y,i,z,xr,yr,prin1,prin2,prin3,prin4,prin5,k,s4et,prin6: integer;
    Direction :TDirection;
    xs,ys,bufx,bufy:array[1..200]of integer;

жесть
ПотенциалДата: Понедельник, 10 Февраля 2014, 19:52 | Сообщение # 8
участник
Сейчас нет на сайте
Цитата Xakep ()
В паскале нету комментариев к коду?

Есть.
DestroyДата: Пятница, 28 Февраля 2014, 12:16 | Сообщение # 9
постоянный участник
Сейчас нет на сайте
Цитата Потенциал ()
Есть.

кэп, это был сарказм
mlpmmoДата: Пятница, 28 Февраля 2014, 12:53 | Сообщение # 10
YBRONY
Сейчас нет на сайте
Цитата CreatingOver ()
долго изучаю pascal и владею достаточными знаниями

Зачем чтобы порезать хлеб изобретать лазерный меч?
Кто не понял, это о том что многие лезут штудировать толстые книжки ЯП, чтобы сделать змейку? тетрис? В большинстве случаев, такой народ осознает что сам с нуля ничего написать не сможет, без помощи и исходников, и бросает дело.


Простая арифметика (Web игра)
  • Страница 1 из 1
  • 1
Поиск:

Все права сохранены. GcUp.ru © 2008-2024 Рейтинг