Игра змейка - Pascal ABC
Формулировка задачи:
Помогите пожалуйста, нужно написать игру "Змейка", как в тетрисе.
Решение задачи: «Игра змейка»
textual
Листинг программы
program Zmeya; Uses graphabc, events,timers; 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; 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 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 ABC и представляет собой игру Змейка
.
В нем используются следующие переменные:
- x, y, z, i, j, k - координаты движения змейки
- Direction - направление движения змейки (в данном случае используется перечисление TDirection)
- xs, ys, bufx, bufy - массивы для хранения координат змейки
- s4et - счетчик для обновления координат змейки
Процесс игры выглядит следующим образом:
- Создается таймер, который вызывает процедуру
pause
каждые 150 миллисекунд. - В процедуре
pause
происходит следующее:- Создаются два круга с радиусом r (радиус змейки)
- Задаются начальные координаты змейки (x, y)
- Задается направление движения змейки (в данном случае используется случайное направление)
- Обновляются координаты змейки (x, y)
- Вычисляется скорость змейки (в зависимости от направления движения)
- Если скорость змейки меньше или равна скорости игрового процесса (которая задана в 150 миллисекунд), то обновляется положение змейки
- Если скорость змейки больше скорости игрового процесса, то обновляется только положение змейки
- Если змейка сталкивается со стеной (то есть если ее координата x или y становится отрицательной или превышает размеры окна игры), то игра заканчивается
- Если змейка съедает свой хвост, то также игра заканчивается
- Если змейка достигает центра поля (то есть если ее координата x или y становится равной 0), то увеличивается счетчик s4et, который используется для обновления координат змейки
- В процедуре
XP
обрабатываются нажатия клавиш на клавиатуре. В зависимости от нажатой клавиши изменяется направление движения змейки. - В процедуре
pause
после обновления координат змейки вычисляется скорость змейки. Скорость вычисляется как среднее арифметическое между текущей скоростью змейки и предыдущей скоростью змейки. Это делается для того, чтобы скорость змейки постепенно уменьшалась по мере ее движения. - В процедуре
Circl
создается круг с заданными координатами (x, y).
- Создается таймер, который вызывает процедуру
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д