Создание меню - PascalABC.NET
Формулировка задачи:
Помогите сделать так, чтобы после запуска "игры" можно было выйти обратно в "меню" или выполнялось завершение программы. Спаибо
Решение задачи: «Создание меню»
textual
Листинг программы
uses GraphABC; type tSharik=record {объявим тип запись - шарик, с полями} radius: integer;{радиус шара} cvet: Color;{цвет} dlina: integer;{длина шнура} koord_x: integer;{координата х точки подвеса} ugol: real;{угол от вертикальной оси} naprav: integer;{} x,y: integer;{текущие координаты центра шарика} end; const Skorost=5;{константа, регулирующая скорость колебаний, можно поменять, или вообще задавать самому} var n:integer;{кол. шариков} shariki:array of tSharik;{массив шариков} mouseDown : Boolean; procedure MouseClick(x,y,mb : integer); begin mouseDown := True; end; function input(x,y : integer; msg : string; cl : Color := clWhite) : integer; begin SetBrushColor(cl); TextOut(x, y, msg); Result := ReadLnInteger; TextOut(x, y, msg + ' ' + Result); SetBrushColor(clWhite); end; //процедура рисования шарика с нитью, procedure Narisovat(sharik:tSharik); begin var c:=sharik.cvet; setpencolor(clBlue);//цвет нити line(sharik.koord_x, 0, sharik.x, sharik.y);//нить - линия setpencolor(c);//цвет шарика setbrushcolor(c); circle(sharik.x, sharik.y,sharik.radius);//закрашенный круг end; //процедура смещения - колебания шарика procedure Dvigat(var sharik:tSharik); begin with sharik do//пока 1 шарик begin ugol:= ugol+naprav*skorost/dlina;//вычисляем угол //вычисляем текущие координаты центра x:= round( koord_x + (dlina+radius) * sin(ugol) ); y:= round( (dlina+radius) * cos(ugol) ); //определяем положение шарика по вертикали: //если коснулись границы экрана(она одна для всех шариков), меняем направление на обратное if (y<=radius) or (x<=radius) or (x+radius>=WindowWidth) then naprav:=-naprav; for var j:=0 to n-1 do//перебираем все шарики begin //определяем расстояние шарика до всех других var rasst:=sqrt(sqr(shariki[j].x-x)+sqr(shariki[j].y-y) ); if ((rasst<= radius+shariki[j].radius) and (rasst>radius/2)) then//если коснулись begin //шарик слева, направление -1, справа +1 if (x<shariki[j].x) then naprav:=-1 else naprav:=+1; shariki[j].naprav:= -naprav;//меняем направление после соприкосновения end; end; end; end; procedure StartGame; begin Window.Title := 'Введите начальные данные'; ClearWindow; n := input(10, 10, 'Количество шариков n ='); setlength(shariki,n); for var i:=0 to n-1 do{по количеству шаров} with shariki[i] do//задаем параметры очередного шарика begin radius := input(20, 30+40*i, 'Введите радиус шарика ' + (i+1) + ' :'); dlina := input(20, 50+40*i, ' Введите длинну нити ' + (i+1) + ' :'); koord_x:=(windowwidth div (n+1)) * (i+1);//точка крепления нити у верхней шраницы экрана cvet:= clrandom;//цвет ugol:=0;//начальный угол с вертикальной осью naprav:=1;//напрвление вправо end; Window.Title := 'Для выхода в основное меню, кликните мышкой!'; mouseDown := False; lockdrawing; repeat//собственно цикл рисования колеблющихся шариков clearwindow; for var i:=0 to n-1 do//все шарики Narisovat(shariki[i]);{рисуем цветом фона - стираем} sleep(100); for var i:=0 to n-1 do Dvigat(shariki[i]);{меняем положение} redraw; until mouseDown;{нажатие любой клавиши - выход из программы} UnlockDrawing; end; Procedure Help; begin Window.Clear; TextOut(10, 30, ReadAllText('Инструкция.txt')); SetBrushColor(clYellow); TextOut(10, 10, 'Нажмите Enter для выхода в главное меню.'); ReadLn; End; begin OnMouseDown := MouseClick; var k : Integer; repeat Window.Title := 'Выберите действие'; ClearWindow; SetBrushColor(clWhite); TextOut(10, 20, 'Выберите действие'); TextOut(10, 40, '1 - Игра'); TextOut(10, 60, '2 - Инструкция'); TextOut(10, 80, '3 - Выход'); k := input(10, 100, 'Введите номер действия:', clYellow); case k of 1 : StartGame; 2 : Help; end; until k=3; Window.Close; end.
Объяснение кода листинга программы
- Объявлен тип записи
tSharik
для представления шарика с полями: радиус, цвет, длина нити, координаты точки подвеса, угол, направление и текущие координаты центра. - Константа
Skorost
регулирует скорость колебаний шариков. - Переменная
n
представляет количество шариков. - Массив
shariki
содержит информацию о каждом шарике. - Переменная
mouseDown
используется для определения, нажата ли кнопка мыши. - Функция
input
используется для ввода данных с клавиатуры, включая число и строку. - Процедура
Narisovat
рисует шарик с нитью, используя заданные параметры. - Процедура
Dvigat
изменяет положение шарика в соответствии с его текущим направлением и углом. - Процедура
StartGame
запускает игру, запрашивая у пользователя начальные данные для каждого шарика. - Процедура
Help
отображает инструкцию, а также позволяет пользователю выйти в основное меню. - Основная программа содержит цикл, который повторяется до тех пор, пока пользователь не выберет действие для выполнения.
- Окно программы имеет заголовок, который изменяется в зависимости от выбранного действия.
- При выборе действия
1 - Игра
программа начинает рисовать колеблющиеся шарики. - При выборе действия
2 - Инструкция
программа отображает инструкцию. - При выборе действия
3 - Выход
программа закрывается.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д