Как реализовать одновременное движение двух объектов - Turbo Pascal
Формулировка задачи:
Как реализовать одновременное движение двух объектов, один из которых управляется клавиатурой,а второй двигается сам. попрошу на примере.
Решение задачи: «Как реализовать одновременное движение двух объектов»
textual
Листинг программы
uses crt, graph; var ch:char; xenemy,yenemy:integer; oldxenemy,oldyenemy:integer; xbullet,ybullet:integer; xcanon,ycanon:integer; oldxcanon,oldycanon:integer; canonsize:integer; enemysize:integer; gd,gm:integer; begin gd:=detect; initgraph(gm,gd,'c:\bp\bgi'); canonsize:=40; enemysize:=20; xenemy:=30; yenemy:=20; xcanon:=GetMaxX div 2; ycanon:=GetMaxY + canonsize div 2; circle(xcanon,ycanon,canonsize); circle(xenemy,yenemy,enemysize); { игровой цикл } while true do begin oldxcanon:=xcanon; oldycanon:=ycanon; if not keypressed then begin oldxenemy:=xenemy; oldyenemy:=yenemy; { движение врага } setcolor(red); circle(xenemy,yenemy,enemysize); delay(50); setcolor(black); circle(oldxenemy,oldyenemy,enemysize); xenemy:=xenemy+5; if xenemy>GetMaxX-enemysize then xenemy:=enemysize; yenemy:=yenemy; end else begin ch:=readkey; if ch=#27 then exit; if ch=#32 then begin {сюда вставить обработку выстрела по пробелу} end; if ch=#0 then ch:=readkey; case ch of #72: { вверх} begin ycanon:=ycanon-1; end; #80: { вниз} begin ycanon:=ycanon+1; end; #75: { влево} begin xcanon:=xcanon-1; end; #77: { вправо} begin xcanon:=xcanon+1; end; end; {of case} { движение пушки } setcolor(white); circle(xcanon,ycanon,canonsize); delay(1); setcolor(black); circle(oldxcanon,oldycanon,canonsize); end; { of else} end; {of while} readln; closegraph; end.
Объяснение кода листинга программы
- Используется библиотека графики crt и функция detect из библиотеки graph.
- Переменные ch, xenemy, yenemy, oldxenemy, oldyenemy, xbullet, ybullet, xcanon, ycanon, oldxcanon, oldycanon, canonsize и enemysize определены и инициализированы.
- Координаты врагов (xenemy, yenemy) и пушки (xcanon, ycanon) заданы начальными значениями.
- Враги и пушка имеют разные размеры (enemysize и canonsize).
- Основной игровой цикл while true do выполняется до тех пор, пока пользователь не нажмет клавишу #27 (пробел), после чего программа завершается.
- Внутри цикла while выполняются следующие действия:
- Считывается текущее значение клавиши (ch) и сохраняется в переменной.
- Проверяется, была ли нажата клавиша #32 (пробел). Если да, то выполняется определенный код.
- Проверяется, была ли нажата клавиша #0 (заглавная буква). Если да, то считывается новое значение клавиши (ch) и сохраняется в переменной.
- Проверяются клавиши #72, #80, #75 и #77. Если одна из них была нажата, то выполняется соответствующий код для движения врагов или пушки.
- После выполнения всех действий, связанных с движением, выполняется код для обновления положения врагов и пушки на экране.
- После завершения игрового цикла читается символ новой строки (readln) и закрывается графический интерфейс (closegraph).
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д