IPB
ЛогинПароль:

4 страниц V < 1 2 3 4 >  
 Ответить  Открыть новую тему 
> С какой игры начать?
Lapp
сообщение 8.04.2006 5:33
Сообщение #21


Уникум
*******

Группа: Модераторы
Сообщений: 6 823
Пол: Мужской
Реальное имя: Лопáрь (Андрей)

Репутация: -  159  +


Гелла, тебе не нужно было оправдываться.. Мне (да и никому особенно) не важно, почему тебя нет. Я не декан, просто интерес должен быть обоюдный. Если мне покажется, что тебе неинтересно - интерес иссякнет и у меня.. Да и к тому же я видел твои заходы в форум оба дня, когда ты молчала... Ладно, не будем препираться smile.gif.
Цитата(Гелла @ 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 smile.gif ), тогда поймешь и оценишь.

Цитата(Гелла @ 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... Потом запускаешь и смотришь, что будет..

Ну, пока. Жду рапорта о том, что все работает, как часы - и что тебе все понятно! smile.gif


--------------------
я - ветер, я северный холодный ветер
я час расставанья, я год возвращенья домой
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Гелла
сообщение 8.04.2006 12:20
Сообщение #22


Пионер
**

Группа: Пользователи
Сообщений: 84
Пол: Женский

Репутация: -  0  +


Цитата
Да и к тому же я видел твои заходы в форум оба дня, когда ты молчала...


а вот этого точно быть не может.. wink.gif не могу с этим согласиться...

Цитата
Разберись детально, дотошно, въедливо, что делает каждая строчка, каждый оператор. Все вопросы задавай. Экспериментируй сама тоже. Например, неясно, почему vy задается равным -1 (см. строчку 37 твоего файла). Ну, в натуре, берешь и заменяешь это значение на 0 или 2... Потом запускаешь и смотришь, что будет..


так и сделаю... unsure.gif


--------------------
И полусонным стрелкам лень
Ворочаться на циферблате
И дольше века длится день..
И не кончается объятье...
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Lapp
сообщение 9.04.2006 4:44
Сообщение #23


Уникум
*******

Группа: Модераторы
Сообщений: 6 823
Пол: Мужской
Реальное имя: Лопáрь (Андрей)

Репутация: -  159  +


Цитата(Гелла @ 8.04.2006 12:20) *

а вот этого точно быть не может.. wink.gif не могу с этим согласиться...

Мож глюк какой..
Цитата(Гелла @ 8.04.2006 12:20) *

так и сделаю... unsure.gif

Ок, давай! Нас ждет много интерсного впереди! smile.gif


--------------------
я - ветер, я северный холодный ветер
я час расставанья, я год возвращенья домой
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Гелла
сообщение 9.04.2006 11:39
Сообщение #24


Пионер
**

Группа: Пользователи
Сообщений: 84
Пол: Женский

Репутация: -  0  +


Цитата
Ок, давай! Нас ждет много интерсного впереди!

good.gif


--------------------
И полусонным стрелкам лень
Ворочаться на циферблате
И дольше века длится день..
И не кончается объятье...
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Гелла
сообщение 10.04.2006 16:58
Сообщение #25


Пионер
**

Группа: Пользователи
Сообщений: 84
Пол: Женский

Репутация: -  0  +


Программа работает!У меня был неправильный паскаль...стоило переустапновить паскаль и всё заработало...вроде во всём разобралась...

Goodwind: "..это неправильные пчелы.. "© Винни-Пух

Сообщение отредактировано: GoodWind - 11.04.2006 6:26


--------------------
И полусонным стрелкам лень
Ворочаться на циферблате
И дольше века длится день..
И не кончается объятье...
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Lapp
сообщение 12.04.2006 11:40
Сообщение #26


Уникум
*******

Группа: Модераторы
Сообщений: 6 823
Пол: Мужской
Реальное имя: Лопáрь (Андрей)

Репутация: -  159  +


Гелла, привет. Режь меня - не могу представить ситуацию, чтоб "неправильный" Паскаль компилил прогу так, чтоб она неправильно работала! Мистика какая-то.. У Турбо Паскаля и установки-то как таковой нету - просто копируй файлы, да и все.

Ну, что ж - можно топать вперед.. Но только движение вперед всегда относительно. Сейчас мы сделаем программу, которая делает в точности то же самое smile.gif.
Мы оптимизируем, или просто улучшим программу. Любая сколь-нибудь серьезная программа может быть улучшена сразу после написания. Сначала ты пишешь текст, отлаживаешь, видишь - все работает. Но после этого замечаешь, что программа может быть улучшена.. Посмотри текст внизу. Запусти его (можешь на этот раз скопировать), убедись, что все действительно работает по-старому.
После этого сравни его со старым текстом. Найди, как грится, десять отличий. И попытайся тут высказать, какие улучшения мне удалось сделать в этой совсем небольшой программке smile.gif. Ок?
{Version 02}
uses
CRT;

const
xn=1; {Left screen limit}
xx=80; {Right screen limit}
yn=1; {Top screen limit}
yx=25; {Bottom screen limit}
H='8'; {Snake head}
dt=500; {Delay}

var
x:integer=xn; {Snake location}
y:integer=yx div 2;
vx:integer=1; {Snake direction}
vy:integer=0;

var
c:char;

begin
ClrScr;
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
'i':begin vx:=0;vy:=-1 end;
'm':begin vx:=0;vy:=1 end;
'j':begin vx:=-1;vy:=0 end;
'k':begin vx:=1;vy:=0 end;
end;
end;
GoToXY(x,y);Write(' ');
Inc(x,vx);Inc(y,vy);
end
end.


--------------------
я - ветер, я северный холодный ветер
я час расставанья, я год возвращенья домой
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Гелла
сообщение 12.04.2006 17:11
Сообщение #27


Пионер
**

Группа: Пользователи
Сообщений: 84
Пол: Женский

Репутация: -  0  +


Цитата
Гелла, привет. Режь меня - не могу представить ситуацию, чтоб "неправильный" Паскаль компилил прогу так, чтоб она неправильно работала! Мистика какая-то.. У Турбо Паскаля и установки-то как таковой нету - просто копируй файлы, да и все.

все удивляются..но так и было...на том старом паскале программа неправильно работала...а в этом всё отлично...мож я конечсно что неправильно поняла...или неправильно установила........

Цитата
После этого сравни его со старым текстом. Найди, как грится, десять отличий. И попытайся тут высказать, какие улучшения мне удалось сделать в этой совсем небольшой программке . Ок?


Сегодня этим займусь....

Сообщение отредактировано: Гелла - 12.04.2006 17:11


--------------------
И полусонным стрелкам лень
Ворочаться на циферблате
И дольше века длится день..
И не кончается объятье...
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Гелла
сообщение 13.04.2006 16:42
Сообщение #28


Пионер
**

Группа: Пользователи
Сообщений: 84
Пол: Женский

Репутация: -  0  +


program snake_2;
uses crt;

const
xn=1;
xx=80;
yn=1;
yx=25;
H='8';
dt=500;


var x,y,vx,vy:integer;
c:char;

begin
clrscr;
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
'i':begin vx:=0; vy:=-1 end;
'm':begin vx:=0; vy:=1 end;
'j':begin vx:=-1; vy:=0 end;
'k':begin vx:=1; vy:=0 end;
end;
end;
GoToXY(x,y);
write('');
Inc(x,vx);
Inc(y,vy);
end;
end.

Она не работает...только не понимаю почему..ошибок никаких, а на экране вообще ничего не появляется...
просто чёрный экран...

Сообщение отредактировано: volvo - 2.11.2006 12:33


--------------------
И полусонным стрелкам лень
Ворочаться на циферблате
И дольше века длится день..
И не кончается объятье...
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Lapp
сообщение 14.04.2006 6:06
Сообщение #29


Уникум
*******

Группа: Модераторы
Сообщений: 6 823
Пол: Мужской
Реальное имя: Лопáрь (Андрей)

Репутация: -  159  +


Цитата(Гелла @ 13.04.2006 16:42)
Она не работает...только не понимаю почему..ошибок никаких, а на экране вообще ничего не появляется...
просто чёрный экран...
Гелла, привет!
Ты молодец, я бы принес тебе большую конфету, если бы был твоим учителем! smile.gif Кроме шуток..
Ты не воспользовалась данным мной разрешением копировать текст (copy-paste), а набрала руками! Это оказалось неожиданно очень полезно - вылезла ошибка (не ошибка, скорее пробел), которую я бы пропустил. Слушай, если уж ты такая усердная - давай я тебя еще об одном попрошу, а? Пожалуйста, отвечай хотя бы коротко на все пункты (явные и неявные) в моих постах. Типа - "это - поняла, это просто!". Или: "а это - кажется, понятно но может не совсем.." Договорились? smile.gif

Итак, про тот пробел. В Паскале есть декларация CONST. Она означает, что величины в ней изменяться никогда не будут, всегда сохраняя значение, заданное в тексте программы. У меня такими константами заданы границы игрового поля (которое сейчас занимает весь текстовый экран), а также промежуток времени и символ головы. Поскольку величины, заданные в этом разделе, никогда не изменяются, то компилятор реально не отводит для них ячейки памяти. Он поступает проще: везде, где эта константа (скажем, xn или xx) встретится в тексте, он подставит число, которому она равна (в данном случае 1 или 80). То есть программа компилируется как если бы мы сразу написали 1 вместо xn и 80 вместо xx. Так зачем они тогда нужны, спрашивается? А нужны они для удобства программирования (как и вообще все языки smile.gif ). А именно, если завтра ты захочешь изменить игровое поле - сузить, отодвинув его от краев экрана - то тебе придется, если ты не использовала константы, ползать по всему тексту проги и искать, где вместо 1 поставить 2, а вместо 80 поставить 79.. При этом, если 80 отследить просто, то единиц в тексте может быть гораздо больше, ибо не все они означают границу поля. Так что тебе придется думать, что есть что. Если же использовать константы (как мы и сделали), то для изменения границ поля достаточно заменить xn=1 на xn=2, а также xx=80 на xx=79, а компилятор сам подставит нужные числа в нужных местах. smile.gif Это понятно?

Есть еще один большой плюс констант. Они могут использоваться в качестве границ при определении массивов. Более того, можно даже использовать арифметические выражения с ними при проеделении размерности массива (типа N*2+3). Это очень удобно, так как обычно в программе обычно присутствуют несколько массивов, размерности которых связаны между собой каким-либо образом (не обязательно равны).

Но это еще не есть тот самый пробел. Это присказка. Двигаемся дальше..
Я начал разговор о константах потому, что причина того, почему программа у тебя не заработала, связана с константами. В Паскале есть еще понятие "типизированные константы". С ними может возникнуть путаница, так как это совсем не константы. Для них отводится память, как для переменных, они используются, как переменные. И их нельзя использовать в определении размерности массива. Почему они тогда называются константы? Это никому неизвестно. Но они действительно помещаются в раздел CONST. Вот так:
const
a:integer=5;
e:real=2.17;

По сути, эти штуки лучше было бы назвать "инициализированные переменные", так как смысл именно тот: это обычная переменная, но имеющая определенное начальное значение (значение обычных переменных перед выполнением программы не определено). Так вот, в ТР7 это делается именно так, как я описал выше.

Теперь идем еще дальше.. В FreePascal (FPC), которым пользуется твой покорный слуга, видимо, решили исправить это досадное недоразумение. Они разрешили инициировать переменные, то есть делать так:
var
a:integer=5;
e:real=2.17;

Замечаешь разницу? Теперь заголовок var, а не const. То есть в FPC можно использовать и const, и var. Ну и я, ессно, использовал var! smile.gif А ТР7, коим пользуется юная леди, этого не пропускает! И вот упомянутая мисс, берет, да и просто отрезает значения.. smile.gif Так было?.. сознайся! smile.gif

Когда ты набирала первую версию, ты вышла из этого положения корректно: ты перенесла инициализацию в исполняемый блок (молодец!). А во второй версии ты этого не сделала (теряюсь в догадках, почему).

Собственно, ты сейчас должна догадаться, как исправить мой текст Версии 2. Да, правильно - изменить словечко var на const (первое из них, второе не надо).
Теперь понятно? smile.gif
Уфф... пойду перекушу перед походом в зал - иначе упаду в середине игры.. smile.gif
Жду ответа с нетерпением. С отметками - что ясно, что нет..
Чао!


--------------------
я - ветер, я северный холодный ветер
я час расставанья, я год возвращенья домой
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
volvo
сообщение 14.04.2006 15:01
Сообщение #30


Гость






Цитата(lapp @ 14.04.2006 6:06)
Теперь идем еще дальше.. В FreePascal (FPC), которым пользуется твой покорный слуга, видимо, решили исправить это досадное недоразумение. Они разрешили инициировать переменные, то есть делать так:
var
a:integer=5;
e:real=2.17;
Замечаешь разницу? Теперь заголовок var, а не const. То есть в FPC можно использовать и const, и var.

lapp, я понимаю, что это мое замечание немного не в тему, этому можно посвящать отдельную ветку, но все же... Я увидел, как ты, сам того не подозревая, даешь не совсем верную информацию, и просто не мог пройти мимо. Насчет:
Цитата(lapp @ 14.04.2006 6:06)
То есть в FPC можно использовать и const, и var.
Можно-то можно, но это же не одно и то же... Ты здесь не столкнулся с проблемой только потому, что использовал ГЛОБАЛЬНЫЕ переменные/константы. И не только поэтому... Дело все в том, что FPC милостиво разрешает тебе использовать и
Var a: integer = 1;

и
Const a: integer = 1;

по одной простой причине: это делается для совместимости с Дельфи. И у тебя, скорее всего, в настройках среды установлена по-умолчанию именно совместимость с Дельфями... А я уже говорил, и опять повторяю, что нельзя надеяться, что у всех среда настроена так же, как у тебя. Если я хочу, чтобы у всех, кто попробует откомпилировать мою программу, результат был одинаков - я не буду полагаться на настройки IDE, а буду использовать ключи и режимы компиляции. Так вот попробуй свою программу откомпилировать при установленном первой строкой ключе
{$mode TP}

и ты увидишь, что FPC может и кусаться, не всегда он ласково трется об руку и мурлычет smile.gif

Кроме того, вот тебе пример, иллюстрирующий разницу между типизированными константами и переменными с начальным значением (при использовании их ЛОКАЛЬНО):
1)
procedure a;
const
x: integer = 10;
px : ^integer = @x;

