Как реализовать одновременное движение двух объектов - 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.

Объяснение кода листинга программы

  1. Используется библиотека графики crt и функция detect из библиотеки graph.
  2. Переменные ch, xenemy, yenemy, oldxenemy, oldyenemy, xbullet, ybullet, xcanon, ycanon, oldxcanon, oldycanon, canonsize и enemysize определены и инициализированы.
  3. Координаты врагов (xenemy, yenemy) и пушки (xcanon, ycanon) заданы начальными значениями.
  4. Враги и пушка имеют разные размеры (enemysize и canonsize).
  5. Основной игровой цикл while true do выполняется до тех пор, пока пользователь не нажмет клавишу #27 (пробел), после чего программа завершается.
  6. Внутри цикла while выполняются следующие действия:
    • Считывается текущее значение клавиши (ch) и сохраняется в переменной.
    • Проверяется, была ли нажата клавиша #32 (пробел). Если да, то выполняется определенный код.
    • Проверяется, была ли нажата клавиша #0 (заглавная буква). Если да, то считывается новое значение клавиши (ch) и сохраняется в переменной.
    • Проверяются клавиши #72, #80, #75 и #77. Если одна из них была нажата, то выполняется соответствующий код для движения врагов или пушки.
    • После выполнения всех действий, связанных с движением, выполняется код для обновления положения врагов и пушки на экране.
  7. После завершения игрового цикла читается символ новой строки (readln) и закрывается графический интерфейс (closegraph).

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

13   голосов , оценка 4.154 из 5
Похожие ответы