Игра "Открой двери". 4 двери, 4 ключа. Pascal.
Помогите, пожалуйста, написать игрушку. Осталось 6 лаб написать. На этой вот застрял. Креатива не хватает. Может кто уже сталкивался с такой?
Генерация случайных последовательностей чисел.
”Открой двери”. Перед играющим 4 запертые двери. Открыть все двери, имея 4 ключа, каждый из которых может подходить к нескольким дверям. Предлагается 10 попыток. Двери изображаются цифрами от 1 до 4, а ключи помечены буквами от А до D. За один ход играющий выбирает один ключ и пробует открыть любую запертую дверь. Соответствие между множеством дверей и множе-ством ключей устанавливается случайным образом.
Генерация случайных последовательностей чисел.
”Открой двери”. Перед играющим 4 запертые двери. Открыть все двери, имея 4 ключа, каждый из которых может подходить к нескольким дверям. Предлагается 10 попыток. Двери изображаются цифрами от 1 до 4, а ключи помечены буквами от А до D. За один ход играющий выбирает один ключ и пробует открыть любую запертую дверь. Соответствие между множеством дверей и множе-ством ключей устанавливается случайным образом.
нет никаких ограничений на то ко скольким дверям будет подходить ключ?
например если ключ А открывает двери 1, 2, 4, то логично что у них одинаковые замки, и не может существовать ключа. который бы открывал, на пример, двери 2 и 3...
и может ли быть такое что в наборе ключей попадаются одинаковые?
и можно ли одним ключём открыть несколько дверей. или после использования ключ "пропадает?
или могут существоать ключи А(открывает 1 и 4), В(открывает 1 и 2)?
сейчас напишу вот как
так как будто могут существовать ключи А(открывает 1 и 4), В(открывает 1 и 2), и после успешного использование с ключём ничего не происходит, и каждая дверь должна открываться хотябы одним ключём
сегодня сделаю если меня ничего не отвлечёт, ждите
например если ключ А открывает двери 1, 2, 4, то логично что у них одинаковые замки, и не может существовать ключа. который бы открывал, на пример, двери 2 и 3...
и может ли быть такое что в наборе ключей попадаются одинаковые?
и можно ли одним ключём открыть несколько дверей. или после использования ключ "пропадает?
или могут существоать ключи А(открывает 1 и 4), В(открывает 1 и 2)?
сейчас напишу вот как
так как будто могут существовать ключи А(открывает 1 и 4), В(открывает 1 и 2), и после успешного использование с ключём ничего не происходит, и каждая дверь должна открываться хотябы одним ключём
сегодня сделаю если меня ничего не отвлечёт, ждите
Обещал, сделал!
Алгоритм далеко не идеальный, но всё работает.... можете попробовать упростить, убрать чтонибудь лишнее, добавить чтонибудь своё...
В общем распоряжайтесь...
прошу
Вот както так)
Вопросы будут, пишите
Прикреплю исходник
Алгоритм далеко не идеальный, но всё работает.... можете попробовать упростить, убрать чтонибудь лишнее, добавить чтонибудь своё...
В общем распоряжайтесь...
прошу
Код: Выделить всё
program doors;
uses crt;
const count=4;
type num=1..count;
var locks:array[num,num] of 0..1; {dver,kluch}
OpenDoors:array[num] of boolean;
door,key:char;
IDoor,IKey:num;
t,done:0..10;
procedure CreateLocks;
var i,j:num;
k:0..count;
flag:boolean;
begin
randomize;
flag:=false;
for i:=1 to count do
begin
k:=0;
for j:=1 to count do
begin
locks[i,j]:=random(2);
if locks[i,j]=0 then inc(k);
end;
if k=4 then flag:=true;
end;
if flag=true then CreateLocks;
end;
function KeyToInt(k:char):num;
begin
case k of
'a':KeyToInt:=1;
'b':KeyToInt:=2;
'c':KeyToInt:=3;
'd':KeyToInt:=4;
else
begin
end;
end;
end;
function DoorToInt(k:char):num;
begin
case k of
'1' :D oorToInt:=1;
'2' :D oorToInt:=2;
'3' :D oorToInt:=3;
'4' :D oorToInt:=4;
else
begin
end;
end;
end;
function DoorOpen(d,k:num):boolean;
begin
if locks[d,k]=1 then DoorOpen:=true
else DoorOpen:=false;
end;
procedure DInit;
var i:num;
begin
t:=0;
done:=0;
for i:=1 to count do OpenDoors[i]:=false;
end;
begin
clrscr;
DInit;
CreateLocks;
writeln('Pered vami 4 dvery, u vas 4 klucha, i 10 popitok...');
repeat
writeln;
writeln('Viberete cluch (nazhmite a, b, c ili d) ');
key:=readkey;
writeln('Podoydite k dveri (nazhmite 1, 2, 3 ili 4) ');
door:=readkey;
writeln('Vi hotite popytatsy otkrit dver? (y/n)');
if readkey='y' then
begin
inc(t);
IKey:=KeyToInt(key);
IDoor:=DoorToInt(door);
if OpenDoors[IDoor]=false then
if DoorOpen(IDoor,IKey) then
begin
writeln('Vam udalos otkrit dver!');
OpenDoors[IDoor]:=true;
inc(done);
end
else writeln('Vam ne udalos otkrit dver...')
else
begin
writeln('Vi uzhe pitalis otkrit etu dver');
dec(t);
end;
end;
if done=4 then break;
writeln;
writeln('U vas esche ',10-t,' popitok');
until t=10;
if done=4 then writeln('Pozdravlaem vas s pobedoy!')
else writeln('Vi proigrali');
readln;
end.
Вопросы будут, пишите
Прикреплю исходник
- Вложения
-
[Расширение txt было запрещено, вложение больше недоступно.]
ТОж написал задачку-игру вашу с комментами - обращаться по ICQ 397097640
если что непонятно, откоменчу
хотя есйчас уже самому не очень нраивтся реальзация открывания двери
хотя есйчас уже самому не очень нраивтся реальзация открывания двери
Esgal: Странно, ругается на key:=readkey;
capta1n: Не могу вас найти, пишет, что юзера с таким номером не существует.
capta1n: Не могу вас найти, пишет, что юзера с таким номером не существует.
Gregory : дико извиняюсь, я ошибся в цифрах =))) извиняюсь - вот аська 397970640
какая версия компилятора?
на турбо паскале не помню каком всё нормально
МОжно заменить на readln(key);
на турбо паскале не помню каком всё нормально
МОжно заменить на readln(key);