SCREEN 12: RANDOMIZE TIMER 'PLenssen 96 DIM w(1 TO 9, 1 TO 18, 1 TO 4), b(1 TO 9, 1 TO 6, 1 TO 2), p(1 TO 9, 1 TO 6, 1 TO 2) AS INTEGER DIM x, y, nrb, nrp, ba, fo, xmax, ymax, neu, ver, ver2, lin, sklc AS INTEGER DIM del, bx, by, px, py, ri, wa, scr, nr, cr, c, ge, bump AS INTEGER DIM bl1%(1500), bl2%(1500), bl3%(1500), bl4%(1500), skl1a%(650), skl2a%(650) DIM skl3a%(650), skl4%(650), skl1b%(650), skl2b%(650), skl3b%(650), kreuz%(290) DIM speer1%(280), speer2%(280), speer3%(280), speer4%(280), speer5%(280), speer6%(280) DIM speer7%(280), speer8%(280), kaefer1%(900), kaefer2%(900), kaefer3%(900), kaefer4%(900) ba = 0: fo = 3: ge = 11: lin = 7: sklc = 15 '>Colors geduld% = 20: wec% = geduld%: gr% = 4 dauer% = 10: max = 1: be = max / 10: test% = 0 GOSUB plan: GOSUB getall start: FOR i% = 1 TO 30: cc$ = INKEY$: NEXT LOCATE 15, 22: PRINT "SKULL (ARROWS TO NAVIGATE, ESCAPE QUITS)": SLEEP 3 x = 315: y = 280: scr = 7: xspd = 0: yspd = 0: zeitlimit% = 100: xxx% = 0 scrk% = 6: xk% = 360: yk% = 204: xkspd% = -1 GOSUB neu: startzeit = TIMER DO '---------------------------------------------- eingabe$ = INKEY$ GOSUB bewegung: GOSUB zeit: GOSUB rand GOSUB wand: GOSUB blitz: GOSUB speer: GOSUB ziel GOSUB tier: GOSUB gefahr GOSUB skull LOOP '-------------------------------------------- skull: IF xxx% > 0 THEN xxx% = xxx% - 1 IF t < dreh% / 4 THEN IF comp% = 0 THEN PUT (x, y), skl1a%, PSET IF comp% = 1 THEN PUT (x, y), skl1b%, PSET ELSEIF t < (dreh% / 4) * 2 THEN IF comp% = 0 THEN PUT (x, y), skl2a%, PSET IF comp% = 1 THEN PUT (x, y), skl2b%, PSET ELSEIF t < (dreh% / 4) * 3 THEN IF comp% = 0 THEN PUT (x, y), skl3a%, PSET IF comp% = 1 THEN PUT (x, y), skl3b%, PSET ELSEIF t < dreh% THEN PUT (x, y), skl4%, PSET END IF IF xxx% = 0 AND dreh% < dauer% THEN dreh% = dreh% + 1: xxx% = dreh% * dauer%: t = dreh% / 2 END IF ELSE IF comp% = 0 THEN PUT (x, y), skl2a%, PSET IF comp% = 1 THEN PUT (x, y), skl2b%, PSET END IF RETURN bewegung: IF eingabe$ <> "" THEN comp% = 0: wart = 0 IF comp% = 0 THEN wahl$ = eingabe$ ELSE zz% = INT(RND * (wec% + 4)) + 1 SELECT CASE zz% CASE 1: wahl$ = CHR$(0) + "H" CASE 2: wahl$ = CHR$(0) + "P" CASE 3: wahl$ = CHR$(0) + "K" CASE 4: wahl$ = CHR$(0) + "M" CASE ELSE: wahl$ = "" END SELECT END IF SELECT CASE wahl$ CASE CHR$(0) + "H" IF yspd > -max THEN yspd = yspd - be IF xspd > 0 THEN xspd = xspd - be IF xspd < 0 THEN xspd = xspd + be END IF GOSUB rundung CASE CHR$(0) + "P" IF yspd < max THEN yspd = yspd + be IF xspd > 0 THEN xspd = xspd - be IF xspd < 0 THEN xspd = xspd + be END IF GOSUB rundung CASE CHR$(0) + "K" IF xspd > -max THEN xspd = xspd - be IF yspd > 0 THEN yspd = yspd - be IF yspd < 0 THEN yspd = yspd + be END IF GOSUB rundung CASE CHR$(0) + "M" IF xspd < max THEN xspd = xspd + be IF yspd > 0 THEN yspd = yspd - be IF yspd < 0 THEN yspd = yspd + be END IF GOSUB rundung CASE ELSE IF comp% = 0 THEN wart = wart + .01 END SELECT IF wart > geduld% THEN comp% = 1: wart = 0 y = y + yspd: x = x + xspd IF test% = 1 THEN LOCATE 25, 1: PRINT "Speed", ABS(xspd) + ABS(yspd) LOCATE 26, 1: PRINT "Computer", INT(geduld% - wart) LOCATE 27, 1: PRINT "Screen", scr LOCATE 28, 1: PRINT "Position"; INT(x), INT(y) END IF RETURN neu: nrb = 0 DO: nrb = nrb + 1: LOOP UNTIL b(scr, nrb, 1) + b(scr, nrb, 2) = 0: nrb = nrb - 1 nrp = 0 DO: nrp = nrp + 1: LOOP UNTIL p(scr, nrp, 1) + p(scr, nrp, 2) = 0: nrp = nrp - 1 nrx = 0 DO: nrx = nrx + 1: LOOP UNTIL w(scr, nrx, 1) + w(scr, nrx, 3) = 0: nrx = nrx - 1 CLS FOR nr = 1 TO nrx FOR c = 1 TO 4 cr(c) = w(scr, nr, c) NEXT x1% = cr(1) * 10: y1% = cr(2) * 10: x2% = cr(3) * 10: y2% = cr(4) * 10 IF x1% = 0 THEN x1% = 1 IF x2% = 640 THEN x2% = 638 IF y1% = 0 THEN y1% = 1 IF y2% = 480 THEN y2% = 478 LINE (x1%, y1%)-(x2%, y2%), fo, BF IF test% = 1 THEN LINE (x1%, y1%)-(x2%, y2%), 14 NEXT IF ba > 0 THEN PAINT (0, 0), ba, fo IF test% = 1 THEN GOSUB gitter w% = 0: tp% = 0 IF scr = zscr% THEN PUT (zx%, zy%), kreuz%, PSET RETURN wand: wa = 0: ver = 6: ver2 = 1 SELECT CASE fo CASE POINT(x + xmax, y + ymax / 2), POINT(x + xmax, y + (ymax / 2 - ver)), POINT(x + xmax, y + (ymax / 2 + ver)): wa = 1 CASE POINT(x + xmax / 2, y + ymax), POINT(x + (xmax / 2 - ver), y + ymax), POINT(x + (xmax / 2 + ver), y + ymax): wa = 2 CASE POINT(x - ver2, y + ymax / 2), POINT(x - ver2, y + (ymax / 2 - ver)), POINT(x - ver2, y + (ymax / 2 + ver)): wa = 3 CASE POINT(x + xmax / 2, y - ver2), POINT(x + (xmax / 2 - ver), y - ver2), POINT(x + (xmax / 2 + ver), y - ver2): wa = 4 CASE POINT(x + xmax, y + ymax): wa = 5 CASE POINT(x - ver2, y + ymax): wa = 6 CASE POINT(x - ver2, y - ver2): wa = 7 CASE POINT(x + xmax, y - ver2): wa = 8 END SELECT IF wa > 0 THEN bump = 1 IF xspd > 0 AND yspd = 0 THEN xspd = xspd * -1 + be: x = x - bump: IF wa >= 5 THEN yspd = yspd * -1 ELSEIF xspd < 0 AND yspd = 0 THEN xspd = xspd * -1 - be: x = x + bump: IF wa >= 5 THEN yspd = yspd * -1 ELSEIF xspd = 0 AND yspd < 0 THEN yspd = yspd * -1 - be: y = y + bump: IF wa >= 5 THEN xspd = xspd * -1 ELSEIF xspd = 0 AND yspd > 0 THEN yspd = yspd * -1 + be: y = y - bump: IF wa >= 5 THEN xspd = xspd * -1 ELSEIF xspd > 0 AND yspd < 0 THEN SELECT CASE wa CASE 4, 7: yspd = yspd * -1 - be: x = x + bump: y = y + bump CASE 1, 5: xspd = xspd * -1 + be: x = x - bump: y = y - bump CASE 8: xspd = xspd * -1 END SELECT ELSEIF xspd > 0 AND yspd > 0 THEN SELECT CASE wa CASE 2, 6: yspd = yspd * -1 + be: x = x + bump: y = y - bump CASE 1, 8: xspd = xspd * -1 + be: x = x - bump: y = y + bump CASE 5: xspd = xspd * -1 END SELECT ELSEIF xspd < 0 AND yspd > 0 THEN SELECT CASE wa CASE 2, 5: yspd = yspd * -1 + be: x = x - bump: y = y - bump CASE 3, 7: xspd = xspd * -1 - be: x = x + bump: y = y + bump CASE 6: xspd = xspd * -1 END SELECT ELSEIF xspd < 0 AND yspd < 0 THEN SELECT CASE wa CASE 4, 8: yspd = yspd * -1 - be: x = x - bump: y = y + bump CASE 3, 6: xspd = xspd * -1 - be: x = x + bump: y = y + bump CASE 7: xspd = xspd * -1 END SELECT END IF SOUND 100, .2 dreh% = dauer% - (dauer% / 2) * (2 * (ABS(xspd) + ABS(yspd))) IF xxx% = 0 THEN xxx% = dreh% * dauer%: t = dreh% / 2 END IF RETURN rand: IF x >= 639 - xmax THEN scr = scr + 1: x = 2: GOSUB neu ELSEIF x <= 1 THEN scr = scr - 1: x = 638 - xmax: GOSUB neu ELSEIF y >= 479 - ymax THEN scr = scr + 3: y = 2: GOSUB neu ELSEIF y <= 1 THEN scr = scr - 3: y = 478 - ymax: GOSUB neu END IF RETURN rundung: xspd = xspd * 10: xspd = INT(xspd + .5): xspd = xspd / 10 yspd = yspd * 10: yspd = INT(yspd + .5): yspd = yspd / 10 RETURN zeit: zeit% = zeitlimit% - (INT(TIMER - startzeit)) IF eingabe$ = CHR$(27) THEN zeit% = 0 LOCATE 1, 1: PRINT zeit% IF zeit% <= 0 THEN GOSUB explosion IF t < dreh% THEN t = t + .1 ELSE t = 0 END IF RETURN tier: IF scr = scrk% THEN IF t3% <= 20 THEN t3% = t3% + 1 ELSE t3% = 0 END IF IF t3% = 1 OR t3% = 10 THEN IF ka% <= 10 THEN ka% = ka% + 1 ELSE ka% = 1 END IF xk% = xk% + xkspd% IF POINT(xk% + kxmax% + 1, yk% + kymax% / 2) = fo OR xk% = 639 - xkmax% THEN xk% = xk% - 3: xkspd% = -1 IF POINT(xk% - 1, yk% + kymax% / 2) = fo OR xk% = 1 THEN xk% = xk% + 3: xkspd% = 1 IF xkspd% = 1 AND POINT(xk% + kxmax% + 1, yk% + kymax% / 2) = lin THEN xspd = xspd + .1: SOUND 100, .2 ELSEIF xkspd% = -1 AND POINT(xk% - 1, yk% + kymax% / 2) = lin THEN xspd = xspd - .1: SOUND 100, .2 ELSE IF POINT(xk% + kxmax%, yk% + kymax% / 2) = sklc THEN GOSUB explosion IF POINT(xk%, yk% + kymax% / 2) = sklc THEN GOSUB explosion END IF SELECT CASE ka% CASE IS < 5 IF xkspd% > 0 THEN PUT (xk%, yk%), kaefer1%, PSET IF xkspd% < 0 THEN PUT (xk%, yk%), kaefer3%, PSET CASE ELSE IF xkspd% > 0 THEN PUT (xk%, yk%), kaefer2%, PSET IF xkspd% < 0 THEN PUT (xk%, yk%), kaefer4%, PSET END SELECT END IF END IF RETURN speer: tp% = tp% + 1 FOR nr = 1 TO nrp FOR c = 1 TO 2 cr(c) = p(scr, nr, c) NEXT px = (cr(1) * 10) + 5: py = (cr(2) * 10) - 8 SELECT CASE tp% / 20 CASE 1: PUT (px, py), speer7%, PSET CASE 4: PUT (px, py), speer6%, PSET CASE 5: PUT (px, py), speer5%, PSET CASE 6: PUT (px, py), speer4%, PSET CASE 7: PUT (px, py), speer3%, PSET CASE 8: PUT (px, py), speer2%, PSET CASE 9: PUT (px, py), speer1%, PSET CASE 10: PUT (px, py), speer8%, PSET CASE 11: tp% = 0 END SELECT NEXT RETURN blitz: t2 = t2 + 1 IF t2 = 15 THEN t2 = 0 IF t2 = 1 THEN w% = w% + 1 FOR nr = 1 TO nrb FOR c = 1 TO 2 cr(c) = b(scr, nr, c) NEXT bx = (cr(1) * 10) + 5: by = (cr(2) * 10) - 8 SELECT CASE w% CASE 1, 4, 7: PUT (bx, by), bl1%, PSET CASE 2, 5, 8: PUT (bx, by), bl2%, PSET CASE 3, 6, 9: PUT (bx, by), bl3%, PSET CASE 10: PUT (bx, by), bl4%, PSET CASE 16: w% = 0 END SELECT NEXT END IF RETURN gefahr: wa = 1 SELECT CASE ge CASE POINT(x + xmax, y + ymax / 2), POINT(x + xmax / 2, y + ymax), POINT(x - 1, y + ymax) CASE POINT(x + xmax / 2, y - 1), POINT(x + xmax, y + ymax), POINT(x - 1, y + ymax) CASE POINT(x - 1, y - 1), POINT(x + xmax, y - 1), POINT(x + xmax / 2, y + ymax / 2) CASE ELSE: wa = 0 END SELECT IF wa = 1 THEN GOSUB explosion RETURN ziel: IF scr = zscr% THEN wa = 1 SELECT CASE 9 CASE POINT(x + 21, y + 10), POINT(x + 10, y + 21), POINT(x - 1, y + 10) CASE POINT(x + 10, y - 1), POINT(x + 21, y + 21), POINT(x - 1, y + 21) CASE POINT(x - 1, y - 1), POINT(x + 21, y - 1) CASE ELSE: wa = 0 END SELECT IF wa = 1 THEN PLAY "o1l26cedgabfd CHR$(27) THEN GOSUB start