Как заставить точки двигаться по нажатию клавиш? - Turbo Pascal
Формулировка задачи:
Здравствуйте, не пойму почему точки двигаются хаотично? Нужно чтобы при нажатии на стрелки вверх, вниз, влево, вправо точки двигались согласно нажатой клавише, а они двигаются рандомно. Помогите исправить.
Решение задачи: «Как заставить точки двигаться по нажатию клавиш?»
textual
Листинг программы
uses crt, graph; const kbEsc=#27; kbUp=#72; kbDown=#80; kbLeft=#75; kbRight=#77; StepX=10; StepY=20; type TPixel=object X, Y, Color: Integer; procedure Init(AX, AY, AColor: Integer); procedure Draw; procedure Hide; procedure MoveBy(DX, DY: Integer); end; procedure TPixel.Init; begin X:=AX; Y:=AY; Color:=AColor; Draw; end; procedure TPixel.Draw; begin PutPixel(X,Y,Color); end; procedure TPixel.Hide; begin PutPixel(X,Y,GetBkColor); end; procedure TPixel.MoveBy; begin Hide; Inc(X,DX); if X>GetMaxX then Dec(X,GetMaxX) else if X<0 then Inc(X,GetMaxX); Inc(Y,DY); if Y>GetMaxY then Dec(Y,GetMaxY) else if Y<0 then Inc(Y,GetMaxY); Draw; end; var p: array [1..100] of TPixel; gd, gm, i: Integer; k: Char; begin Randomize; gd:=Detect; InitGraph(gd,gm,''); if GraphResult<>grOk then begin WriteLn('Error: ',GraphErrorMsg(GraphResult)); Halt; end; OutText('Arrows - move, ESC - exit...'); for i:=Low(p) to High(p) do p[i].Init(Random(GetMaxX+1),Random(GetMaxY+1),1+Random(GetMaxColor)); repeat k:=ReadKey; if k=#0 then case ReadKey of kbUp: for i:=Low(p) to High(p) do p[i].MoveBy(0,-StepY); kbDown: for i:=Low(p) to High(p) do p[i].MoveBy(0, StepY); kbLeft: for i:=Low(p) to High(p) do p[i].MoveBy(-StepX,0); kbRight: for i:=Low(p) to High(p) do p[i].MoveBy( StepX,0); end; until k=kbESC; CloseGraph; end.
Объяснение кода листинга программы
- В начале кода используются библиотеки crt и graph.
- Константы kbEsc, kbUp, kbDown, kbLeft, kbRight определены для использования с клавишами на клавиатуре.
- Тип TPixel представляет точку на графике с полями X, Y и Color.
- Методы Init, Draw и Hide определены для объекта TPixel и используются для инициализации, рисования и скрытия точки соответственно.
- Метод MoveBy определен для объекта TPixel и используется для перемещения точки на графике.
- Переменная p представляет собой массив объектов TPixel, которые представляют точки на графике.
- Переменные gd и gm используются для работы с графическим дисплеем, а переменная i используется для итерации по массиву p.
- Код генерирует случайные координаты для каждой точки, чтобы убедиться, что они не выходят за пределы графика.
- Цикл repeat-until используется для чтения нажатий клавиш до тех пор, пока не будет нажата клавиша kbESC.
- Внутри цикла while считываются нажатия клавиш и выполняются соответствующие действия в зависимости от нажатой клавиши.
- После выхода из цикла while точка перемещается на график.
- Заключительные операции закрывают графический дисплей.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д