Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- program ship;
- {$APPTYPE CONSOLE}
- uses
- SysUtils,
- Windows;
- Type
- TElev = record
- Avail: Boolean;
- NextFloor: Integer;
- end;
- TStairs = record
- Avail: Boolean;
- NextFloor: Integer;
- end;
- TWay = record
- Color: string[50];
- Window: Boolean;
- Angle: integer;
- Side: string;
- Steps: integer;
- ChRoom: integer; //1 - left; 2 - right
- Room: Boolean;
- Corridor: Boolean;
- CurrFloor: integer;
- Elevator: TElev;
- Stairs: TStairs;
- end;
- TArrWay = array[1..21] of TWay;
- Var
- i:integer;
- check:boolean;
- colornum, location:char;
- myway:TArrWay;
- startPos:integer;
- color:string;
- procedure fillArray(var way:TArrWay);
- var
- i:integer;
- begin
- //room without window
- way[1].Color:='Green';
- way[1].Angle:=0; way[1].Steps:=10;
- way[1].ChRoom:=-1; way[1].Room:=True;
- way[1].CurrFloor:=5;
- way[2].Color:='Green'; way[2].Angle:=45; way[2].Side:='left';
- way[2].Steps:=8; way[2].CurrFloor:=5;
- way[2].Corridor:=True;
- //enter elevator fl5
- way[3].Color:='Green';
- way[3].Elevator.Avail:=True; way[3].Elevator.NextFloor:=3;
- //exit elevator fl3
- way[4].Color := 'Gray'; way[4].Angle:=0; way[4].Steps:=25;
- way[4].ChRoom:=-1; way[4].Corridor:=True; way[4].CurrFloor:=3;
- //laboratory
- way[5].Room:=True; way[5].Window:=True;
- way[5].ChRoom:=2;
- way[5].CurrFloor:=3; way[5].Color:='Gray';
- way[6].Color:='Gray'; way[6].Angle:=0; way[6].Steps:=10;
- way[6].Corridor:=True; way[6].CurrFloor:=3;
- way[7].Color:='Gray'; way[7].Angle:=45; way[7].Side:='left';
- way[7].Corridor:=True; way[7].CurrFloor:=3; way[7].Steps:=8;
- way[8].Color:='Gray'; way[8].Angle:=90; way[8].Side:='left';
- way[8].Steps:=20; way[8].Corridor:=True; way[8].CurrFloor:=3;
- way[9].Color:='Gray'; way[9].Angle:=45; way[9].Side:='left';
- way[9].Steps:=36; way[9].Corridor:=True; way[9].CurrFloor:=3;
- //black room
- way[10].Color:='Black'; way[10].Window:=True; way[10].Room:=True;
- way[10].ChRoom:=2; way[10].CurrFloor:=3;
- way[11].Color:='Metallic'; way[11].Angle:=0;
- way[11].Steps:=12;way[11].Corridor:=True;
- way[11].CurrFloor:=3;
- way[12].Color:='Metallic';way[12].Angle:=45;way[12].Side:='right';
- way[12].Steps:=48;way[12].Corridor:=True;way[12].CurrFloor:=3;
- //enter stair fl3
- way[13].Stairs.Avail:=True; way[13].Stairs.NextFloor:=2;
- way[13].Color:='Black';
- //exit stair fl2
- way[14].Angle := 0; way[14].Color:='Black'; way[14].ChRoom:=1;
- way[14].Corridor:=True; way[14].Steps:=50; way[14].CurrFloor:=2;
- way[15].Color:='Black'; way[15].Angle:=45; way[15].Side:='right';
- way[15].Steps:=18; way[15].Corridor:=True; way[15].CurrFloor:=2;
- way[16].Color:='Black'; way[16].Angle:=90; way[16].Side:='right';
- way[16].Steps:=18; way[16].Corridor:=True; way[16].CurrFloor:=2;
- way[17].Color:='Black'; way[17].Angle:=45; way[17].Side:='right';
- way[17].Steps:=48; way[17].Corridor:=True; way[17].CurrFloor:=2;
- //enter elevator fl2
- way[18].Color:='Black'; way[18].Elevator.Avail:=True;
- way[18].Elevator.NextFloor:=1;
- //exit elevator fl1
- way[19].Angle:=0; way[19].Color:='Dark'; way[19].Steps:=52;
- way[19].Corridor:=True; way[19].CurrFloor:=1;
- //
- way[20].Color:='Dark'; way[20].Steps:=60; way[20].Angle:=45;
- way[20].Side:='right'; way[20].Corridor:=True;
- //exit
- way[21].CurrFloor:=0;
- end;
- procedure typeWay(way:TArrWay; startPos:integer);
- var
- i:integer;
- begin
- for i := startPos to length(way) do
- begin
- if (way[i].Room) and (not (way[i].ChRoom in [1,2])) then
- writeln('Leave the room.')
- else
- if (way[i].Room) and (way[i].ChRoom in [1,2]) then
- case way[i].ChRoom of
- 1: writeln('Leave the room through the left door.');
- 2: writeln('Leave the room through the right door.');
- end;
- if way[i].Corridor then
- begin
- case way[i].Angle of
- 0: writeln('Walk ', way[i].Steps,' straight.');
- 45,90: writeln('Turn ',way[i].Angle,' degrees ',way[i].Side,' and walk ', way[i].Steps,' straight.');
- end;
- if way[i+1].Room then
- writeln('Enter the room.');
- end;
- if way[i].Elevator.Avail then
- writeln('Enter the elevator, go down to the ',way[i].Elevator.NextFloor,' floor and leave him.');
- if way[i].Stairs.Avail then
- writeln('Go down the stairs to the ',way[i].Stairs.NextFloor,' floor.');
- end;
- writeln('Open the iron door.');
- writeln('You are free!');
- end;
- begin
- fillArray(myway);
- writeln('Once strolling in a grove, you discovered a new alien ship has just landed.');
- writeln('Natural curiosity convinces you to go inside.');
- writeln('The aliens who appeared, without showing the slightest friendliness..');
- writeln('...silently lead you to an empty office and leave you there.');
- writeln('One fine day you ran away from your room and started looking for a way out.');
- writeln('After a couple of minutes, you realized that you were lost...');
- writeln('===============================================================================');
- writeln(' ');
- writeln(' ESCAPE ');
- writeln(' ');
- writeln('===============================================================================');
- writeln('What the color of the walls on the floor?');
- writeln('1 - Green');
- writeln('2 - Black');
- writeln('3 - Gray');
- writeln('4 - Metallic');
- writeln('5 - Dark');
- repeat
- readln(colornum);
- until (colornum in ['1'..'5']);
- case colornum of
- '1': color := 'Green';
- '2': color := 'Black';
- '3': color := 'Gray';
- '4': color := 'Metallic';
- '5': color := 'Dark';
- end;
- writeln('Where are you at?');
- writeln('1 - Room');
- writeln('2 - Corridore');
- writeln('3 - Elevator');
- writeln('4 - Stairs');
- repeat
- readln(location);
- case location of
- '1':
- begin
- for i := 1 to length(myway) do
- begin
- if (myway[i].Room) and (myway[i].Color <> color) then
- begin
- check := False;
- end
- else
- if (myway[i].Room) and (myway[i].Color = color) then
- check := True;
- end;
- if check = False then
- writeln('There are no any rooms with this color. Look more carefully.');
- end;
- '2':
- begin
- check := True;
- end;
- '3':
- begin
- for i := 1 to length(myway) do
- begin
- if (myway[i].Elevator.Avail) and (myway[i].Color <> color) then
- begin
- check := False;
- end
- else
- if (myway[i].Elevator.Avail) and (myway[i].Color = color) then
- check := True;
- end;
- if check = False then
- writeln('There are no any elevators with this color. Look more carefully.');
- end;
- '4':
- begin
- for i := 1 to length(myway) do
- begin
- if (myway[i].Stairs.Avail) and (myway[i].Color <> color) then
- begin
- check := False;
- end
- else
- if (myway[i].Stairs.Avail) and (myway[i].Color = color) then
- check := True;
- end;
- if check = False then
- writeln('There are no any stairs with this color. Look more carefully.');
- end;
- end;
- until (location in ['1'..'4']) and (check);
- for i := 1 to length(myway) do
- begin
- if (myway[i].Color = color) then
- case location of
- '1':
- begin
- if myway[i].Room then
- begin
- startPos := i;
- writeln(startPos);
- break;
- end;
- end;
- '2':
- begin
- if myway[i].Corridor then
- begin
- startPos := i;
- writeln(startPos);
- break;
- end;
- end;
- '3':
- begin
- if myway[i].Elevator.Avail then
- begin
- startPos := i;
- writeln(startPos);
- break;
- end;
- end;
- '4':
- begin
- if myway[i].Stairs.Avail then
- begin
- startPos := i;
- writeln(startPos);
- break;
- end;
- end;
- end;
- end;
- typeWay(myway, startPos);
- writeln('=======================================');
- writeln('Press "Enter" to exit...');
- readln;
- end.
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement