Гелла, тебе не нужно было оправдываться.. Мне (да и никому особенно) не важно, почему тебя нет. Я не декан, просто интерес должен быть обоюдный. Если мне покажется, что тебе неинтересно - интерес иссякнет и у меня.. Да и к тому же я видел твои заходы в форум оба дня, когда ты молчала... Ладно, не будем препираться
.
Цитата(Гелла @ 7.04.2006 14:32)
Исправила ошибку, теперь появляется одна восьмерка..она двигается по прямой и когда доходит до конца монитора останавливается....не реагирует на нажатие клавиш i,m,j,k, при этом появляется окно с текстом программы...
Это странно. Я скопировал твой код и прогнал его и в FPC, и в BP7. В обоих случаях голова (восьмерка) дигалась
и поворачивала при нажатиях i, j, k, m - короче, вела себя адекватно. Может, у тебя был нажат Caps Lock? Или ты ждала, когда она дойдет до края, а потом нажимала? Смысл в том, что змейка в этой игре не должна натыкаться на стены - это для нее смерть. Поэтому я и сделал выход из программы по выходу восьмерки на край. Если ты управляешь ей и не даешь ей натыкаться на стенку, то она будет бегать вечно. Попробуй еще разок. И поставь задежку поменьше, типа 200 (хотя ТР может неправильно ее отрабатывать), чтобы все было подинамичнее..
Цитата(Гелла @ 7.04.2006 14:32)
А что такое FPC? Я работаю в обычном Turbo Pascal 7.0 под DOS(на синем экране).
FPC - это Free Pascal, Бесплатный Паскаль. Он тоже на синем экране, но под Dos работать не будет. Он вообще очень сильно похож на ТР, но есть одно главное отличие: ТР - это 16-разрядный компилятор, а FPC - это полностью 32-битный компилятор. Улавливаешь разницу? Например, ты сделала прогу в ТП7, потом запустила FPC, и в нем скомпилировала тот же самый программный текст. Когда ты запустишь эту прогу, ты не увидишь разницы - то же обычное черное досовское текстовое окошко (можно переключиться в полноэкранный режим нажатием Ctrl-Enter). Но
внутри программа совершенно другая - 32-разрядная! Например, ты сможешь использовать гораздо больше памяти (я свободно использую весь свой гигабайт), причем не блоками по 64КБ, а одним массивом! Ощущаешь выгоду?
Но для программки типа нашей змейки пока что разницы нету, в чем ты работаешь. Если хочешь все же установить себе FPC - пожалуйста, качай его совершенно бесплатно с их сайта
http://www.freepascal.org/ , только учти, что дистрибутив весит 25 МБ. По диалапу это будет качаться много часов, и он выйдет сильно небесплатный.. Если ты живешь в Москве, я бы советовал тебе бросить клич, кто может записать его на CD, а потом пересечься с тобой где-нить в метро. Сам я, увы, не могу..
Но, повторяю, для змейки FPC не обязателен. Что касается отступов, то совершенно аналогично ты можешь настроить свой ТП7. Иди в Options - Environment - Editor, и там поставь Tab size равным 2. Мне кажется, это идеальный размер для сдвига (при 4 на глубокие вложения не хватит экрана). Дальше для сдвига просто нажимай клавишу Tab. Можно сдвигать и куски текста (это часто бывает нужно). Для этого отметь нужный кусок блоком, а потом нажми (Ctrl-K, I). То есть К при нажатом Ctrl, а I -потом можно при нажатом и ненажатом. Еще раз повторяю: сдвиг должен быть одинаковым, а у тебя он пляшет - то 4, то 5.
Далее, структура программы у тебя нарушена. Каждый END должен быть
ровно на том же сдвиге, как и BEGIN (точнее, та строчка, в которой стоит этот BEGIN), который открыл этот блок. Если END относится не к BEGINу, а к CASE, то он должен быть на том же сдвиге, как и CASE. У тебя последние ENDы сдвинуты. Посмотри мой текст для образца, разберись, какой END относится к какому BEGINу. Ок?
Конечно, сдвиги не влияют на компиляцию. Но они очень помогают при написании. Вот когда начнешь
сама отыскивать ошибки в тексте (а не с помощью Volvo
), тогда поймешь и оценишь.
Цитата(Гелла @ 7.04.2006 14:32)
Т.е. если в скобках мы пишем Inc(x,vx), это значит vx:=x+1 или x:=x+1 тогда зачем мы пишем ещё и vx?
Процедуры Inc и Dec могут иметь один параметр, а могут два (в прошлый раз я это не сказал). Если параметр один, то он увеличивается (уменьшается) на единицу. Если параметров два, то первый параметр увеличивается (уменьшается) на величину второго (как сказал suriv). Если второй параметр отрицательный, то реально происходит уменьшение (увеличение). В нашем случае, если змейка движется вправо, то значение х нужно увеличивать, а если влево, то уменьшать. Но писать отделные блоки кода, один из которых использует Inc, а другой - Dec, для движения вправо и влево - неразумно. Я использую vx (по аналогии со скоростью). Если vx=1, то оператор Inc(x,vx) увеличит значение х (движение вправо), а если vx=-1, то уменьшит (движение влево). Понятно? Аналогично для y (учти, что y увеличивается по экрану сверху вниз!).
Разберись детально, дотошно, въедливо, что делает каждая строчка, каждый оператор. Все вопросы задавай. Экспериментируй сама тоже. Например, неясно, почему vy задается равным -1 (см. строчку 37 твоего файла). Ну, в натуре, берешь и заменяешь это значение на 0 или 2... Потом запускаешь и смотришь, что будет..
Ну, пока. Жду рапорта о том, что все работает, как часы - и что тебе все понятно!