Создать в графическом режиме Pascal игру Сокровища - Turbo Pascal
Формулировка задачи:
Случайным образом разбросать сокровища (например,окружность) на экране.Реализовать движение паучка (любой граф объект) на экране.При попадании паучка на сокровище,сокровище исчезает (паучок его забрал).При этом увеличиваются очки игрока.
Управление паучком с клавиатуры.Количество очков записывать в файл.Меню для игры выводить из текстового файла.
Решение задачи: «Создать в графическом режиме Pascal игру Сокровища»
textual
Листинг программы
uses Crt, Graph; type p=record x,y:integer; end; var dx,dy,px,py,n:integer; a:array[1..36] of p; gd,gm,width,height:integer; key, Interval:integer; procedure NewFruit; var b:boolean; i:integer; begin repeat b:=true; px:=random(width); while px mod 10>0 do px:=px+1; py:=random(height); while py mod 10>0 do py:=py+1; if (px>width-20) or (py>Height-20) or (px<10) or (py<10) then b:=false else for i:=1 to high(a) do if (a[i].x=px) and (a[i].y=py) then b:=false; until b; SetColor(Red); SetFillStyle(SolidFill,Red); FillEllipse(px,py,10,10); end; procedure ErTail; begin SetFillStyle(SolidFill,Green); Bar(a[n].x,a[n].y,a[n].x+10,a[n].y+10); end; procedure NewStep; var i:integer; c:word; begin ErTail; for i:=n downto 2 do a[i]:=a[i-1]; c:=getpixel(a[1].x+dx div 2,a[1].y+dy div 2); a[1].x:=a[1].x+dx; a[1].y:=a[1].y+dy; SetFillStyle(SolidFill,Yellow); Bar(a[1].x,a[1].y,a[1].x+10,a[1].y+10); if (c=Red) or ( (a[1].x>=px-10) and (a[1].x<=px+10) and (a[1].y>=py-10) and (a[1].y<=py+10)) then begin SetColor(Green); SetFillStyle(SolidFill,Green); FillEllipse(px,py,11,11); SetFillStyle(SolidFill,Yellow); Bar(a[1].x,a[1].y,a[1].x+10,a[1].y+10); if n<high(a) then n:=n+1 else begin ErTail; SetColor(Brown); SetFillStyle(SolidFill,Brown); FillEllipse(px,py,4,4); end; a[n]:=a[n-1]; NewFruit; if n>18 then begin if Interval>50 then Interval:=Interval-5 else Interval:=50; end; end else if (c<>Green) and (c<>yellow) then begin closegraph; writeln('Приплыли'); Halt; end; end; procedure mHod(x,y:integer); begin if (dx=0) and (x<>0) then begin dx:=x;dy:=0;NewStep;end; if (dy=0) and (y<>0) then begin dy:=y;dx:=0;NewStep;end; end; begin Randomize; interval:=150; gd:=Detect; InitGraph(gd,gm,''); width:=getmaxx-10; height:=getmaxy; n:=1; a[1].x:=Width div 2; a[1].y:=Height div 2; dx:=10; dy:=0; SetFillStyle(SolidFill,Magenta); Bar(0,0,Width,Height); SetFillStyle(SolidFill,Green); Bar(10,10,Width-10,Height-10); NewFruit; repeat while not keypressed do begin delay(Interval);NewStep;end; if ReadKey=#0 then case ord(ReadKey) of 75:mHod(-10,0); 72:mHod(0,-10); 77:mHod(10,0); 80:mHod(0,10); end; until false; end.
Объяснение кода листинга программы
- В процедуре NewFruit создается новый фрукт в случайном месте на экране. Функция random используется для генерации случайного числа в заданном диапазоне. Переменные x и y используются для определения координат фрукта. Если координаты находятся вне допустимого диапазона, то создается новый фрукт.
- В процедуре ErTail удаляется хвост (если он есть) и рисуется бар в текущем положении курсора.
- В процедуре NewStep происходит следующее:
- Если предыдущий шаг был сделан, то копируются все ячейки после него.
- Рисуется бар в текущем положении курсора.
- Устанавливается цвет фона в желтый.
- Заполняется эллипс вокруг текущего положения курсора.
- Сбрасывается счетчик шагов.
- В процедуре mHod происходит следующее:
- Если текущая ось (x или y) равна нулю, то устанавливается новый шаг.
- Рисуется бар в текущем положении курсора.
- В начале программы выполняется инициализация графического режима, определение максимальных координат и создание массива для хранения информации о фруктах.
- В функции ReadKey считывается нажатая клавиша. Если нажата клавиша с кодом 0, то выходят из программы.
- В конце программы закрывается графический режим и выводится сообщение
Приплыли
, если было нажато слишком много клавиш без перемещения курсора.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д