Whiskerion
Ученик
- Регистрация
- 18 Янв 2011
- Сообщения
- 2
- Реакции
- 0
- Баллы
- 0
Проблема с Read и ReadKey
Возникла интересная для меня проблема.
Функция read и readln приостанавливает программу и ждет ввода строки (слова, числа, символы и т.д.).
Функция readkey приостанавливает программу и ждет нажатия клавиши.
Проблема заключается в том, что мне нужно что бы было так.
Программа ждет ввода строки, как read или readln, и при вводе строки продолжает программу по одной ветви, но при нажатии ключевой клавиши (например пробел) продолжает программу по другой ветви.
Мне посоветовали воспользоваться оператором case.
Но я не могу понять как )
Реализовать это надо в игре.
Проблема возникает в 64 строке.
Заранее спасибо за помощь!
(Игра:
Дано 10 карт. 1ый игрок берет любую карту, 2ой игрок может взять две соседних карты от той что взял 1ый игрок (если таковые есть) или же взять любую другую карту, выигрывает тот, кто возьмет последюю карту)
Возникла интересная для меня проблема.
Функция read и readln приостанавливает программу и ждет ввода строки (слова, числа, символы и т.д.).
Функция readkey приостанавливает программу и ждет нажатия клавиши.
Проблема заключается в том, что мне нужно что бы было так.
Программа ждет ввода строки, как read или readln, и при вводе строки продолжает программу по одной ветви, но при нажатии ключевой клавиши (например пробел) продолжает программу по другой ветви.
Мне посоветовали воспользоваться оператором case.
Но я не могу понять как )
Реализовать это надо в игре.
Проблема возникает в 64 строке.
Заранее спасибо за помощь!
(Игра:
Дано 10 карт. 1ый игрок берет любую карту, 2ой игрок может взять две соседних карты от той что взял 1ый игрок (если таковые есть) или же взять любую другую карту, выигрывает тот, кто возьмет последюю карту)
Код:
program game10;
uses crt;
const
probel=32;
yes=true;
no=false;
var
i,k,s,pl:integer;
cards:array [1..10] of integer;
player:array [no..yes] of string;
win,xod:boolean;
key:word;
procedure xodim(xod:boolean);
begin
repeat
write('Ходит ',player[xod],' игрок: ');
readln(pl);
if (pl<1) or (pl>10) then
writeln('Неверный ход, попробуйте снова')
else
if (cards[pl]=0) then
writeln('Карты нету на столе, возьмите другую карту');
if (cards[pl]<>0) and (pl>=1) and (pl<=10) then
cards[pl]:=0;
writeln('');
until ((pl>=1) and (pl<=10));
end;
procedure proveryaem(var win:boolean);
var
l,o:integer;
begin
o:=0;
for l:=1 to 10 do
if cards[l]=0 then
o:=o+1;
if o=10 then
win:=yes;
end;
begin
clrscr;
player[yes]:='первый';
player[no]:='второй';
xod:=yes;
for i:=1 to 10 do
cards[i]:=i;
writeln('Карты на столе: 1 2 3 4 5 6 7 8 9 10');
xodim(xod);
repeat
xod:=not xod;
if (cards[pl+1]<>0) and (cards[pl-1]<>0) and (pl-1<>0) and (pl+1<>11) then
begin
write('Карты на столе:');
for k:=1 to 10 do
if cards[k]=0 then
write(' ')
else
write(' ',cards[k]);
writeln('');
writeln('Вы можете, взять две соседние карты или одну любую карту');
writeln('Если желаете взять две соседние нажмите пробел');
key:=ord(readkey);
if key=probel then
begin
write('Берет две соседние карты ',cards[pl-1],' и ',cards[pl+1]);
writeln('');
cards[pl-1]:=0;
cards[pl+1]:=0;
end
else
xodim(xod);
proveryaem(win);
end
else
begin
write('Карты на столе:');
for k:=1 to 10 do
if cards[k]=0 then
write(' ')
else
write(' ',cards[k]);
writeln('');
xodim(xod);
proveryaem(win);
end;
until (win=true);
writeln('Карт больше нет');
writeln('Выйграл ',player[xod],' игрок');
while not keypressed do
end.