Помощь - Поиск - Пользователи - Календарь
Полная версия: Пробел по Паскалевски?
Форум «Всё о Паскале» > Pascal, Object Pascal > Теоретические вопросы
K Y S K A
Как задать ридкэй пробел???
volvo
Что значит "задать"?
Проверить, вернула ли ReadKey пробел? Или ждать до нажатия пробела?
K Y S K A
не ту меня програ считывает клавишу, ьесли на верх, то одно происходит, если вниз, то другое, а если пробел , то должно произойти третье, но я забыла, как пробел будет unsure.gif unsure.gif
volvo
#32
{ или просто }
' '
K Y S K A
Код
program igra;
uses crt;
const
left  = #75;
right = #77;
up    = #72;
down = #80;

var
x, y, b, i, g, f,d: integer;
c: char;
mineXe:array [1..100] of integer;
mineYe: array [1..100] of integer;
procedure net;
begin
    for i:= 1 to 10 do
     if (x=minexe[i]) and ( y=mineye[i]-1)or ((x=minexe[i]-2) and ( y=mineye[i]-1))  then begin
  textcolor(lightred);
  gotoxy(35,3); writeln('Mine was deleted!!!');
  readkey;
  clrsrc;
  minexe[i]:=0;
  mineye[i]:=0;
  end;
end;
procedure show_man;
begin
textcolor(yellow);
gotoxy(x, y+0); write(' O');
gotoxy(x, y+1); write('XXX');
gotoxy(x, y+2); write(' X');
gotoxy(x, y+3); write('X X');
end;

procedure fill;
begin
randomize;
for i:= 1 to 10 do begin
minexe[i]:=random(50);
mineye[i]:=random(50);
end;
end;

procedure boom;
begin
for i:=1 to 10 do begin
textcolor(red);
gotoxy(minexe[i], mineye[i]); write('@');
end;
end;
procedure min;
begin
for i:= 1 to 10 do begin
  if (x=minexe[i]) and ( y=mineye[i]-3)or ((x=minexe[i]-2) and ( y=mineye[i]-3))  then begin
  clrscr;
  textcolor(lightred);
  gotoxy(35,3); writeln('You are dead!!!');
  textcolor(lightgray);
     readkey; halt;
  end;
end;

end;


begin
clrscr;
gotoxy(35,3);  writeln('Choose level:');
gotoxy(35,4);  writeln('1. Legko');
gotoxy(35,5);  writeln('2. Slozno');
read(d);
case d of
1: d:=150;
2: d:=50;
end;
b := 0;
x :=5; y :=20;
fill;
show_man;
boom; min;

repeat
  c:=readkey;
  case c of

    #0:
    case readkey of
left : dec(x);
right: inc(x);
up   : dec(y);
down : inc(y);
' ': net;
    end;

  end;

  clrscr;
  show_man;
  boom; min;
  b:=b+1;

until b=d;
readkey;
end.

не могу понять, почему не работает, она должна при подводе руки к мине и нажатии пробела должна удалять мину, а она этого не делает???
Ozzя
надо вынести обработку пробела, так как у курсорных клавиш код двойной, сначала #0, а затем #код_клавиши

c:=readkey;
case c of
#32 : net;
#0:
case readkey of
left : dec(x);
right: inc(x);
up : dec(y);
down : inc(y);
end;
K Y S K A
Ага спасибо, теперь работает!
K Y S K A
а КАК shIFT, CTRL, ALT, ENTER, F1 ПО ПАСКАЛЕВСКИ???
volvo
Enter = #13
F1 = #0 + #59

А вот остальные - это "регистровые" клавиши, тут другой подход нужен...
Смотри здесь: http://forum.pascalnet.ru/index.php?showt...indpost&p=31199
APAL
Код

Var
  KeyFlag : Byte absolute $0:$417;

{ Check Alt:  AltKeyPressed:=(KeyFlag and $08)     }
{   keyflag:    7 6 5 4 3 2 1 0                    }
{               і і і і і і і АД RightShift  $01   }
{               і і і і і і АДДД LeftShift   $02   }
{               і і і і і АДДДДД Ctrl        $04   }
{               і і і і АДДДДДДД Alt         $08   }
{               і і і АДДДДДДДДД ScrollLock  $10   }
{               і і АДДДДДДДДДДД NumLock     $20   }
{               і АДДДДДДДДДДДДД CapsLock    $40   }
{               АДДДДДДДДДДДДДДД InsLock     $80   }
Alex7
APAL , Это чо такое?
volvo
Alex7, это распределение битов в байте, расположенном по адресу $0:$417, с помощью которого контролируются нажатия Регистровых кнопок...
Alex7
А можно чуть подробней рассказать, или сказать где прочитать про дресс $0:$417
cool.gif
volvo
Наверху есть ссылка...
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.