![]() |
![]() |
a100 |
![]()
Сообщение
#1
|
Группа: Пользователи Сообщений: 6 Пол: Мужской Реальное имя: a100 Репутация: ![]() ![]() ![]() |
Здравствуйте! Благодаря информации с вашего форума, получилось написать, так сказать. костяк программы) не просто списать, а понять что для чего, это получилось. Опыт программирования еще совсем маленький.
Вот мой код:
Program Snake;
uses crt;
const
xn=1; {предел экрана слева}
xx=80; {предел экрана справа}
yn=1; {верхний предел экрана}
yx=25; {нижний предел экрана}
H='0'; {голова змеи}
dt=400; {задержка}
var
x:integer=xx div 2; {начальное расположение змеи}
y:integer=yx div 2;
vx:integer=-1; {начальное направление змеи}
vy:integer=0;
xe:integer=15; {начальные координаты яблока}
ye:integer=15;
var
c:char;
begin
randomize;
clrscr;
gotoxy(xe,ye); {рисуем первое яблоко}
write ('$');
while (x>=xn) and (x<=xx) and (y>=yn) and (y<=yx) do {обозначаем границы экрана}
begin
GoToXY(x,y); {рисуем новое положение символа}
write(H);
Delay(dt); {задержка, иначе символ будет бегать быстро}
if keypressed then {если нажата клавиша читаем ее}
begin
c:=readkey;
case c of {если это был управляющий символ, изменяем движение}
'w':begin vx:=0; vy:=-1 end; {изменяем движение на движение вверх}
's':begin vx:=0; vy:=1 end; {изменяем движение на движение вниз}
'a':begin vx:=-1; vy:=0 end; {изменяем движение на движение влево}
'd':begin vx:=1; vy:=0 end; {изменяем движение на движение вправо}
end;
end;
gotoxy(x,y);
write(' ');
inc(x,vx); {вычисляем новое положение змейки}
inc(y,vy);
if (x=xe) and (y=ye) then {если координаты змеи совпадают с координатами яблока}
begin
xe:=random(75); {рисуем новое яблоко, случайным образом}
ye:=random(20);
gotoXY(xe,ye);
write('$');
end;
end;
end.
пока не хватает знаний, чтоб сделать хвост змее, который растет, когда змея съедает яблоко... надеюсь на вашу помощь |
![]() ![]() |
Lapp |
![]()
Сообщение
#2
|
![]() Уникум ![]() ![]() ![]() ![]() ![]() ![]() ![]() Группа: Модераторы Сообщений: 6 823 Пол: Мужской Реальное имя: Лопáрь (Андрей) Репутация: ![]() ![]() ![]() |
надеюсь на вашу помощь Самый лучший вариант - завести двумерный массив из байтов по числу клеток игрового поля b: array [xn..xx,yn..yx] of byte;
В нем рисуй тело от хвоста до головы. Вот такие обозначения: 0 - пустая клетка 1 - тело идет вверх 2 - тело идет вправо 3 - тело идет вниз 4 - тело идет влево 5 - голова (тело закончилось 6 - кролик 7 - мангуста 8 - препятствие .... Вот тебе пример такого поля и змеи на нем: 0000000000
0002222300
0001000300
0021000500
0010000000
0014440000
0000000000
При этом храни в двух парах переменных текущие координаты головы и хвоста. Так ты сможешь "двигать змею". Если змея в этот момент движется вправо, то следующий кадр будет такой: 0000000000
0002222300
0001000300
0021000250
0010000000
0014400000
0000000000
Подумай над этим как следует. Если будут вопросы - задавай. Меня не будет до ночи, но кто-то еще может подсказать.. -------------------- я - ветер, я северный холодный ветер
я час расставанья, я год возвращенья домой |
TarasBer |
![]()
Сообщение
#3
|
![]() Злостный любитель ![]() ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 1 755 Пол: Мужской Репутация: ![]() ![]() ![]() |
b: array [xn..xx,yn..yx] of byte;
В нем рисуй тело от хвоста до головы. Вот такие обозначения: 0 - пустая клетка 1 - тело идет вверх 2 - тело идет вправо 3 - тело идет вниз 4 - тело идет влево 5 - голова (тело закончилось 6 - кролик 7 - мангуста 8 - препятствие Фу, это же магические числа. Я предпочитаю делать так:
type
TField = (fEmpty, fUp, fRight, fDown, fLeft, fHead, fFood, fEnemy, fBorder);
var
b: array [xn..xx,yn..yx] of TField;
-------------------- |
Lapp |
![]()
Сообщение
#4
|
![]() Уникум ![]() ![]() ![]() ![]() ![]() ![]() ![]() Группа: Модераторы Сообщений: 6 823 Пол: Мужской Реальное имя: Лопáрь (Андрей) Репутация: ![]() ![]() ![]() |
Фу, это же магические числа. Я предпочитаю делать так:
type
TField = (fEmpty, fUp, fRight, fDown, fLeft, fHead, fFood, fEnemy, fBorder);
var
b: array [xn..xx,yn..yx] of TField;
![]() ![]() Только тогда с отладкой и промежуточными печатями могут быть проблемы.. Не совсем проблемы, просто дополнительная писанина + значения могут случайно съехать.. Но это все мелочи. Правильно, нужно именно так делать. -------------------- я - ветер, я северный холодный ветер
я час расставанья, я год возвращенья домой |
![]() ![]() |
![]() |
Текстовая версия | 28.07.2025 4:05 |