Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Паскаль, Turbo Pascal, PascalABC.NET
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 16.12.2014, 10:40   #1
thedgehog
Новичок
Джуниор
 
Регистрация: 16.12.2014
Сообщений: 2
Восклицание Помогите, пожалуйста, исправить ошибки в программе

Написана на языке Паскаль игра "Дартс", после запуска можно видеть недочеты работы дротика. Как исправить? И можете подсказать, как сделать, чтобы присуждались очки, в зависимости от попадания дротика в мишень, и чтобы в ячейке с дротиками, дротик исчезал после того, как начинает свой полет.
thedgehog вне форума Ответить с цитированием
Старый 16.12.2014, 10:40   #2
thedgehog
Новичок
Джуниор
 
Регистрация: 16.12.2014
Сообщений: 2
По умолчанию

Код:
program darts;
uses graphabc;
var
  //tochka,drotik,nzast,kzast,komnata,pic:integer;
  mishen,tochka,drotik,nzast,kzast,komnata,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(r) 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.

Последний раз редактировалось Serge_Bliznykov; 16.12.2014 в 16:21.
thedgehog вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Помогите Исправить Ошибки в Программе Maxim_Burea Помощь студентам 5 26.09.2009 22:54
Помогите исправить ошибки в программе rar14 Общие вопросы C/C++ 1 20.04.2009 19:07
Помогите, пожалуйста, не могу исправить ошибки bunya Общие вопросы C/C++ 7 14.01.2009 22:28
помогите исправить ошибки в программе... VDK23 Помощь студентам 1 17.04.2008 13:05
Помогите исправить ошибки в программе Gambit90 Помощь студентам 1 20.12.2007 16:24