Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Паскаль, Turbo Pascal, PascalABC.NET
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 22.07.2011, 14:52   #1
boldoc
Пользователь
 
Регистрация: 22.07.2011
Сообщений: 11
Вопрос Как зациклить код?

Решили с другом сделать текстовый квест, вместе придумываем сюжет, а вот программирую я. Ознакомлен с паскалем на очень низком уровне, но кое что всё таки умею. Не могу зациклить код.


Код:
Program TextGame;
uses winCrt;
var y,x: real;
Begin
Writeln ('Куда пойти? право-1, прямо-2, лево-3');
Read (y);
if (y=1) then writeln ('Вы вошли в лес. Куда идти дальше? В глубь-1, Назад-2');
if (y=1) then read (x);
if (x=1) then writeln ('Вы вышли к землянке');
if (x=2) then тут я хочу сделать так чтоб при нажатии 2 т.е. Назад, программа начиналась сначала т.е. самый первый вопрос: Куда идти? есть вариант что можно просто переписать код на эту ветку, но это глупо и слишком много;
if (y=2) then writeln ('Вы вышли на поляну');
if (y=3) then writeln ('Вы вышли к ручью');
end.

делал repeat
until x=0;
помогло, но при возврате к вопросу: куда идти? при нажатии любой цифры он выдавал "Вы вышли к землянке" каждый раз, без разницы на какую цифру я нажал. Прошу помочь.



___________
Код нужно оформлять по правилам:
тегом [CODE]..[/СODE] (это кнопочка с решёточкой #)
Не забывайте об этом!
Модератор.

Последний раз редактировалось Serge_Bliznykov; 22.07.2011 в 15:31.
boldoc вне форума Ответить с цитированием
Старый 22.07.2011, 15:44   #2
_-Re@l-_
C++, Java
Старожил
 
Аватар для _-Re@l-_
 
Регистрация: 10.04.2010
Сообщений: 2,665
По умолчанию

Видите? Вы считываете с клавиатуры переменную y, а проверяете то x, то y.
Надо бы так
Код:
Uses CRT;
Var
     X : Integer;
Begin
        Clrscr;
        Write('Куда идти? 1- в глубь, 2-назад');
        Readln(X);
        Repeat
             Case X Of 
             1 : Writeln('Вы зашли в глубь');
             2 : Writeln('Вы пошли назад');
             End;             
             Readln(X);
       Until X = 0;
       Readln;
End.
Логика такая(повторюсь, именно логика - остальное ваше).
_-Re@l-_ вне форума Ответить с цитированием
Старый 22.07.2011, 15:53   #3
Alex11223
Старожил
 
Аватар для Alex11223
 
Регистрация: 12.01.2011
Сообщений: 19,500
По умолчанию

И вместо read/readln удобнее будет readkey
http://tpdn.ru/guide/pf/readkey/
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом.
Alex11223 вне форума Ответить с цитированием
Старый 22.07.2011, 16:13   #4
boldoc
Пользователь
 
Регистрация: 22.07.2011
Сообщений: 11
По умолчанию

хмм я переделал
Код:
Program TextGame;
uses winCrt;
var y,x: integer;
Begin
Writeln ('Куда пойти? право-1, прямо-2, лево-3');
Read (y);
if (y=1) then begin
         clrscr;
writeln ('Вы вышли в лес. В глубь-1 назад-2');
readln (x);
Repeat
     case x of
     1 : writeln ('Вы вышли к землянке');
     2 : writeln ('Вы вернулись назад');
     end;
     Readln (x);
until x=0;
if (y=2) then writeln ('Вы вышли на поляну');
if (y=3) then writeln ('Вы вышли к ручью');
end;
end.
только мне нужно чтобы было вот так:
Куда пойти? нажимаешь 1
Вы вышли в лес. В глубь-1, назад-2 нажимаешь 2
и переходит обратно на "Куда пойти?"


на readkey после того как разберусь попробую переделать.
boldoc вне форума Ответить с цитированием
Старый 22.07.2011, 16:46   #5
Alex11223
Старожил
 
Аватар для Alex11223
 
Регистрация: 12.01.2011
Сообщений: 19,500
По умолчанию

Мб лучше как-то так?
Код:
if (y=1) then begin
   write('Вы вошли в лес. ');
   a:=0;
   repeat
      write('Bыберите куда идти: 1 — вглубь, 2 — назад: ');
      readln(x);
      case x of
      1: a:=a+1;
      2: a:=a-1;
      end;
      case a of
      1: write('Вы пришли к ...');
      2: write('Вы пришли к ...');
      3: write('Вы пришли к ...');
      0: write('Вы вернулись ко входу в лес. ');
      end;
   until a:=-1;
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом.

Последний раз редактировалось Alex11223; 22.07.2011 в 16:55.
Alex11223 вне форума Ответить с цитированием
Старый 22.07.2011, 17:31   #6
boldoc
Пользователь
 
Регистрация: 22.07.2011
Сообщений: 11
По умолчанию

замысел понял, но ругается на
Код:
until a:=-1;
ошибка 40 данное выражение должно быть булевского типа(((
boldoc вне форума Ответить с цитированием
Старый 22.07.2011, 17:34   #7
Alex11223
Старожил
 
Аватар для Alex11223
 
Регистрация: 12.01.2011
Сообщений: 19,500
По умолчанию

Опечатка, там := вместо =
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом.

Последний раз редактировалось Alex11223; 22.07.2011 в 17:39.
Alex11223 вне форума Ответить с цитированием
Старый 22.07.2011, 18:49   #8
boldoc
Пользователь
 
Регистрация: 22.07.2011
Сообщений: 11
По умолчанию

Так заработало, но когда я я нажимаю 1 он выдаёт вы пришли к... и опять вопрос Куда идти? вглубь дальше((( а если сразу нажать 2 т.е. назат то он просто завершает программу(((
boldoc вне форума Ответить с цитированием
Старый 22.07.2011, 18:59   #9
Alex11223
Старожил
 
Аватар для Alex11223
 
Регистрация: 12.01.2011
Сообщений: 19,500
По умолчанию

Ну после того, как вышли из леса мы должны вернуться к "Куда пойти? право-1, прямо-2, лево-3". Наверно это тоже надо в цикле (только добавить 4 кнопку для выхода, а то бесконечно будем ходить или более конкретно определиться с содержанием квеста).
Цитата:
он выдаёт вы пришли к... и опять вопрос Куда идти? вглубь дальше(((
И? Почему грустный смайлик? Допишите, куда мы пришли вместо ...)
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом.
Alex11223 вне форума Ответить с цитированием
Старый 22.07.2011, 19:15   #10
boldoc
Пользователь
 
Регистрация: 22.07.2011
Сообщений: 11
По умолчанию

При нажатии 2 я хочу чтобы он начинал с начала т.е. выполнял 1 begin заново, можно так сделать? или нужно на каждую ветку квеста копировать по сто раз?
Код:
Program TextGame;
uses winCrt;
var y,x,a: integer;
Begin принажатии 2 программа продолжала работать с этого места
Writeln ('Куда пойти? право-1, прямо-2, лево-3');
Read (y);
if (y=1) then begin
   write('Вы вошли в лес. ');
      a:=0;
      repeat
      write('Bыберите куда идти: 1 — вглубь, 2 — назад');
      readln(x);
      case x of
      1: a:=a+1;
      2: a:=a-1;
      end;
      case a of
      1: write('Вы пришли к ...');
      2: write('Вы пришли к ...');
      3: write('Вы пришли к ...');
      0: write('Вы вернулись ко входу в лес. ');
      end;
     until a=-1;
if (y=2) then writeln ('Вы вышли на поляну');
if (y=3) then writeln ('Вы вышли к ручью');
end;
end.
boldoc вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как зациклить макрос? Alexdoc76 Microsoft Office Excel 9 02.07.2011 21:00
Зациклить прогу - как? boris-blade Общие вопросы .NET 1 25.03.2010 19:32
Как зациклить макрос? kapitel_bc@ukr.net Microsoft Office Excel 7 13.02.2010 23:48
Как правильно зациклить?) Roman_ PHP 3 01.05.2009 15:56