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

> Прочтите прежде чем задавать вопрос!

1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code].
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!

> Змейка
Bokul
сообщение 5.03.2006 6:19
Сообщение #1


Гуру
*****

Группа: Пользователи
Сообщений: 1 117
Пол: Мужской
Реальное имя: Богдан

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


Проверьте пожалуйста код, вроде должно быть
9 звено у змейки, а выходит только 5.
Где ошибка unsure.gif

Код

uses crt;
const xmax=8;
      ymax=8;
var ch:char;
    i,j,first,last:byte;
    n:integer;
    x:array[0..xmax] of byte;
    y:array[0..ymax] of byte;
    begin
clrscr;
i:=1;
j:=1;
n:=0;
while ch<>#27 do
begin
inc(n);
gotoxy(i,j);
write('*');
ch:=readkey;
first:=n mod (xmax+1);
if first<xmax then last:=first+1
else last:=0;
    case first of
  0: begin x[0]:=i; y[0]:=j; end;
  1: begin x[1]:=i; y[1]:=j; end;
  2: begin x[2]:=i; y[2]:=j; end;
  3: begin x[3]:=i; y[3]:=j; end;
  4: begin x[4]:=i; y[4]:=j; end;
  5: begin x[5]:=i; y[5]:=j; end;
  6: begin x[6]:=i; y[6]:=j; end;
  7: begin x[7]:=i; y[7]:=j; end;
  8: begin x[8]:=i; y[8]:=j; end;
  end;  
  if n>=(xmax+1) then
    begin
    gotoxy(x[last],y[last]);
    write(' ');
    end;  
  if (ch=#77) and (i<80) then  inc(i); {right}
  if (ch=#75) and (i>1)  then  dec(i); {left}
  if (ch=#80) and (j<25) then  inc(j); {up}
  if (ch=#72) and (j>1)  then  dec(j); {down}
end;
end.


Сообщение отредактировано: Bokul - 5.03.2006 19:12


--------------------
Лао-Цзы :
Знать много и не выставлять себя знающим есть нравственная высота. Знать мало и выставлять себя знающим есть болезнь. Только понимая эту болезнь, мы можем избавиться от нее.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
 
 Ответить  Открыть новую тему 
Ответов(1 - 4)
volvo
сообщение 5.03.2006 11:11
Сообщение #2


Гость






uses crt;
const xmax=8;
ymax=8;
var ch:char;
i,j,first,last:byte;
n:integer;
x:array[0..xmax] of byte;
y:array[0..ymax] of byte;
begin
clrscr;
i:=1; j:=1;

n:=0;
while ch<>#27 do begin
inc(n);
gotoxy(i, j); write('*');
ch := readkey;

first := n mod (xmax+1);
if first < xmax then last:=first + 1
else last := 0;

x[first] := i; y[first] := j; { А это - просто, чтобы меньше набирать... }

if n>=(xmax+1) then begin
gotoxy(x[last],y[last]); write(' ');
end;

if ch = #0 then begin { <--- Вот тут была ошибка !!! }
ch := readkey;
if (ch=#77) and (i<80) then inc(i); {right}
if (ch=#75) and (i>1) then dec(i); {left}
if (ch=#80) and (j<25) then inc(j); {up}
if (ch=#72) and (j>1) then dec(j); {down}
end;
end;
end.
 К началу страницы 
+ Ответить 
мисс_граффити
сообщение 5.03.2006 16:26
Сообщение #3


просто человек
******

Группа: Модераторы
Сообщений: 3 641
Пол: Женский
Реальное имя: Юлия

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


все змеек пишут...
вот у меня тоже такое задание (курсовик).
правда, в Делфи.

а в этой программке смутило:
Код
if (ch=#77) and (i<80) then  inc(i); {right}
           if (ch=#75) and (i>1)  then  dec(i); {left}

то есть змейка сможет сразу поменять направление на 180 градусов?


--------------------
Все содержимое данного сообщения (кроме цитат) является моим личным скромным мнением и на статус истины в высшей инстанции не претендует.
На вопросы по программированию, физике, математике и т.д. в аське и личке не отвечаю. Даже "один-единственный раз" в виде исключения!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Bokul
сообщение 5.03.2006 19:20
Сообщение #4


Гуру
*****

Группа: Пользователи
Сообщений: 1 117
Пол: Мужской
Реальное имя: Богдан

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


Спасибо Volvo. !thanks.gif
Только один вопрос - чтo такое? unsure.gif
Цитата

ch = #0


Сообщение отредактировано: Bokul - 5.03.2006 19:42


--------------------
Лао-Цзы :
Знать много и не выставлять себя знающим есть нравственная высота. Знать мало и выставлять себя знающим есть болезнь. Только понимая эту болезнь, мы можем избавиться от нее.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
volvo
сообщение 5.03.2006 19:27
Сообщение #5


Гость






Символ с нулевым кодом... Дело-то все в том, что клавиши управления курсором, ну и некоторые другие, возвращают не обычный код, а расширенный: первый символ - нулевой (#0), а второй - именно то, что ты написал...

Вот и ловить нажатие этих клавиш нужно также (сначала - проверка на нулевой символ, а потом - анализ следующего за ним обычного)
 К началу страницы 
+ Ответить 

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

 



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