begin
px := @x;
px^ := 12;
writeln('x = ', x);
end;

begin
a;
end.

2)
procedure a;
var
x: integer = 10;
px : ^integer = @x;

begin
px := @x;
px^ := 12;
writeln('x = ', x);
end;

begin
a;
end.


Вроде, одно и то же, правда? Откомпилируй, и почувствуй разницу...
 К началу страницы 
+ Ответить 
Lapp
сообщение 15.04.2006 14:13
Сообщение #31


Уникум
*******

Группа: Модераторы
Сообщений: 6 823
Пол: Мужской
Реальное имя: Лопáрь (Андрей)

Репутация: -  159  +


volvo, спасибо, мне действительно недоставало ясности по этому вопросу - теперь, кажется, она есть.
Кстати, сообщение твое вполне в тему, я вообще не вижу особых ограничений. Я, кстати, не очень рад, что остался один на один с ученицей.. Боюсь, я и не сдюжу в нужном темпе довести все до конца (а хотелось бы). Так что - помогайте, кто чем! smile.gif Конечно, слишком тонкие материи могут оказаться действительно лешневатыми Гелле в ее начальном состоянии (да еще и с ТР). Но ошибки (мои) - есть ошибки, их нужно исправлять.
Я все же замечу Гелле для большей ясности, что в ТР (ВР) инициализированных переменных все же нет вообще, а типизированные константы работают, как я описал.
И снова жду ответа.. smile.gif


