{21_OOP er lavet af Mikael Mortensen 1994 - mikael@cinderella.dk} PROGRAM trylle; { object udgave } USES crt; TYPE TrylleNr = OBJECT listen : ARRAY(.1..21.) OF 1..21; x_liste : ARRAY(.1..7.) OF 1..7; y_liste : ARRAY(.8..14.) OF 8..14; z_liste : ARRAY(.15..21.) OF 15..21; rekke,gang : 0..3; PROCEDURE init; PROCEDURE udskriv_tal; PROCEDURE hvilken_rekke; PROCEDURE start; PROCEDURE fundet; END; VAR TrNr : TrylleNr; {----------------------------------------------------------} PROCEDURE TrylleNr.init; VAR i : 1..21; BEGIN FOR i := 1 TO 7 DO x_liste(.i.) := i; FOR i := 8 TO 14 DO y_liste(.i.) := i; FOR i := 15 TO 21 DO { initialiser } z_liste(.i.) := i; FOR i := 1 TO 21 DO listen(.i.) := i; END;{TrylleNr.init} {----------------------------------------------------------} PROCEDURE TrylleNr.udskriv_tal; VAR i : 1..21; BEGIN WRITELN; FOR i := 1 TO 21 DO WRITE(listen(.i.),' '); WRITELN; WRITELN; GOTOXY(15,10);WRITE('V‘lg et tal mellem 1 og 21 og husk det! '); GOTOXY(15,11);WRITE('Du bliver spurgt 3 gange om hvor nummeret er.'); GOTOXY(15,13);WRITE('N†r du er klar s† tryk .'); READLN; END;{TrylleNr.udskriv_tal} {----------------------------------------------------------} PROCEDURE TrylleNr.hvilken_rekke; VAR i,x : 1..22; nr : 1..3; {- - - - - - - - - - - - - - - - - - - - - - - - - - - - - } PROCEDURE nummer; BEGIN TEXTCOLOR(LightGray); WRITE(' R‘kke nr '); TEXTCOLOR(LightGray + Blink); { lidt gejl } WRITE(nr,'. '); NORMVIDEO; INC(nr); END;{nummer} {- - - - - - - - - - - - - - - - - - - - - - - - - - - - - } BEGIN i := 22; x := 1; REPEAT DEC(i); x_liste(.x.) := listen(.i.); DEC(i); y_liste(.x + 7.) := listen(.i.); { tallene bliver delt i 3 arrays } DEC(i); z_liste(.x + 14.) := listen(.i.); INC(x); UNTIL i = 1; WRITELN; nr := 1; nummer; FOR i := 1 TO 7 DO WRITE(x_liste(.i.),' '); { udskriv r‘kkerne } WRITELN; WRITELN; nummer; FOR i := 8 TO 14 DO WRITE(y_liste(.i.),' '); WRITELN; WRITELN; nummer; FOR i := 15 TO 21 DO WRITE(z_liste(.i.),' '); WRITELN; WRITELN; TEXTCOLOR(LightGray); WRITE(' ',gang,' gang. Hvilken r‘kke er dit nummer i? (0 Afbryder): '); INC(gang); { t‘l op } READLN(rekke); IF rekke > 3 THEN rekke := 0; { m† ikke overstige 3 } CASE rekke OF { r‘kken bliver lagt i midten } 0 : BEGIN ClrScr; HALT; END; 1 : BEGIN FOR i := 8 TO 14 DO listen(.i.) := x_liste(.i - 7.); FOR i := 15 TO 21 DO listen(.i.) := y_liste(.i - 7.); FOR i := 1 TO 7 DO listen(.i.) := z_liste(.i + 14.); END; 2 : BEGIN FOR i := 8 TO 14 DO listen(.i.) := y_liste(.i.); FOR i := 15 TO 21 DO listen(.i.) := x_liste(.i - 14.); FOR i := 1 TO 7 DO listen(.i.) := z_liste(.i + 14.); END; 3 : BEGIN FOR i := 8 TO 14 DO listen(.i.) := z_liste(.i + 7.); FOR i := 1 TO 7 DO listen(.i.) := x_liste(.i.); FOR i := 15 TO 21 DO listen(.i.) := y_liste(.i - 7.); END; END; END;{TrylleNr.hvilken_rekke} {----------------------------------------------------------} PROCEDURE TrylleNr.start; VAR i : 0..3; BEGIN ClrScr; i := 0; gang := 1; REPEAT { der skal sp›rges 3 gange } hvilken_rekke; INC(i); UNTIL i = 3; END;{TrylleNr.start} {----------------------------------------------------------} PROCEDURE TrylleNr.fundet; BEGIN ClrScr; GOTOXY(10,5);WRITE('Hokus Pokus Fili Han Hund......');{ magisk trylle tale } GOTOXY(25,10);WRITE('Tallet er nr:'); TEXTCOLOR(Yellow); GOTOXY(39,10);WRITE(listen(.11.)); { tallet er fundet } NORMVIDEO; GOTOXY(1,23);WRITE('N†r chock''et over dette fantastiske nummer har lagt sig,'); GOTOXY(58,23);WRITE('s† tryk p† en tast'); GOTOXY(30,24);WRITE('(P)r›v igen,(S)lut'); END;{TrylleNr.fundet} {----------------------------------------------------------} VAR svar : CHAR; BEGIN TEXTCOLOR(LightGray); TEXTBACKGROUND(Black); REPEAT ClrScr; TrNr.init; TrNr.udskriv_tal; TrNr.start; TrNr.fundet; svar := READKEY; UNTIL UPCASE(svar) <> 'P'; ClrScr; END.