Создание 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). Всем до свидания и до следующих уроков!
Я снова с вами:з Возвращение легенды. (нет)
Сообщение отредактировал CreatingOver - Четверг, 15 Августа 2013, 09:27 |
|
| |
Destroy | Дата: Четверг, 15 Августа 2013, 15:34 | Сообщение # 2 |
постоянный участник
Сейчас нет на сайте
| еще полезней было бы кинуть исходник
|
|
| |
LunarPixel | Дата: Четверг, 15 Августа 2013, 15:47 | Сообщение # 3 |
старожил
Сейчас нет на сайте
| Во-первых, это не урок. А во-вторых, подозреваю, что код не твой.
|
|
| |
CreatingOver | Дата: Четверг, 15 Августа 2013, 15:51 | Сообщение # 4 |
ColdGamedev
Сейчас нет на сайте
| Цитата (LunarPixel) Во-первых, это не урок. А во-вторых, подозреваю, что код не твой. Где как.
Я снова с вами:з Возвращение легенды. (нет)
|
|
| |
GameMix | Дата: Четверг, 15 Августа 2013, 15:54 | Сообщение # 5 |
старожил
Сейчас нет на сайте
| Цитата (CreatingOver) А вообще, лучше, поройтесь в коде сами. Ну класс зачем тогда вообще урок писать? Выложил бы исходник в соотв. раздел на сайте и успокоился на этом. Цитата (CreatingOver) Я объяснил вам все самое необходимое. Спасибо! То, что ты объяснил, может придумать каждый человек. Т.к. это простой алгоритм, шаги написания программы.
Цитата (CreatingOver) Где как. Тогда ссылки на источники в студию, иначе нельзя так - выдавать чужое за своё.
Steel Standoff - 2D аркада. Мои статьи
Сообщение отредактировал GameMix - Четверг, 15 Августа 2013, 15:56 |
|
| |
DronCode | Дата: Четверг, 15 Августа 2013, 15:56 | Сообщение # 6 |
Best Byte forever
Сейчас нет на сайте
| В паскале нету комментариев к коду? Или язык этого не может? В общем без комментариев кода это просто копипаста.
Занимаюсь программированием на 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 ( ![Ссылка на цитируемый текст](http://s12.ucoz.net/img/fr/ic/11/lastpost.gif) ) В паскале нету комментариев к коду? Есть.
|
|
| |
Destroy | Дата: Пятница, 28 Февраля 2014, 12:16 | Сообщение # 9 |
постоянный участник
Сейчас нет на сайте
| Цитата Потенциал ( ![Ссылка на цитируемый текст](http://s12.ucoz.net/img/fr/ic/11/lastpost.gif) ) Есть. кэп, это был сарказм
|
|
| |
mlpmmo | Дата: Пятница, 28 Февраля 2014, 12:53 | Сообщение # 10 |
YBRONY
Сейчас нет на сайте
| Цитата CreatingOver ( ![Ссылка на цитируемый текст](http://s12.ucoz.net/img/fr/ic/11/lastpost.gif) ) долго изучаю pascal и владею достаточными знаниями Зачем чтобы порезать хлеб изобретать лазерный меч? Кто не понял, это о том что многие лезут штудировать толстые книжки ЯП, чтобы сделать змейку? тетрис? В большинстве случаев, такой народ осознает что сам с нуля ничего написать не сможет, без помощи и исходников, и бросает дело.
Простая арифметика (Web игра)
|
|
| |
|