--------------------
я - ветер, я северный холодный ветер
я час расставанья, я год возвращенья домой
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Гелла
сообщение 16.04.2006 18:53
Сообщение #32


Пионер
**

Группа: Пользователи
Сообщений: 84
Пол: Женский

Репутация: -  0  +


Привет lapp!

Цитата
Слушай, если уж ты такая усердная - давай я тебя еще об одном попрошу, а? Пожалуйста, отвечай хотя бы коротко на все пункты (явные и неявные) в моих постах. Типа - "это - поняла, это просто!". Или: "а это - кажется, понятно но может не совсем.." Договорились?

Договорились...

Цитата
В Паскале есть декларация CONST. Она означает, что величины в ней изменяться никогда не будут, всегда сохраняя значение, заданное в тексте программы. У меня такими константами заданы границы игрового поля (которое сейчас занимает весь текстовый экран), а также промежуток времени и символ головы. Поскольку величины, заданные в этом разделе, никогда не изменяются, то компилятор реально не отводит для них ячейки памяти. Он поступает проще: везде, где эта константа (скажем, xn или xx) встретится в тексте, он подставит число, которому она равна (в данном случае 1 или 80). То есть программа компилируется как если бы мы сразу написали 1 вместо xn и 80 вместо xx. Так зачем они тогда нужны, спрашивается? А нужны они для удобства программирования (как и вообще все языки ).


