Страница 1 из 1
Игра "Открой двери". 4 двери, 4 ключа. Pascal.
Добавлено: 07 дек 2008, 20:24
Gregory
Помогите, пожалуйста, написать игрушку. Осталось 6 лаб написать. На этой вот застрял. Креатива не хватает. Может кто уже сталкивался с такой?
Генерация случайных последовательностей чисел.
”Открой двери”. Перед играющим 4 запертые двери. Открыть все двери, имея 4 ключа, каждый из которых может подходить к нескольким дверям. Предлагается 10 попыток. Двери изображаются цифрами от 1 до 4, а ключи помечены буквами от А до D. За один ход играющий выбирает один ключ и пробует открыть любую запертую дверь. Соответствие между множеством дверей и множе-ством ключей устанавливается случайным образом.
Re: Игра "Открой двери". 4 двери, 4 ключа. Pascal.
Добавлено: 07 дек 2008, 23:34
Esgal
нет никаких ограничений на то ко скольким дверям будет подходить ключ?
например если ключ А открывает двери 1, 2, 4, то логично что у них одинаковые замки, и не может существовать ключа. который бы открывал, на пример, двери 2 и 3...
и может ли быть такое что в наборе ключей попадаются одинаковые?
и можно ли одним ключём открыть несколько дверей. или после использования ключ "пропадает?
или могут существоать ключи А(открывает 1 и 4), В(открывает 1 и 2)?
сейчас напишу вот как
так как будто могут существовать ключи А(открывает 1 и 4), В(открывает 1 и 2), и после успешного использование с ключём ничего не происходит, и каждая дверь должна открываться хотябы одним ключём
сегодня сделаю если меня ничего не отвлечёт, ждите
Re: Игра "Открой двери". 4 двери, 4 ключа. Pascal.
Добавлено: 08 дек 2008, 01:16
Esgal
Обещал, сделал!
Алгоритм далеко не идеальный, но всё работает.... можете попробовать упростить, убрать чтонибудь лишнее, добавить чтонибудь своё...
В общем распоряжайтесь...
прошу
Код: Выделить всё
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.
Вот както так)
Вопросы будут, пишите
Прикреплю исходник
Re: Игра "Открой двери". 4 двери, 4 ключа. Pascal.
Добавлено: 08 дек 2008, 02:22
capta1n
ТОж написал задачку-игру вашу с комментами - обращаться по ICQ 397097640
Re: Игра "Открой двери". 4 двери, 4 ключа. Pascal.
Добавлено: 08 дек 2008, 13:00
Esgal
если что непонятно, откоменчу
хотя есйчас уже самому не очень нраивтся реальзация открывания двери
Re: Игра "Открой двери". 4 двери, 4 ключа. Pascal.
Добавлено: 09 дек 2008, 20:36
Gregory
Esgal: Странно, ругается на key:=readkey;
capta1n: Не могу вас найти, пишет, что юзера с таким номером не существует.
Re: Игра "Открой двери". 4 двери, 4 ключа. Pascal.
Добавлено: 09 дек 2008, 22:31
capta1n
Gregory : дико извиняюсь, я ошибся в цифрах =))) извиняюсь - вот аська 397970640
Re: Игра "Открой двери". 4 двери, 4 ключа. Pascal.
Добавлено: 10 дек 2008, 00:11
Esgal
какая версия компилятора?
на турбо паскале не помню каком всё нормально
МОжно заменить на readln(key);