Как только шар прикоснется к какой-либо линии - закончить игру - Free Pascal
Формулировка задачи:
Здравствуйте.
Вот есть код движения шара вверх, и управления им.
Нужно сделать чтобы он мог проходить над прямоугольником. Ну как только он прикоснется к какой либо линии, все стиралось, и была надпись 'Game Over'
Помогите пожалуйста.
uses wincrt,graph; var x,y,r:integer; c:char; begin initgraph(x,y,''); x:=getmaxX div 2; r:=5; y:=getmaxY-r; setcolor(12); setfillstyle(1,12); fillellipse(x,y,r,r); repeat rectangle(680,985,1000,400); delay(100); cleardevice; y:=y-5; setfillstyle(1,12); fillellipse(x,y,r,r); outtextXY(getmaxX div 2-50,10,'vyhod -Esc'); if keypressed then begin c:=readkey; if c=#0 then c:=readkey; case c of #75:if x>r then x:=x-5; #77:if x<getmaxX-r then x:=x+5; #27:exit; end; end; until (y<r)or(c=#27); end.
Решение задачи: «Как только шар прикоснется к какой-либо линии - закончить игру»
textual
Листинг программы
uses wincrt,wingraph,math; var x,y,r,endgame:integer; c:char; procedure drball(x,y:integer;dr:boolean); begin setcolor(12*ord(dr)); setfillstyle(1,12*ord(dr)); fillellipse(x,y,r,r); end; begin randomize; x:=Vga; y:=VgaHi; initgraph(x,y,''); x:=getmaxX div 2; r:=5; y:=getmaxY-r; drball(x,y,true); setfillstyle(1,green); Bar(getmaxx div 2+50,getmaxy div 2,getmaxx div 2+100,getmaxy); Bar(getmaxx div 2-100,getmaxy div 2,getmaxx div 2-50,getmaxy); Bar(getmaxx div 2+50,0,getmaxx div 2+100,getmaxy div 2 - 50); Bar(getmaxx div 2-100,0,getmaxx div 2-50,getmaxy div 2 - 50); setfillstyle(1,yellow); Bar(getmaxx-10,10,getmaxx,20); endgame:=0; repeat outtextXY(getmaxX div 2-50,10,'vyhod -Esc'); if keypressed then begin drball(x,y,false); c:=readkey; if c=#0 then c:=readkey; case c of #72:if y>r then y:=y-5; #80:if y<getmaxy-r then y:=y+5; #75:if x>r then x:=x-5; #77:if x<getmaxX-r then x:=x+5; #27:begin endgame:=2;break;end; end; end; drball(x,y,false); if y>getmaxy div 2-r then x:=x+sign(random(4)-2) else x:=x+random(4)-2; if x>getmaxx-r then x:=getmaxx-r; if x<r then x:=r; drball(x,y,true); if (getpixel(x+r+1,y)=green) or (getpixel(x-r-1,y)=green) or (getpixel(x,y+r+1)=green) or (getpixel(x,y-r-1)=green)then begin endgame:=1;break;end; if (getpixel(x+r+1,y)=yellow) or (getpixel(x-r-1,y)=yellow) or (getpixel(x,y+r+1)=yellow) or (getpixel(x,y-r-1)=yellow) then begin endgame:=3;break;end; delay(1); until (y<r)or(c=#27); cleardevice; setcolor(35); case endgame of 1:outtextXY(getmaxX div 2-50,10,'Game over-You toch a wall. Press Esc'); 2:halt; 3:outtextXY(getmaxX div 2-50,10,'Game over-You Win. Press Esc'); end; repeat until readkey=#27; end.
Объяснение кода листинга программы
- Объявлены переменные: x, y, r, endgame, c, а также процедура drball.
- Инициализированы переменные: x, y, r, а также начат цикл игры.
- Выведены подсказки для управления: движение по горизонтали - стрелочки, движение по вертикали - клавиши со знаками
+
и-
, выход из игры - клавиша Esc. - Если нажата клавиша Esc, то игра завершается.
- Если шарик касается линии, то игра завершается.
- Если шарик уходит за пределы экрана, то игра завершается.
- Цвет шарика меняется в зависимости от того, касается ли он линии.
- После завершения игры выводится соответствующее сообщение.
- Если игра не завершена, то продолжается отображение шарика и изменение его положения.
- Проверяется, коснулся ли шарик линии.
- Если шарик касается линии, то игра завершается.
- Если шарик касается границы экрана, то игра завершается.
- Если шарик касается линии или границы экрана, то игра завершается.
- Проверяется, нажата ли клавиша Esc.
- Если нажата клавиша Esc, то игра завершается.
- Цвет шарика меняется в зависимости от того, касается ли он линии.
- Если шарик касается линии, то игра завершается.
- Если шарик касается границы экрана, то игра завершается.
- Проверяется, нажата ли клавиша Esc.
- Если нажата клавиша Esc, то игра завершается.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д