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

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

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 14.06.2018, 17:57   #1
Aлена
 
Регистрация: 25.12.2017
Сообщений: 9
По умолчанию [Pascal ABC] Что можно сделать, чтобы после окончания игры, окно с игрой закрывалось и пользователь переходил к меню? Может есть какой то оператор?

Что можно сделать, чтобы после окончания игры, окно с игрой закрывалось и пользователь переходил к меню? Может есть какой то оператор?

Код:
program Graphika;

Uses GraphABC;
var
  kol, v, raz, cordix, cordiy, k, x, y: integer;
  x1, y1, winx, winy, cordx, cordy: real;
  ch: char;
  f: text;

procedure Shablon(i, x, Nasechka, y: integer);{Процедура отрисовки шаблона}
begin
  
  Line(0, 300, 800, 300);     {Сама ось}  {Ось x}
  Line(800, 300, 780, 290);   {Кусок стрелки}                                  
  Line(800, 300, 780, 310);   {Кусок стрелки}
  
  Line(400, 0, 400, 600);     {Сама ось}  {Ось y}
  Line(400, 0, 380, 20);      {Кусок стрелки}                                   
  Line(400, 0, 420, 20);      {Кусок стрелки}                                   
  for i := 1 to 9 do          {Насечки}
  begin
    x := i * 80;              {Преобразование счетчика в пиксели}
    Line(x, 304, x, 296);            {Рисование текущей насечки}             
    TextOut((x - 5), 310, inttostr(Nasechka));   {Текст насечек}               
    Nasechka := Nasechka + 1;         {Переход к следующей насечке}            
  end;                                                                 
  for i := 0 to 9 do           {Насечки}
  begin{}  {}                                
    y := i * 60;                         {Преобразование счетчика в пиксели}     
    Line(396, y, 404, y);                    {Рисование текущей насечки}    
    TextOut(380, (y - 5), inttostr(Nasechka));   {Текст насечек}               
    Nasechka := Nasechka - 1;         {Переход к следующей насечке}        
  end;                                                  
end;

procedure Spravka(f: text);{процедура справки}        
var
  s: string;
begin
  assign(f, 'Spravka.txt');
  reset(f);
  while not eof(f) do 
  begin
    readln(f, s);
    writeln(s);
  end;
  readln;
end;


procedure Game(r: real; var k: integer; winx, winy, x, y, cordx, cordy: real);{Процедура игры}    
begin
  repeat
    read(x, y); {Считываем вариант}                                                 
    x1 := x + 5; {Модификация центра координат}                                         
    y1 := y + 5;                                                                        
    cordx := x1 * 80; {Преобразуем число в координату для рисования}                   
    cordy := y1 * 60;   
    
    r := sqrt(sqr(x - winx) + sqr(y - winy));
    raz := round(r);
    cordix := round(cordx);
    cordiy := round(cordy);
    case raz of             {Получаем число для CASE}
                            {В зависимости от полученного числа рисуем тот или иной кружок}  
      0: 
        begin{}
          Pen.Color := clGreen;                                                        
          Circle(cordix, (600 - cordiy), 5);   
          Pen.Color := clBlack;  {Возвращение цвета пера}
        end;                                                                        
      1: 
        begin{1..5 - Интервал для разницы меж вариантом и искомым}        
          Pen.Color := clRed;  {Назначаем цвет}                                       
          Circle(cordix, (600 - cordiy), 5); {Рисуем окружность с радиусом 5}                        
          Pen.Color := clBlack;  
        end;                                                                           
      2: 
        begin{}
          Pen.Color := clOrange;                                                         
          Circle(cordix, (600 - cordiy), 5);                                                           
          Pen.Color := clBlack;  
        end;                                                                                                                                               
      3..4: 
        begin{}
          Pen.Color := clBlue;                                                         
          Circle(cordix, (600 - cordiy), 5);                                                         
          Pen.Color := clBlack;  
        end;                                                                         
      5..99: 
        begin{}
          Pen.Color := clPurple;                                                       
          Circle(cordix, (600 - cordiy), 5);
          Pen.Color := clBlack;  
        end;                                                                           
    end;                                                                                   
    k := k + 1{Подсчет попыток}                                                           
  until (raz = 0) or (k > 9);                                                                              
  
end;