это мне понятно..



Цитата
В Паскале есть еще понятие "типизированные константы". С ними может возникнуть путаница, так как это совсем не константы. Для них отводится память, как для переменных, они используются, как переменные. И их нельзя использовать в определении размерности массива. Почему они тогда называются константы? Это никому неизвестно. Но они действительно помещаются в раздел CONST


с самого начала путаюсь в этих разновидностях констант...

Цитата
А ТР7, коим пользуется юная леди, этого не пропускает! И вот упомянутая мисс, берет, да и просто отрезает значения.. Так было?.. сознайся!

да TP 7.0 не пропускает такую фому записи..я их убрала оттуда, а потом про них просто забыла...

Цитата
Собственно, ты сейчас должна догадаться, как исправить мой текст Версии 2. Да, правильно - изменить словечко var на const (первое из них, второе не надо).

так у меня всего одно слово var... unsure.gif

Цитата
Теперь понятно?

unsure.gif unsure.gif I'm not sure...

program snake_2;
uses crt;

const
xn=1;
xx=80;
yn=1;
yx=25;
H='8';
dt=500;


var x,y,vx,vy:integer;
c:char;

begin
x:=xn
y:=yx div 2;
vx:=1;
vy:=0;


clrscr;
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
'i':begin vx:=0; vy:=-1 end;
'm':begin vx:=0; vy:=1 end;
'j':begin vx:=-1; vy:=0 end;
'k':begin vx:=1; vy:=0 end;
end;
end;
GoToXY(x,y);
write('');
Inc(x,vx);
Inc(y,vy);
end;
end


