Помощь - Поиск - Пользователи - Календарь
Полная версия: пытаюсь кое чего написать....
Форум «Всё о Паскале» > Pascal, Object Pascal > Написание игр
maklir
нужно, чтоб символ, например '*' перемещался по экрану при управлении с клавиатуры(не двигался постоянно, как в змейке, а делал шаг при нажатии и удержании клавиши) подскажите с чего начать
мисс_граффити
считываешь нажатый символ.
определяешь, какая это стрелка
затираешь старую *
выводишь новую * в месте в соответствии с тем, какую стрелку нажали

что из этого вызывает затруднения?
maklir
какого типа переменная, имеющаяя значение клавиши?
и можно ли попробовать оформить через 'case'
volvo
Не "имеющая значение клавиши", а хранящая ее код. Char, разумеется. И обрабатывать ее удобнее именно через Case. Посмотри в поиске по поводу совместного использования Case и ReadKey, я думаю ты найдешь много примеров, которые тебе помогут решить задачу...
maklir
большое спасибо, когда закончу, поделюсь творчеством)))))
Yevgeny
Ты спрашивал с чего начать, но это тебе уже подсказали... Я похожую задачу решал, и если нужно, то вот прикреплённый файл:
Нажмите для просмотра прикрепленного файла
Тока тут не звёздочка, а прямоугольник!!! smile.gif
maklir

uses crt;

  type har=record
 sila:integer;
 zawnog:integer;
 zawgol:integer;
 zawjiv:integer;
 zawpoyas:integer;
 end;
  const
   hero=#1;
  zombie=#2;
  zdr=#3;
  gold=#36;
    var  udar,spase,snap:char;zx,zy,Y,ud,X,n:integer;s,hero_damage,zombie_healse,zombie_d
amage,hero_healse:integer;
  i,j,hx,hy,mx,my,money:integer;Fh, Fz:file of har; rec:har ;
  {-----------------------------------------------------------------------}
   { procedure sozdanie;
     begin
     assign(fz,'zombie');
     rewrite(fz);
     with rec do
     begin
     write('sila');
     readln(sila);
     write(fz,rec);
     write('zawnog');
     readln(zawnog);
     write(fz,rec);
     write('zawgol');
     readln(zawgol);
     write(fz,rec);
     write('zawjiv');
     readln(zawjiv);
     write(fz,rec);
     write('zawpoyas');
     readln(zawpoyas);
     write(fz,rec);
     end;
     end;}


     procedure life;
     begin
      gotoxy(hx,hy);
      write(zdr);
     if(x=hx) and (y=hy) then
     begin
     write('healse');
     hero_healse:=hero_healse+15;
     hx:=random(10)+1;
     hy:=random(10)+1;
     end;
     mx:=hx+10;
     my:=hy+10;
          begin
      gotoxy(mx,my);
      write(gold);
     if(x=mx) and (y=my) then
     begin
     write('gold');
     money:=money+random(10)+1;
     hx:=random(10)+1;
     hy:=random(10)+1;
     end;
     end;
     end;
{----------------------------------------------------}
     procedure fight;
     begin

     repeat udar:= readkey;
     clrscr;
     writeln('udary: w-golova,s-nogi,a-jivot.d-poyas');
     write('zombie healse',zombie_healse,'/',hero_healse,'hero_healse');
     ud:=0;
     case udar of
     #119: ud:=1;
     #115: ud:=2;
     #97: ud:=3;
     #100: ud:=4;
     end;
     if (ud=1)or(ud=2)or(ud=3)or(ud=4) then
      begin
      hero_healse:=hero_healse-random(zombie_damage);
      zombie_healse:=zombie_healse-random(hero_damage);
      ud:=0;
      end;
      until(hero_healse<=0) or (zombie_healse<=0);
      if hero_healse>0 then
       begin
       clrscr;
       gotoxy(2,40);
       write('you win');
       n:=n+1;
       zx:=random(70)+1;
       zy:=random(20)+1;
        zombie_healse:=30;
       zombie_damage:=10;
       s:=0;
       end;
       if hero_healse<=0 then
       begin
       clrscr;
       gotoxy(40,10);
       write('game over   press enter');
       readln;
       snap:=#27;
       s:=2;
       end;
      end;
     procedure map;
     begin
     if (x=zx) and (y=zy) then
     begin
     gotoxy(10,40);
     writeln;
     writeln('est zombie press spase to fight');
     spase:=readkey;
     case spase of
     #32: s:=2
     end;
     if s=2 then
     begin
     clrscr;
     fight;
     end;
     end;
     end;

{---------------------------------------------------------}

  begin
{  sozdanie;}
  clrscr;
  money:=0;
  n:=0;
   hero_healse:=55;
    zombie_healse:=30;
    zombie_damage:=10;
    hero_damage:=15;
    my:=10;
    my:=15;
    zx:=10;
    zy:=20;
    hx:=10;
    hy:=10;
   y:=5;
   x:=5;
   textbackground(2);
  GoToXY(X,Y);
  textcolor(1);
  writeln(hero);
  snap:=readkey;
  Repeat snap:=readkey;

  textbackground(2);
   clrscr;
    gotoxy(60,1);
   write('chislo pobed=',n);
   gotoxy(1,1);
   write('health=',hero_healse);
   gotoxy(15,1);
   write('gold=',money);
    gotoxy(Zx,Zy);
  write(zombie);
   case snap of
  #72: y:=y-1;
  #80: y:=y+1;
  #75: x:=x-1;
  #77: x:=x+1;
  #102: s:=1;
   end;
  life;
  map;
  GoToXY(X,Y);
  writeln(hero);


  Until snap=#27;
  clrscr;

  end.
.

минусов много, но в перспективе создание и использование файлов с характеристиками юнитов, возможность игры на разных модулях(картах), может даже возможност выполнения квестов.
Yevgeny
Может для начала лучше заняться созданием движущихся zombie? да и не одного, и чтоб они тоже нападали, возможно даже плодились чтоб, а то так не интересно играть, проиграть неподдаваясь невозможно! smile.gif
Тогда и необходимость в картах отпадёт, просто играть будет интересней!!!
maklir
приму к сведению, хорошая идея)))
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.