begin{Основная  программа}
  Randomize;  
  SetWindowSize(800, 600); {Задаем размер экрана}                                 
  
  ch := 'y';
  
  writeln('1 Запуск программы');
  writeln('2 Инструкция');
  writeln('3 Выход');
  repeat
    readln(v);
    
    case v of 
      1: 
        begin
          Pen.Color := clWhite;  {Очистка нижней части экрана}
          Rectangle(0, 0, 800, 100);
          Pen.Color := clBlack;{}
        end;
      2: Spravka(f);
      3: halt;
    end;
  until (v = 1) or (v = 4);
  {Подпрограмма отрисовки шаблона} {счетчик, обнуление преобразований, шаг насечек}
  repeat
    Clearwindow;
    Shablon(1, 0, -4, 0);   
    winx := random(10) - 5;{Рандомим число}
    winy := random(10) - 5; 
    kol := 0; {Обнуляем количество}{Обнуление разницы, координаты, вводимого, передача рандомного, количество}
    
    writeln(winx);
    writeln(winy);
    
    Game(0, kol, winx, winy, x, y, cordx, cordy); {Вызов процедуры игры}
    if raz = 0 then begin
      TextOut(420, 380, 'Вы угдали! Количество попыток составило');{Вывод информации}
      TextOut(420, 400, inttostr(kol));
    end
    else TextOut(420, 380, 'Вы не угадали');
    TextOut(420, 420, 'Хотите сыграть еще?(y/n)');
    readln(ch);
    readln;
  until ch = 'n';
end.

_____
Код программы нужно выделять (форматировать) тегами [CODE] (читать FAQ)
Модератор

Последний раз редактировалось Serge_Bliznykov; 14.06.2018 в 21:04.
Aлена вне форума Ответить с цитированием
Старый 14.06.2018, 21:07   #2
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
Сообщение от Aлена Посмотреть сообщение
Паскаль АВС
у Вас программа на Pascal ABC.NET
Serge_Bliznykov вне форума Ответить с цитированием
Старый 14.06.2018, 21:31   #3
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

переключиться из графического окна в обычное (консольное) уже не получится (ну, по крайней мере, я не знаю, как это сделать).
Но Вы можете организовать меню прямо в графическом окне.

посмотрите пример, как это сделано тут - http://studassistent.ru/pascal-abc-n...-pascalabc-net
и сделайте у себя таким же образом.
Serge_Bliznykov вне форума Ответить с цитированием
Старый 14.06.2018, 21:55   #4
Вадим Мошев

Старожил
 
Аватар для Вадим Мошев
 
Регистрация: 12.11.2010
Сообщений: 8,568
По умолчанию

Цитата:
Сообщение от Serge_Bliznykov Посмотреть сообщение
переключиться из графического окна в обычное (консольное) уже не получится (ну, по крайней мере, я не знаю, как это сделать).
Вот нашёл: http://pascal.net.ru/RestoreCrtMode
Вадим Мошев вне форума Ответить с цитированием
Старый 14.06.2018, 22:41   #5
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
Сообщение от Вадим Мошев Посмотреть сообщение
это для Turbo (Borland) Pascal. к PascalABC.NET это отношения не имеет.
Serge_Bliznykov вне форума Ответить с цитированием
Старый 15.06.2018, 00:49   #6
Вадим Мошев

Старожил
 
Аватар для Вадим Мошев
 
Регистрация: 12.11.2010
Сообщений: 8,568
По умолчанию

А оно не будет в PascalABC.NET работать?
Вадим Мошев вне форума Ответить с цитированием
Старый 15.06.2018, 09:27   #7
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
Сообщение от Вадим Мошев Посмотреть сообщение
А оно не будет в PascalABC.NET работать?
нет.
начиная с того, что в PascalABC.NET нет модуля Graph (есть GraphABC)
в нём нет (и нет необходимости) процедуры InitGraph().
Впрочем, как и многих остальных, начиная с OutText, CloseGraph
и заканчивая тем, что нет процедуры RestoreCrtMode;

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

я уже молчу о том, что Pascal ABC.NET - это полноценное Windows приложение, в нём можно создавать окна, использовать события мышки, клавиатуры, использовать системные функции (стандартное меню Windows) и т.д. и т.п.
Serge_Bliznykov вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
[Pascal ABC.NET] Пользователь вводит 10 чисел, программа показывает сумму самого маленького и самого большого числа. Есть код. Что я сделал не так? Николай_777 Помощь студентам 7 25.12.2017 13:29
Как запустить процесс в командной строке чтобы окно не закрывалось после завершения calypso Общие вопросы Delphi 4 22.02.2017 16:58
Как сделать чтобы окно закрывалось только после покидания курсором внешних границ окна Николаич Общие вопросы Delphi 5 16.12.2015 13:51
Что делать чтобы консольное окно не закрывалось? Аллаберди Visual C++ 6 19.08.2014 06:24
Хочу, чтобы окно не закрывалось после выполнения программы fs444 Общие вопросы C/C++ 7 22.09.2009 16:42