Сообщение отредактировано: volvo - 2.11.2006 12:37


--------------------
И полусонным стрелкам лень
Ворочаться на циферблате
И дольше века длится день..
И не кончается объятье...
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
volvo
сообщение 16.04.2006 20:22
Сообщение #33


Гость






Гелла, делаешь очень опасную ошибку... Она никак не контролируется компилятором TP (более новые компиляторы выдают Warning, но большинство программистов, особенно начинающих, на предупреждения внимания не обращает, главное - что ошибок нет...)

А вот на правильность работы программы эта ошибка повлиять ох как может... Ты забыла инициализировать переменную X. То есть, описать ты ее описала, но какое значение ей будет присвоено при запуске программы? Хотя TP и должен обнулять (присваивать НУЛЮ) все глобальные переменные, все-таки, это лучше брать под свой контроль.

Кроме всего прочего, я не уверен, что значение X = 0 тебя устроит по логике работы программы: ты даже не войдешь внутрь цикла While, потому что уже в самом начале условие (x >= xn) ложно, потому как:

X = 0, xn = 1 что получили? (X >= xn) является проверкой (0 >= 1), естественно - ЛОЖЬ

соответственно, цикл While выполняться не будет, и программа закончится, даже не начавшись...

Там, где ты присвоила начальное значение переменной Y, сделай такое же действие для X...
 К началу страницы 
