DECLARE FUNCTION IsEmpty! (KeyDownPress AS INTEGER, X AS INTEGER, Y AS INTEGER) DECLARE FUNCTION KeyDown! () DECLARE SUB MoveCursor (KeyDownPress AS INTEGER, X AS INTEGER, Y AS INTEGER) RANDOMIZE TIMER CLS DIM X AS INTEGER DIM Y AS INTEGER DIM xRandom AS INTEGER DIM yRandom AS INTEGER DIM KeyDownPress AS INTEGER DIM NumeroPassi AS INTEGER DIM NomeFileMappa AS STRING DIM NumeroDifficolta AS DOUBLE DIM NumeroMorte AS DOUBLE TYPE PointScreen xp AS INTEGER yp AS INTEGER END TYPE DIM PercorsoEseguito(8000) AS PointScreen X = 1 Y = 1 NumeroDifficolta = 500000 NumeroMorte = 1 NumeroPassi = 1 PercorsoEseguito(1).xp = X PercorsoEseguito(1).yp = Y LOCATE X, Y PRINT "Inserire il nome del Labirinto:": INPUT NomeFileMappa CLS SHELL "type " + NomeFileMappa + ".LAB" DO KeyDownPress = KeyDown IF IsEmpty(KeyDownPress, X, Y) THEN CALL MoveCursor(KeyDownPress, X, Y) IF (RND * NumeroDifficolta + 1) > NumeroDifficolta - NumeroMorte THEN NumeroMorte = NumeroMorte + 1 xRandom = (1 + (RND * 77)) yRandom = (1 + (RND * 22)) IF SCREEN(yRandom, xRandom) = 1 THEN KeyDownPress = 27 ELSE LOCATE yRandom, xRandom: PRINT CHR$(219) END IF END IF IF (PercorsoEseguito(NumeroPassi).xp <> X OR PercorsoEseguito(NumeroPassi).yp <> Y) THEN IF NumeroPassi < 8000 THEN NumeroPassi = NumeroPassi + 1 PercorsoEseguito(NumeroPassi).xp = X PercorsoEseguito(NumeroPassi).yp = Y END IF END IF IF Y = 23 THEN KeyDownPress = 27 FOR i = 1 TO NumeroPassi LOCATE PercorsoEseguito(i).yp, PercorsoEseguito(i).xp PRINT CHR$(3) NEXT i PRINT " Bravo, hai Vinto con" + STR$(NumeroPassi) + " passi !!" END IF LOOP UNTIL KeyDownPress = 27 IF Y < 23 THEN FOR i = 1 TO NumeroPassi LOCATE PercorsoEseguito(i).yp, PercorsoEseguito(i).xp PRINT CHR$(2) NEXT i LOCATE Y, X + 2 PRINT " Coglione, hai Perso !!" END IF FUNCTION IsEmpty (KeyDownPress AS INTEGER, X AS INTEGER, Y AS INTEGER) DIM xNext AS INTEGER DIM yNext AS INTEGER xNext = X yNext = Y IF KeyDownPress = 77 THEN xNext = X + 1 END IF IF KeyDownPress = 75 THEN xNext = X - 1 END IF IF KeyDownPress = 80 THEN yNext = Y + 1 END IF IF KeyDownPress = 72 THEN yNext = Y - 1 END IF IF yNext <= 0 THEN yNext = 1 IF xNext <= 0 THEN xNext = 1 IF yNext > 23 THEN yNext = 23 IF xNext > 78 THEN xNext = 78 IF SCREEN(yNext, xNext) <> 32 THEN IsEmpty = 0 ELSE IsEmpty = 1 END IF END FUNCTION FUNCTION KeyDown DIM KeyDownPress AS INTEGER DIM KeyDownPressS AS STRING * 2 KeyDownPressS = INKEY$ IF ASC(RIGHT$(KeyDownPressS, 1)) > 0 AND ASC(LEFT$(KeyDownPressS, 1)) = 0 THEN KeyDownPress = ASC(RIGHT$(KeyDownPressS, 1)) ELSE KeyDownPress = ASC(LEFT$(KeyDownPressS, 1)) END IF KeyDown = KeyDownPress END FUNCTION SUB MoveCursor (KeyDownPress AS INTEGER, X AS INTEGER, Y AS INTEGER) LOCATE Y, X: PRINT " " IF KeyDownPress = 77 THEN X = X + 1 END IF IF KeyDownPress = 75 THEN X = X - 1 END IF IF KeyDownPress = 80 THEN Y = Y + 1 END IF IF KeyDownPress = 72 THEN Y = Y - 1 END IF IF Y <= 0 THEN Y = 1 IF X <= 0 THEN X = 1 IF Y > 23 THEN Y = 23 IF X > 78 THEN X = 78 LOCATE Y, X: PRINT CHR$(1) END SUB