Написана на языке Паскаль игра "Дартс", после запуска можно видеть недочеты работы дротика. Как исправить? И можете подсказать, как сделать, чтобы присуждались очки, в зависимости от попадания дротика в мишень, и чтобы в ячейке с дротиками, дротик исчезал после того, как начинает свой полет.
| Код | program darts; uses graphabc; var //tochka,drotik,nzast,kzast,komnata,p ic:integer; mishen,tochka,drotik,nzast,kzast,ko mnata,pic:Picture; xd,yd,sd,kd,ynd:integer; xm,ym,vxm:integer; xt,yt:array[1..10] of integer; et,pt:array[1..10] of boolean; i,j,kt,score:integer; good:boolean; r:real; keypressed:boolean; procedure KeyDown(Key: integer); begin keypressed:=true; //При нажатии пробела,игрок кидает дротик в текущем направлении //При нажатии стрелок дротик еще не кинутый перемещается if sd=1 then case Key of //если появился 11 дротик, то конец игры VK_Space: if sd=1 then begin sd:=2; ynd:=yd; end; VK_Left: if (xd>=290) then xd:=xd-3; VK_Right: if (xd<=1010) then xd:=xd+3; VK_Up: if (yd>500) then yd:=yd-3; VK_Down: if (yd<635) then yd:=yd+3; end; end; procedure KeyUp(Key: integer); begin keypressed:=false; end; begin keypressed:=false; onkeydown:=keydown; onkeyup:=keyup; randomize; //Настраиваем размеры и положения окна setwindowsize(1338,696); centerwindow; setwindowcaption('Дартс'); //Загружаем отдельные картинки:нач.заставка,кон.заставка, мишень mishen:=new Picture('мишень.bmp'); mishen.Transparent:=true; drotik:=new Picture('дротик.bmp'); drotik.Transparent:=true; nzast:=new Picture('н.заставка.bmp'); nzast.Transparent:=true; kzast:=new Picture('к.заставка.bmp'); kzast.Transparent:=true; //Загружаем помещение komnata:=new Picture('помещение.bmp'); komnata.Transparent:=true; //Загружаем след от попадания дротика tochka:=new Picture('точка.bmp'); tochka.Transparent:=true; //Размещаем мишень в начальную позицию,задаем направление смещения xm:=330; ym:=255; vxm:=3; //Размещаем дротик,а также состояние(стоит или летит) xd:=300; yd:=635; sd:=1; score:=0;//1-стоит, 2-летит //Имеется 10 дротиков kd:=10; //Следов от попадания дротика еще нет kt:=0; for i:=1 to 10 do et[i]:=false; //Показываем начальную заставку и ждем нажатия любой клавиши setbrushcolor(clblack); fillrect(0,0,1338,696); nzast.draw(0,0); sleep(1000); repeat until KeyPressed; sleep(1000); //Включаем режим разделения видео страниц lockdrawing; repeat //=================================== ================================ //Показываем комнату komnata.draw(0,0); //Если есть точки на стенке, показываем их for i:=1 to 10 do if et[i] then if not pt[i] then tochka.draw(xt[i],yt[i]); //Показываем остаток дротиков setpencolor(clred); setbrushcolor(clgray); rectangle(50,560,255,610); for i:=1 to kd do drotik.draw(30+i*20,556,20,50); setbrushstyle(bsclear); setfontcolor(clwhite); setfontstyle(FSbold); setfontsize(16); textout(50,530,'Остаток:'); textout(500,50,'Очки: '+inttostr(score)); //Показываем мишень mishen.draw(xm,ym); //Если есть точки на мишени, показываем их for i:=1 to 10 do if et[i] then if pt[i] then tochka.draw(xm+xt[i],ym+yt[i]); //Показываем дротик drotik.draw(xd,yd); //Готовый кадр выводим в окно redraw; //Если летящий дротик, то перемещаем его //Долетев до мишени, он исчезает и оставляет точку //при этом появляется новый, неброшенный if sd=2 then begin yd:=yd-1; if yd<=ynd-250 then begin kd:=kd-1; sd:=1; r:=sqrt(sqr(xd+17-xm-65)+sqr(yd-ym-65)); case round® of 0..13:score:=score+50; 14..27:score:=score+40; 28..40:score:=score+30; 41..53:score:=score+20; 54..65:score:=score+10; end; for i:=1 to 10 do if et[i]=false then begin et[i]:=true; if r<=65 then begin xt[i]:=xd+10-xm; yt[i]:=yd-7-ym; pt[i]:=true; end else begin xt[i]:=xd+10; yt[i]:=yd-7; pt[i]:=false; end; yd:=635; break; end; end; end; //Мишень перемещается в тякущем направлении,а дойдя до стенок меняет его xm:=xm+vxm; if (xm<=330) or (xm>=915) then vxm:=-vxm; until kd=0; //Показываем конечную заставку setbrushcolor(clblack); fillrect(0,0,1338,696); kzast.draw(7,62); redraw; end.
|
|