+ Ответить 
Гелла
сообщение 16.04.2006 22:53
Сообщение #34


Пионер
**

Группа: Пользователи
Сообщений: 84
Пол: Женский

Репутация: -  0  +


Цитата
Гелла, делаешь очень опасную ошибку... Она никак не контролируется компилятором TP (более новые компиляторы выдают Warning, но большинство программистов, особенно начинающих, на предупреждения внимания не обращает, главное - что ошибок нет...)

А вот на правильность работы программы эта ошибка повлиять ох как может... Ты забыла инициализировать переменную X. То есть, описать ты ее описала, но какое значение ей будет присвоено при запуске программы? Хотя TP и должен обнулять (присваивать НУЛЮ) все глобальные переменные, все-таки, это лучше брать под свой контроль.

Кроме всего прочего, я не уверен, что значение X = 0 тебя устроит по логике работы программы: ты даже не войдешь внутрь цикла While, потому что уже в самом начале условие (x >= xn) ложно, потому как:

X = 0, xn = 1 что получили? (X >= xn) является проверкой (0 >= 1), естественно - ЛОЖЬ

соответственно, цикл While выполняться не будет, и программа закончится, даже не начавшись...

Там, где ты присвоила начальное значение переменной Y, сделай такое же действие для X...


Спасибо, я даже не знала, что в TP cтолько тонкостей....я думала, что раз нет ошибок, то программа не может быть неверно написанной.. unsure.gifя сделала такое же действие для x, но программа не работает...

Сообщение отредактировано: Гелла - 16.04.2006 22:58


--------------------
И полусонным стрелкам лень
Ворочаться на циферблате
И дольше века длится день..
И не кончается объятье...
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Бродяжник
сообщение 17.04.2006 8:28
Сообщение #35


Бывалый
***

Группа: Пользователи
Сообщений: 206
Пол: Мужской

Репутация: -  3  +


Привет, Гелла!
Возможно, эта ошибка содержится только в тексте, выложенном на форуме, но в самом начале программы в строке
x:=xn

недостает точки с запятой. Наверное, в рабочей программе она есть. Далее, как в точности выглядит строка в программе, где записано
GoToXY(x,y);
write('');
?
Там между кавычками должен быть пробел. Он есть?
И наконец (я уже об этом писал). На моем компьютере я компилировал эту программу под ТР 6.0. И у меня она нормально работает при dt = 60000. В модуле CRT в свое время был применен такой алгоритм для функции Delay, который на более новых компьютерах перестал работать. По-моему, были какие-то патчи для этого дела, но я не уверен. Так вот, как же должна работать эта программа? - на экране появляется цифра 8, которая движется по экрану слева направо. Если ничего не нажать, то она доедет до края экрана и программа завершится. Если нажимать клавиши управления, она будет менять направление движения. И если Вы видите, что на экране почти мгновенно возникает полоса '8', и на этом все - это значит, что программа работает чересчур быстро. Чтобы ее замедлить, увеличьте значение dt.
З.Ы. Читать здесь:
Процедура Delay

Сообщение отредактировано: volvo - 2.11.2006 12:37
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Гелла
сообщение 17.04.2006 12:32
Сообщение #36


Пионер
**

Группа: Пользователи
Сообщений: 84
Пол: Женский

Репутация: -  0  +


Привет Бродяжник!

Цитата
Там между кавычками должен быть пробел. Он есть?

поставила ....
Цитата
На моем компьютере я компилировал эту программу под ТР 6.0. И у меня она нормально работает при dt = 60000. В модуле CRT в свое время был применен такой алгоритм для функции Delay, который на более новых компьютерах перестал работать.


