PROGRAM BILD; { } { Spielprogramm SLIDER } { Letzte Aenderung: 21.07.1991 } { } LABEL LOOP1,LOOP2; CONST LH =28; LEER =' '; VAR ZEILE1,ZEILE2 :STRING[79]; F,I,J,ASCII :INTEGER; FELD :ARRAY[1..14] OF STRING[40]; BILD :ARRAY[1..14,1..40] OF INTEGER; LV,MM,MO,PU,AE,MA :INTEGER; TM,WE,W1,W2,MN,W3 :INTEGER; HE,LAENGE :INTEGER; XI,DJ,HM,VM :INTEGER; STI,TIM,TIS :INTEGER; FE :STRING[1]; LEVEL :STRING[2]; BL :STRING[3]; H1,H2 :STRING[40]; INPUT :CHAR; { } {$I INKEY.MOD} { } PROCEDURE TIMER; { } VAR SEK :INTEGER ABSOLUTE $42; SEK1,SEK2 :INTEGER; BEGIN SEK2:=(SEK DIV 16)*10+(SEK MOD 16); IF (STI=0) THEN BEGIN SEK1:=SEK2; STI:=1; TIS:=TM MOD 60; TIM:=TM DIV 60; TM:=TM+1 END ELSE BEGIN IF (SEK10)) THEN BEGIN SEK1:=SEK2; TIS:=TIS-1; STI:=STI+1; IF TIS<0 THEN BEGIN TIS:=59; TIM:=TIM-1; END; END; END; END; { } PROCEDURE FELDLESEN; { } BEGIN GOTOXY(4,4); WRITE('Level : ',LV:2,' Bild : ',BL,' Men : ',MM:2); GOTOXY(4,26); WRITE('Moves : Times : '); GOTOXY(4,28); WRITE('Pushes : '); GOTOXY(0,7); WRITELN; MA:=32; MO:=0; PU:=0; FOR I:=1 TO 14 DO IF FELD[I]<>'' THEN BEGIN WRITE(' '); LAENGE:=LENGTH(FELD[I]); FOR J:=1 TO LAENGE DO BEGIN FE:=COPY(FELD[I],J,1); IF FE='o' THEN BEGIN AE:=AE-1; BILD[I,J]:=128+79; WRITE('O'); END ELSE BEGIN BILD[I,J]:=ORD(FE); WRITE(FE); END END; WRITE(^M,^J); END ELSE WRITE(^M,^J); STI:=0; TIMER; END; { } PROCEDURE MANN; { } BEGIN MN:=WE; BILD[HM+DJ,VM+XI]:=77; IF MA<>42 THEN MA:=32; BILD[HM,VM]:=MA; MA:=MN; { AUF BILDSCHIRM } GOTOXY(VM+10,HM+7); WRITE(CHR(BILD[HM,VM])); GOTOXY(VM+XI+10,HM+DJ+7); WRITE('X'); HE:=BILD[HM+2*DJ,VM+2*XI]; IF HE>128 THEN HE:=HE-128; GOTOXY(VM+2*XI+10,HM+2*DJ+7); WRITE(CHR(HE)); HM:=HM+DJ; VM:=VM+XI; END; { } PROCEDURE BEWEGUNG; { } BEGIN WE:=BILD[HM+DJ,VM+XI]; W1:=BILD[HM+2*DJ,VM+2*XI]; IF WE<>35 THEN BEGIN IF (WE=32) OR (WE=42) THEN BEGIN MO:=MO+1; MANN; END ELSE IF (W1=32) OR (W1=42) THEN BEGIN W2:=WE; PU:=PU+1; IF (WE=79) OR (WE=111) THEN BILD[HM+DJ,VM+XI]:=32 ELSE BEGIN AE:=AE+1; W2:=WE-128; WE:=42; BILD[HM+DJ,VM+XI]:=42 END; { TONNE VERSCHIEBEN } IF W1=42 THEN BEGIN BILD[HM+2*DJ,VM+2*XI]:=128+W2; AE:=AE-1; END; IF W1=32 THEN BILD[HM+2*DJ,VM+2*XI]:=W2; MANN; END; END; END; { } PROCEDURE TASTATUR; { } BEGIN REPEAT GOTOXY(14,26); WRITELN(MO:3); GOTOXY(14,28); WRITELN(PU:3); XI:=0; DJ:=0; REPEAT INKEY; TIMER; GOTOXY(30,26); WRITE(TIM:2,':'); IF TIS>9 THEN WRITE(TIS:2) ELSE WRITE ('0',TIS:1); UNTIL (ASCII<>0) OR (TM=STI); IF ASCII=4 THEN XI:=1; IF ASCII=5 THEN DJ:=-1; IF ASCII=8 THEN XI:=-1; IF ASCII=24 THEN DJ:=1; BEWEGUNG; UNTIL (ASCII=71) OR (AE=0) OR (TM=STI); IF TM=STI THEN WRITE(^G,^G); IF ASCII<>71 THEN DELAY(3000); IF (ASCII=71) OR (TM=STI) THEN BEGIN MM:=MM-1; WRITE(^L); GOTOXY(2,15); IF ASCII=71 THEN WRITE(' Y O U H A V E G I V U P !!!') ELSE WRITE(' T H E T I M E I S O U T !'); DELAY(6000); IF MM=1 THEN BEGIN GOTOXY(6,18); WRITE('Y O U R L A S T M E N !'); DELAY(6000); END; IF MM=0 THEN BEGIN GOTOXY(5,18); WRITE('T H E G A M E I S O V E R'); DELAY(6000); LV:=30; END; END; IF AE=0 THEN LV:=LV+1; WRITE(^L); END; { } { GAME DEFINITION } { } {$I SLIDER-0.PIC} {$I SLIDER-1.PIC} {$I SLIDER-2.PIC} { } PROCEDURE PLAY; { } BEGIN WRITE(CHR(27),CHR(80),CHR(131)); CLRSCR; REPEAT CASE LV OF 1:EINS; 2:ZWEI; 3:DREI; 4:VIER; 5:FUENF; 6:SECHS; 7:SIEBEN; 8:ACHT; 9:NEUN; 10:ZEHN; 11:ELF; 12:ZWOELF; 13:DREIZEHN; 14:VIERZEHN; 15:FUENFZEHN; 16:SECHZEHN; 17:SIEBZEHN; 18:ACHZEHN; 19:NEUNZEHN; 20:ZWANZIG; 21:EINUNDZWANZIG; 22:ZWEIUNDZWANZIG; 23:DREIUNDZWANZIG; 24:VIERUNDZWANZIG; 25:FUENFUNDZWANZIG; 26:SECHSUNDZWANZIG; 27:SIEBENUNDZWANZIG; 28:ACHTUNDZWANZIG; END; UNTIL LV>LH; WRITE(CHR(27),CHR(80)); END; { } { HAUPTPROGRAMM } { } BEGIN ZEILE1:='X'; ZEILE2:='XX'; FOR I:=1 TO 79 DO BEGIN ZEILE1:=ZEILE1+ZEILE1; END; FOR I:=1 TO 75 DO BEGIN ZEILE2:=ZEILE2+' '; END; ZEILE2:=ZEILE2+'XX'; LOOP2: WRITE(CHR(131)); CLRSCR; WRITELN(ZEILE1); WRITELN(ZEILE1); FOR I:=1 TO 19 DO BEGIN WRITELN(ZEILE2); END; WRITELN(ZEILE1); WRITELN(ZEILE1); GOTOXY(1,4); WRITELN('XX SSSS L IIIII DDDD EEEEE RRRR'); WRITELN('XX S L I D D E R R'); WRITELN('XX S L I D D E R R'); WRITELN('XX SSSS L I D D EEEE RRRR'); WRITELN('XX S L I D D E R R'); WRITELN('XX S L I D D E R R'); WRITELN('XX SSSS LLLLL IIIII DDDD EEEEE R R'); GOTOXY(41,12); WRITELN('Version 2.0 (c) MLsoft 21.07.1991'); LOOP1: GOTOXY(22,14); WRITE('( I ) - I N S T R U C T I O N S'); GOTOXY(22,16); WRITE('( L ) - L E V E L ( 1 ... ',LH,' )'); GOTOXY(22,18); WRITE('( G ) - N E W G A M E'); GOTOXY(22,20); WRITE('( E ) - E N D O F G A M E'); READ(KBD,INPUT); CASE INPUT OF 'I','i': BEGIN GOTOXY(22,20); WRITE(LEER); GOTOXY(22,18); WRITE(LEER); GOTOXY(22,16); WRITE(LEER); GOTOXY(22,17); WRITE(^G); WRITE(' SLIDER is a game for everybody'); DELAY(6000); GOTOXY(22,17); WRITE(^G); WRITE(' Who wants to prove his intelligence.'); DELAY(6000); GOTOXY(22,17); WRITE(^G); WRITE(' You have to push barrels '); DELAY(6000); GOTOXY(22,17); WRITE(^G); WRITE(' on the marked fields '); DELAY(6000); GOTOXY(22,17); WRITE(^G); WRITE(' in ',LH,' different levels'); DELAY(6000); GOTOXY(22,17); WRITE(^G); WRITE(' and the time is against you !'); DELAY(6000); GOTOXY(22,17); WRITE(^G); WRITE(' Press >G< to give up. '); DELAY(6000); GOTOXY(22,17); WRITE(^G); WRITE(' Use the cursor-keys to play'); DELAY(6000); GOTOXY(22,17); WRITE(LEER); GOTOXY(22,14); WRITE(^G,^G,^G); WRITE(' G O O D L U C K ! '); GOTOXY(56,19); WRITE('Press any key!'); READ(KBD,INPUT); GOTOXY(34,19); WRITE(LEER); GOTO LOOP1; END; 'L','l': BEGIN GOTOXY(22,14); WRITE(LEER); GOTOXY(22,18); WRITE(LEER); REPEAT GOTOXY(59,20); WRITE(' '); GOTOXY(22,20); WRITE(CHR(130)); WRITE('P L E A S E E N T E R L E V E L : '); READLN(LEVEL); WRITE(CHR(131)); VAL(LEVEL,LV,F); UNTIL (F=0) AND (LV>0) AND (LV<=LH); MM:=1; PLAY; GOTO LOOP2; END; 'G','g': BEGIN LV:=1; MM:=7; PLAY; GOTO LOOP2; END; END; IF (INPUT<>'E') AND (INPUT<>'e') THEN GOTO LOOP1; WRITE(CHR(130)); CLRSCR; END.