Вот кому-то правил, просто так отдаю.
Что-то другое делать просто так даже не просите.
uses
GraphABC, Events, Timers;
type
KeyPressed = (Up, Down, Left, Right, None);
const
r = 10; {радиус круга}
var
x, y: integer; {текущие координаты рисования}
apX, apY: integer; {координаты яблока}
api: integer; {длина змейки}
i, ii, jj, q, huX, huY, teloid: integer;
{массивы координат поля}
xx, yy: array[0..25] of integer;
{массивы координат змейки}
tX, tY: array [0..300] of integer;
onKey: KeyPressed;
{Вычислим для каждого поля координаты рисования}
procedure Field;
var
fi: Integer;
begin
ii := r;
for fi := 0 to 25 do
begin
xx[fi] := ii;
yy[fi] := ii;
ii := ii + r + r; {с шагом 1 диаметра}
end;
end;
{Процедура рисования красного круга с координатами x,y и радиусом r
Рисуем голову змейки}
procedure Draw;
begin
SetBrushColor(clRed);
SetPenColor(clRed);
circle(x, y, r);
end;
{Процедура скрытия конца хвоста}
procedure HideEndHvost;
begin
SetPenColor(clWhite);
SetBrushColor(clWhite);
Circle(Tx[api], Ty[api], r);
end;
{Процедура рисования начала хвоста}
procedure DrawBegHvost;
begin
{Проверим, что хвост есть и тогда рисуем}
if api > 1 then
begin
SetPenColor(clYellow);
SetBrushColor(clYellow);
Circle(Tx[1], Ty[1], r);
end;
end;
{Процедура сдвига координат хвоста за ход}
procedure hvost;
var
i: Integer;
begin
for i := api downto 1 do
begin
tX[i] := tX[i - 1];
tY[i] := tY[i - 1];
end;
tX[0] := x;
tY[0] := y;
end;
{Рисование яблока по случайным координатам apX, apY}
procedure Apple;
var
fl: Boolean;
i: Integer;
begin
SetBrushColor(clGreen);
SetPenColor(clGreen);
fl := false; {флаг, что ячейка занята}
{поиск пока не найдем свободную ячейку}
while not fl do
begin
{случайно выбираем ячейку}
apX := xx[Random(26)];
apY := yy[Random(26)];
fl := true; {флаг, что ячейка свободна}
i := 0;
while (i < api) and fl do {проверять на всю длину змейки и пока не нашли, что занята}
begin
if (tX[i] = apX) and (tY[i] = apY) then fl := false; {ячейка уже занята}
Inc(i); {i:=i+1}
end;
end;
Circle(apX, apY, r);
end;
{Процедура нажатии клавиши изменить статус onKey}
procedure KeyDown(key: integer);
begin
case key of
vk_Left: onKey := Left;
vk_Right: onKey := Right;
vk_Up: onKey := Up;
vk_Down: onKey := Down;
end;
end;
{Рисование поля, обработчик таймера}
procedure DrawField;
var
oldx, oldy: Integer; {старые координаты x и y}
begin
oldx := x;
oldy := y;
{Вычисляем новые координаты}
if onKey = Up then
y := y - 2 * r;
if OnKey = Down then
y := y + 2 * r;
if OnKey = Right then
x := x + 2 * r;
if OnKey = Left then
x := x - 2 * r;
{Проверим, что координаты не выходят за допустимые}
if x < r then x := WindowWidth - r;
if y < r then y := WindowHeight - r;
if x > WindowWidth - r then x := r;
if y > WindowHeight - r then y := r;
{Если координаты изменились, значит ход был}
if (oldx <> x) or (oldy <> y) then
begin
Draw; {рисуем голову змейки}
{Проверим на совпадение с яблоком}
if (apX = x) and (apY = y) then
begin
Inc(api); {+1 к длине змейки}
Hvost; {Процедура сдвига координат хвоста за ход}
DrawBegHvost; {Процедура рисования начала хвоста}
Apple; {рисуем яблоко}
end
else
begin
Hvost; {Процедура сдвига координат хвоста за ход}
DrawBegHvost; {Процедура рисования начала хвоста}
HideEndHvost; {Процедура скрытия конца хвоста}
end;
end;
end;
begin
SetWindowSize(26 * 2 * r, 26 * 2 * r); {размер поля рисования 26 клеток размером в диаметр}
onKeyDown := KeyDown; {обработчик нажатия клавиши}
OnKey := None;
Field; {Вычиcлим для каждого поля координаты рисования}
api := 1; {первоначальная длина змейки}
{первоначальные координаты змейки случайно}
x := xx[Random(26)];
y := yy[Random(26)];
tX[0] := x; tY[0] := y;
{рисуем голову змейки}
Draw;
{рисуем яблоко}
Apple;
{Создаем таймер и назначаем обработчик таймера процедуру DrawField}
CreateTimer(200, DrawField);
end.
Другие языки программирования и технологии
Скиньте пожалуйста игру змейка (как в тетрисе) , написанную на языке Pascal ABC?
не АВС, но паскаль) http://forum.codecall.net/topic/35890-code-pascal-snake-game/
можно бесплатно найти на ПаскальГуру
(вбейте в гугл ПаскальГУРУ)
(вбейте в гугл ПаскальГУРУ)
Похожие вопросы
- Помогите написать программу на языке Pascal ABC
- Помогите с информатикой обычно сам делаю но тут попал в тупик (язык pascal abc)
- Помогите написать программу в Pascal abc net
- Помогите пж информатика 9 класс програма на языке pascal abc
- Помогите написать программы по Pascal ABC
- Напишите на языке Pascal
- Змейка [Pascal ABC]
- Скиньте пожалуйста рабочий код для поиска обратной матрицы методом гаусса, в Pascal ABC?
- Приведите пример игры которая написана на Pascal ABC.
- Pascal abc и Pascal одно и тоже? Или разные языки программирования?
че делать?