Ура!Она работает,я написала dt = 60000, как Вы говорили, и программа зараБотала!! Спасибо give_rose.gif



Цитата
По-моему, были какие-то патчи для этого дела, но я не уверен. Так вот, как же должна работать эта программа? - на экране появляется цифра 8, которая движется по экрану слева направо. Если ничего не нажать, то она доедет до края экрана и программа завершится. Если нажимать клавиши управления, она будет менять направление движения. И если Вы видите, что на экране почти мгновенно возникает полоса '8', и на этом все - это значит, что программа работает чересчур быстро. Чтобы ее замедлить, увеличьте значение dt.

теперь понятно....

Вот она...

program snake_2;
uses crt;

const
xn=1;
xx=80;
yn=1;
yx=25;
H='8';
dt=60000;


var x,y,vx,vy:integer;
c:char;

begin
x:=xn;
y:=yx div 2;
vx:=1;
vy:=0;


clrscr;
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
'i':begin vx:=0; vy:=-1 end;
'm':begin vx:=0; vy:=1 end;
'j':begin vx:=-1; vy:=0 end;
'k':begin vx:=1; vy:=0 end;
end;
end;
GoToXY(x,y);
write(' ');
Inc(x,vx);
Inc(y,vy);
end;
end.


lapp!!Программа работает!!!

Сообщение отредактировано: volvo - 2.11.2006 12:38


--------------------
И полусонным стрелкам лень
Ворочаться на циферблате
И дольше века длится день..
И не кончается объятье...
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Бродяжник
сообщение 17.04.2006 13:19
Сообщение #37


Бывалый
***

Группа: Пользователи
Сообщений: 206
Пол: Мужской

Репутация: -  3  +


Молодица!
smile.gif
Теперь подумайте, чем эта программа отличается от взаправдашней змейки, и спросите: "А как мне сделать, чтобы...?"
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Гелла
сообщение 17.04.2006 16:33
Сообщение #38


Пионер
**

Группа: Пользователи
Сообщений: 84
Пол: Женский

Репутация: -  0  +


Цитата
Теперь подумайте, чем эта программа отличается от взаправдашней змейки, и спросите: "А как мне сделать, чтобы...?"


Нужно, чтобы змейка кушала, и становилась длиннее с каждым съеденным кусочком...?!?!

Сообщение отредактировано: Гелла - 17.04.2006 16:35


--------------------
И полусонным стрелкам лень
Ворочаться на циферблате
И дольше века длится день..
И не кончается объятье...
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Бродяжник
сообщение 17.04.2006 16:56
Сообщение #39


Бывалый
***

Группа: Пользователи
Сообщений: 206
Пол: Мужской

Репутация: -  3  +


Угу.
Для этого нужно, чтобы:
а) было что кушать;
б) змейка могла это кушать;
в) змейка умела расти.
Вот и давайте начнем сначала. Введем понятие поля. На этом поле будем расставлять яблоки (а в будущем, возможно и препятствия). Пожалуйста, напрягите соображение, и скажите, как мы будем в программе представлять поле? Поле у нас прямоугольное, клетчатое, размерами 80 на 25. Только не говорите, что не знаете. Выдайте любую идею.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Гелла
сообщение 17.04.2006 17:19
Сообщение #40


Пионер
**

Группа: Пользователи
Сообщений: 84
Пол: Женский

Репутация: -  0  +


Цитата
Пожалуйста, напрягите соображение, и скажите, как мы будем в программе представлять поле? Поле у нас прямоугольное, клетчатое, размерами 80 на 25. Только не говорите, что не знаете. Выдайте любую идею.

я думаю, это будет двумерный массив?!?


--------------------
И полусонным стрелкам лень
Ворочаться на циферблате
И дольше века длится день..
И не кончается объятье...
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

4 страниц V < 1 2 3 4 >
 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 



- Текстовая версия 28.03.2024 19:21
Хостинг предоставлен компанией "Веб Сервис Центр" при поддержке компании "ДокЛаб"