Wingraph, отображается черный экран - Free Pascal
Формулировка задачи:
Хочу сделать в програме так, чтоб шарик улетал, но чтобы не было мерцания, решила использовать wingraph. Но при запуске программы открывается просто чорное окно. Подскажите, где у меня ошибки и как их исправить. Процедуры mouse i sharuk я написала отдельно, вот код главной части программы:
Uses Crt, Graph, wingraph; Var Gd, Gm, x, y, i : Integer; clip:boolean; //здесь идут процедуры Begin clrscr; InitGraph(Gd, Gm, ' '); If GraphResult <> grOk Then Halt(1); mouse(300,200); sharuk(300,200); x:=300; y:=200; for i:=1 to 100 do begin UpdateGraph(UpdateOff); setviewport(x+134,y+174, x+345,y-12,clip); setfillstyle(1, 3); bar(x+134,y+174, x+345,y-12); x:=x+1; y:=y-1; setviewport(x+134, y+174, x+345, y-12,clip); sharuk(x,y); UpdateGraph(UpdateNow); end; repeat until keypressed; closegraph end.
Решение задачи: «Wingraph, отображается черный экран»
textual
Листинг программы
begin gd := d8bit; gm := m800x600; InitGraph(Gd, Gm, ''); if GraphResult <> grOk Then Halt(1); mouse(300, 200); sharuk(300, 200); x := 300; y := 200; repeat UpdateGraph(UpdateOff); cleardevice; mouse(300, 200); x := x + 1; y := y - 1; if (x > getmaxx) or (y < 0) then begin x := 300; y := 200; end; sharuk(x, y); UpdateGraph(UpdateNow); delay(10); until keypressed; closegraph end.
Объяснение кода листинга программы
gd := d8bit;— Здесь переменнойgdприсваивается значениеd8bit. Это значение используется в дальнейшем для определения режима графики.gm := m800x600;— Здесь переменнойgmприсваивается значениеm800x600. Это значение используется в дальнейшем для определения режима графики.InitGraph(Gd, Gm, '')— Здесь функцияInitGraphинициализирует графическую библиотеку с использованием переменнойgdиgm. Пустая строка''передается в качестве сообщения об ошибке.if GraphResult <> grOk Then Halt(1);— Здесь проверяется, успешно ли инициализирована графическая библиотека. Если нет, программа завершается с ошибкой.mouse(300, 200);— Здесь функцияmouseустанавливает начальную позицию курсора в 300,200.sharuk(300, 200);— Здесь функцияsharukрисует точку в текущей позиции курсора.x := 300;— Здесь переменнойxприсваивается значение 300.y := 200;— Здесь переменнойyприсваивается значение 200.repeat— Здесь начинается цикл.UpdateGraph(UpdateOff);— Здесь функцияUpdateGraphобновляет графическую библиотеку с использованием параметраUpdateOff, который указывает, что изменения графики не будут немедленно отображаться.cleardevice;— Здесь функцияcleardeviceочищает текущее графическое окно.mouse(300, 200);— Здесь функцияmouseперемещает курсор в позицию 300,200.x := x + 1;— Здесь переменнойxприсваивается новое значение, равное текущему значениюxплюс 1.y := y — 1;— Здесь переменнойyприсваивается новое значение, равное текущему значениюyминус 1.if (x > getmaxx) or (y < 0) then— Здесь начинается условная конструкция. Если текущее значениеxбольшеgetmaxx(ширина экрана) или если текущее значениеyменьше 0 (вверхняя граница экрана), то выполняется блок кода внутри конструкции.x := 300;— Здесь переменнойxприсваивается значение 300, чтобы вернуться к начальной позиции курсора.y := 200;— Здесь переменнойyприсваивается значение 200, чтобы вернуться к начальной позиции курсора.sharuk(x, y);— Здесь функцияsharukрисует точку в текущей позиции курсора.UpdateGraph(UpdateNow);— Здесь функцияUpdateGraphобновляет графическую библиотеку с использованием параметраUpdateNow, который указывает, что изменения графики будут немедленно отображаться.delay(10);— Здесь функцияdelayзадерживает выполнение программы на 10 миллисекунд.until keypressed;— Здесь начинается цикл, который продолжается до тех пор, пока не будет нажата клавиша.closegraph— Здесь функцияclosegraphзакрывает графическую библиотеку.