'=========================================================================== ' Subject: SOME NICE TEXT SCREEN SAVERS Date: 01-24-00 (09:09) ' Author: MARiO Lorenz Code: QB, PDS ' Origin: mario@the-real-world.de Packet: TEXT.ABC '=========================================================================== REM ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ· REM ³@SRM@MM@BZBMD@NSBSBB@MB@0@ZBBZ@@B[ÇÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ· REM ³0MZZWZMZEZB@@ST_ .'?~?*B@Z@Z#BM[º TXT-SCR-Saver º REM ³BNMB@0S0MMG=_|xD3 i^^"_ {k}DBMRNMlº coded by  MARiO '2k º REM ³ZBZB@QMM \bgEO&0v6J_=-x15s\s%&SBM1º www.the-real-world.de º REM ³ZBZMBMSum$BZMZSMBdf3=-.q/=R^}\sRScº mario@the-real-world.de º REM ³BBZBNMEMZSwMBDpSkG^+=_^-u`3P>}-B@[ÌÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍͼ REM ³@BMBE0EB&BB*A9P&wS*C\!" ;n- {vqkW}º REM ³@M@00SMQZM5}./4>.~?fpg1`)/,_-( :&fÇÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ· REM ³ZZEEZL^~GhU:,u %{%;z=%cc-a~' ~L @[º Types: º REM ³BZB#@Bvg5v?;3+sxxjZAPdX^`\- c{{ZMfº º REM ³@#Z@EZ0Pd,=~-$&E00C2L?k>`')/c3q@B[º Shuffle 01-06-97 º REM ³REBZZMj ."__&ZSXPbLuC%:=.M=s25dBB[º Worms 07-06-98 º REM ³PB0@EBGq%Cg1&503zkhrtia--s.3YpBZZ[º Stars 07-06-98 º REM ³SZZZB@gyx__d2Lqq4z*~O0%~^x._qM@ZB[º Cascade 07-06-98 º REM ³&SWBEZBZq&xSYI~SX^}``\%j/=gZ@BBB0fº Pacman 07-06-98 º REM ³5S4MR@WptGTZP8e>'/=,_q_?1BEM0Z*SM6º Snowfall 01-10-98 º REM ³P/$P+PE!~O32` __.-: c=']-~;;7/f$ º TV-Zapping 15-04-99 º REM ³TOx\,a_s-;G$px-^_%r:\>1=ZW?Sf#=*^}º Wavetime 15-04-99 º REM ³i; ".-`=" q5ZR&y9%/>-1%i,[~-^%_%i'º Mandelbrot 15-04-99 º REM ³_1Ca= a^^hMGS&qC=x=*\,f;=,--grP[º Millennium 05-01-2k º REM ³~^' ..~>~-SESuav>ph_C '-~?._/^*)ÌÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍͼ REM ÔÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍͼ REM ----- * Quellcode "QUAX.BAS" * System : QuickBASIC 4.5 * ---------------- DEFINT A-Z TYPE RegTypeX ax AS INTEGER: bx AS INTEGER: cx AS INTEGER: dx AS INTEGER: bp AS INTEGER si AS INTEGER: di AS INTEGER: flags AS INTEGER: DS AS INTEGER: ES AS INTEGER END TYPE DECLARE SUB InterruptX (intnum AS INTEGER, inreg AS RegTypeX, outreg AS RegTypeX) DECLARE SUB Cascade () DECLARE SUB Mandel () DECLARE SUB Millennium () DECLARE SUB Pacman () DECLARE SUB Pause (Break) DECLARE SUB SchonFrage () DECLARE SUB Snowfall () DECLARE SUB Stars () DECLARE SUB Wave () DECLARE SUB Zapping () DECLARE SUB Shuffle () DECLARE SUB ScrSave (Name$, SW!) DECLARE SUB Worms () DIM SHARED RegX AS RegTypeX, Stopp, ScrDat(2000, 2), bi(6) REM ----- BackSCR ----------------------------------------------------------- SCREEN 0: WIDTH 80, 25: VIEW PRINT 1 TO 25: CLS OPEN "txtsave.txt" FOR INPUT AS #1 RANDOMIZE TIMER DO v = INT(RND * 15) + 1 h = INT(RND * 8) + 1 LOOP WHILE h = v COLOR v, h PRINT STRING$(2000, 176); LOCATE 2 DO UNTIL EOF(1) LOCATE , 3 LINE INPUT #1, Txtline$ PRINT Txtline$ LOOP CLOSE RESTORE DatBit: 'important for zapping, snowfall, stars FOR x = 1 TO 6: READ bi(x): NEXT REM ----- input-Box --------------------------------------------------------- CALL ScrSave("Auswahl", 1) PosY = 1 Start: DEF SEG = &HB800 COLOR 15, 1 BoxPosX = INT(RND * 65) + 1 BoxPosY = INT(RND * 12) + 1 LOCATE BoxPosY, BoxPosX: PRINT "ÉÍÍÍÍÍÍÍÍÍÍÍÍ»" RESTORE DatBox FOR x = 1 TO 10 READ box$(x) LOCATE BoxPosY + x, BoxPosX: PRINT "º " + box$(x) + " º" NEXT LOCATE BoxPosY + 11, BoxPosX: PRINT "ÈÍÍÍÍÍÍÍÍÍÍÍͼ" Eing: COLOR 12, 7: LOCATE BoxPosY + PosY, BoxPosX + 1: PRINT " " + box$(PosY) + " " DO Taste$ = INKEY$ LOOP WHILE Taste$ = "" OldPosY = PosY IF LEN(Taste$) = 1 THEN Taste = ASC(Taste$) ELSE Taste = ASC(RIGHT$(Taste$, 1)) * -1 SELECT CASE Taste CASE -72, -75: PosY = PosY - 1 CASE -80, -77: PosY = PosY + 1 CASE 27: KILL "*.TMP": COLOR 7, 0: CLS : END CASE 13: CALL ScrSave("Auswahl", 2) FOR x = 1 TO 2000 'important for zapping, wave ScrDat(x, 1) = PEEK(x * 2 - 2): ScrDat(x, 2) = PEEK(x * 2 - 1) POKE x * 2 + 3998, 0: POKE x * 2 + 3999, 0 NEXT SELECT CASE PosY CASE 1: CALL Cascade CASE 2: CALL Mandel CASE 3: CALL Millennium CASE 4: CALL Pacman CASE 5: CALL Shuffle CASE 6: CALL Snowfall CASE 7: CALL Stars CASE 8: CALL Wave CASE 9: CALL Worms CASE 10: CALL Zapping END SELECT Stopp = 0: CALL ScrSave("Auswahl", 2): GOTO Start END SELECT IF PosY = 11 THEN PosY = 1 IF PosY = 0 THEN PosY = 10 COLOR 15, 1: LOCATE BoxPosY + OldPosY, BoxPosX + 1: PRINT " " + box$(OldPosY) + " " GOTO Eing: REM ----- Data's ------------------------------------------------------------ DatPacman: DATA 0, 7, 31, 63, 63,127,127,127,127,127,127, 63, 63, 31, 7,0 DATA 0,224,248, 60,252,254,246,104,158,254,254,252,252,248,224,0 DATA 0,224,248, 60,252,254,224, 0,192,240,254,252,252,248,224,0 DatMillenn: DATA 0,8,7,15 DATA 0,1,9,15 DATA 0,2,10,15 DATA 0,3,11,15 DATA 0,4,12,14 DATA 0,5,13,15 DATA 0,6,14,15 DatBit: DATA 0,250,7,43,42,15 DatBox: DATA "Cascade " DATA "Mandelbrot" DATA "Millennium" DATA "Pacman " DATA "Shuffle " DATA "Snowfall " DATA "Stars " DATA "Wave " DATA "Worms " DATA "Zapping " SUB Cascade REM ----- CasCade ----------------------------------------------------------- DO PosY = INT(RND * 24) PosX = INT(RND * 80) TypA = PEEK(PosY * 160 + PosX * 2) TypC = PEEK(PosY * 160 + PosX * 2 + 1) xA = 0: xC = 0 FOR x = PosY + 1 TO 24 ea = PEEK(x * 160 + PosX * 2) eC = PEEK(x * 160 + PosX * 2 + 1) POKE x * 160 + PosX * 2, TypA POKE x * 160 + PosX * 2 + 1, TypC POKE (x - 1) * 160 + PosX * 2, xA POKE (x - 1) * 160 + PosX * 2 + 1, xC xA = ea: xC = eC CALL Pause(5) CALL SchonFrage: IF Stopp THEN EXIT FOR NEXT LOOP UNTIL Stopp END SUB SUB Mandel REM ----- Mandelbrotmenge --------------------------------------------------- MaxP = 63 MaxX = 80 MaxY = 25 MaxI = 16 AngleR! = -2 AngleL! = -1.25 Side! = 2.5 DIM PalM(MaxP) FOR x = 0 TO MaxP PalM(x) = x NEXT x DistX! = Side! / MaxX% DistY! = Side! / MaxY% FOR y = 1 TO MaxY FOR x = 1 TO MaxX% cr! = x * DistX! + AngleR! cl! = y * DistY! + AngleL! zr! = cr! zl! = cl! It = 0 DO a! = zr! * zr! b! = zl! * zl! Length! = a! + b! zl! = 2 * zr! * zl! + cl! zr! = a! - b! + cr! It = It + 1 LOOP UNTIL Length! > 4 OR It > MaxI POKE (y - 1) * 160 + (x * 2 - 1), It MOD 16 NEXT x NEXT y DO CALL Pause(20) CALL SchonFrage FOR x = 1 TO MaxP PalM(x) = (PalM(x) MOD MaxP) + 1 NEXT x PALETTE USING PalM(0) LOOP UNTIL Stopp PALETTE END SUB SUB Millennium DEFINT A-Z REM ----- Copper ------------------------------------------------------------ RESTORE DatMillenn Fb = 8 DIM CoppCol(7, Fb) FOR x = 1 TO 7 FOR y = 1 TO Fb / 2 READ z: CoppCol(x, y) = z: CoppCol(x, (Fb + 1) - y) = z NEXT NEXT DO: Hi = INT(RND * 4) + 1 SELECT CASE Hi CASE 1: Minz = 0: MaxZ = 81: VzZ = 1: MinX = 0: MaxX = 24: t = 1 CASE 2: Minz = 81: MaxZ = 0: VzZ = -1: MinX = 0: MaxX = 24: t = 1 CASE 3: Minz = 0: MaxZ = 26: VzZ = 1: MinX = 0: MaxX = 79: t = 2 CASE 4: Minz = 26: MaxZ = 0: VzZ = -1: MinX = 0: MaxX = 79: t = 2 END SELECT CoppTyp = INT(RND * 7) + 1 FOR z = Minz - (Fb * VzZ) TO MaxZ + (Fb * VzZ) STEP VzZ FOR x = MinX TO MaxX FOR y = 1 TO Fb IF (((z + y) > Minz AND (z + y) < MaxZ) AND VzZ = 1) OR (((z + y) < Minz AND (z + y) > MaxZ) AND VzZ = -1) THEN SELECT CASE t CASE 1: POKE z * 2 + x * 160 + (y * 2 - 1), CoppCol(CoppTyp, y) CASE 2: POKE z * 160 + x * 2 + (y * 160 - 159), CoppCol(CoppTyp, y) END SELECT END IF NEXT NEXT CALL Pause(5) CALL SchonFrage: IF Stopp THEN EXIT FOR NEXT IF Stopp THEN EXIT DO LOOP END SUB SUB Pacman REM ----- Pacman ------------------------------------------------------------ DIM PacScr AS STRING * 48 DEF SEG = VARSEG(PacScr) RESTORE DatPacman: FOR x = 1 TO 48 READ y: POKE VARPTR(PacScr) + x - 1, y NEXT DEF SEG RegX.ax = &H1100: RegX.bx = 256 * 16: RegX.cx = 3: RegX.dx = 214 RegX.ES = VARSEG(PacScr): RegX.bp = VARPTR(PacScr) CALL InterruptX(&H10, RegX, RegX) DEF SEG = &HB800 les = 2 DO: IF les = 1 THEN les = 2 ELSE les = 1 FOR x = 1 TO 2000 IF x / 2 > FIX(x / 2) THEN Face = 215 ELSE Face = 216 IF les = 1 THEN POKE x * 2 - 2, 0: POKE x * 2 - 1, 0 ELSE POKE x * 2 - 2, ScrDat(x, 1): POKE x * 2 - 1, ScrDat(x, 2) END IF POKE x * 2, 214: POKE x * 2 + 1, 14 POKE x * 2 + 2, Face: POKE x * 2 + 3, FIX(PEEK(x * 2 + 3) / 16) * 16 + 14 CALL Pause(7) CALL SchonFrage: IF Stopp THEN EXIT FOR NEXT LOOP UNTIL Stopp END SUB SUB Pause (Break) REM ----- Pause ------------------------------------------------------------- FOR pp = 1 TO Break: WAIT &H3DA, 8: WAIT &H3DA, 8, 8: NEXT END SUB SUB SchonFrage REM ----- Tastatur-/Mausabfrage --------------------------------------------- IF INKEY$ <> "" THEN Stopp = 1 END SUB DEFSNG A-Z SUB ScrSave (Name$, SW) REM ----- Bildschirmspeicherer und -leser ----------------------------------- DEF SEG = &HB800 SELECT CASE SW CASE 1: BSAVE Name$ + ".TMP", 0, 4000 CASE 2: BLOAD Name$ + ".TMP", 0 END SELECT END SUB DEFINT A-Z SUB Shuffle REM ----- Shuffle ----------------------------------------------------------- DIM Puzz(5, 16) x1 = FIX(RND * 10) + 1: y1 = FIX(RND * 5) + 1 DO: DO: Oldx1 = x1: Oldy1 = y1: ri = FIX(RND * 4) + 1 SELECT CASE ri CASE 1: x1 = x1 + 1 CASE 2: x1 = x1 - 1 CASE 3: y1 = y1 + 1 CASE 4: y1 = y1 - 1 END SELECT IF x1 > 10 OR x1 < 1 OR y1 > 5 OR y1 < 1 THEN x1 = Oldx1: y1 = Oldy1 LOOP WHILE x1 = Oldx1 AND y1 = Oldy1 IF Oldx1 = x1 THEN ze = 5 ELSE ze = 8 IF Oldy1 - y1 = 1 OR Oldx1 - x1 = 1 THEN xs = 5: xe = 1: xst = -1: ys = 16: ye = 1: yst = -1 ELSE xs = 1: xe = 5: xst = 1: ys = 1: ye = 16: yst = 1 FOR z = 0 TO ze CALL Pause(2) FOR x2 = xs TO xe STEP xst FOR y2 = ys TO ye STEP yst xyz = (y2 - 1) + (160 * (x2 - 1)) + (800 * (y1 - 1)) + (16 * (x1 - 1)) IF z = 0 THEN Puzz(x2, y2) = PEEK(xyz) ELSE POKE (xyz + (z * 160 * (Oldy1 - y1)) + (z * 2 * (Oldx1 - x1))), Puzz(x2, y2) IF PEEK((y2 - 1) + (160 * (x2 - 1)) + (800 * (Oldy1 - 1)) + (16 * (Oldx1 - 1))) <> 0 THEN POKE (xyz), 0 END IF NEXT NEXT NEXT CALL Pause(30) CALL SchonFrage LOOP UNTIL Stopp END SUB SUB Snowfall REM ----- Snowfall ---------------------------------------------------------- XRes = 80: YRes = 25: Dots = 40 DIM XPos(Dots), YPos(Dots) FOR x = 1 TO Dots YPos(x) = INT(RND * YRes) + 1 XPos(x) = INT(RND * XRes) + 1 NEXT COLOR 15, 0: CLS DO: FOR x = 1 TO Dots POKE (YPos(x) - 1) * 160 + XPos(x) * 2, 0 YPos(x) = YPos(x) + INT(RND * 3) XRnd = INT(RND * 6) + 1 IF XRnd > 3 THEN XRnd = 3 - XRnd XPos(x) = XPos(x) + XRnd IF YPos(x) > YRes THEN YPos(x) = 1: XPos(x) = INT(RND * XRes) + 1 IF XPos(x) > 80 THEN XPos(x) = 80 IF XPos(x) < 1 THEN XPos(x) = 1 POKE (YPos(x) - 1) * 160 + XPos(x) * 2, bi(INT(RND * 2) + 2) NEXT CALL Pause(10) CALL SchonFrage LOOP UNTIL Stopp END SUB SUB Stars REM ----- Stars ------------------------------------------------------------- COLOR , 0: CLS DO Pose = INT(RND * 2000) * 2 Art = INT(RND * 15) + 1 SELECT CASE Art CASE 1 TO 10: Typ = 0 CASE 11 TO 12: Typ = 7 CASE 13 TO 14: Typ = 250 CASE 15: POKE Pose + 1, 15 FOR x = 1 TO 12 IF x <= 6 THEN POKE Pose, bi(x) ELSE POKE Pose, bi(12 - x + 1) CALL Pause(7) NEXT END SELECT IF Art < 15 THEN POKE Pose, Typ: POKE Pose + 1, 11: CALL Pause(7) CALL SchonFrage LOOP UNTIL Stopp END SUB SUB Wave REM ----- Waver ------------------------------------------------------------- DIM SPosY(80) DO: Hi = INT(RND * 4) + 1 SELECT CASE Hi CASE 1: Max1 = 0: Max2 = 80: Vz1 = -1: Vz2 = 1: yy1 = 0: yy2 = 24: xx1 = 1: xx2 = 80: MaxW = 80 CASE 2: Max1 = 80: Max2 = 0: Vz1 = 1: Vz2 = -1: yy1 = 0: yy2 = 24: xx1 = 1: xx2 = 80: MaxW = 1 CASE 3: Max1 = 0: Max2 = 25: Vz1 = -1: Vz2 = 1: yy1 = 1: yy2 = 80: xx1 = 0: xx2 = 24: MaxW = 25 CASE 4: Max1 = 25: Max2 = 0: Vz1 = 1: Vz2 = -1: yy1 = 1: yy2 = 80: xx1 = 0: xx2 = 24: MaxW = 1 END SELECT FOR y = yy1 TO yy2 SPosY(y) = MaxW NEXT ri = 2 DO: IF ri = 2 THEN ri = 1 ELSE ri = 2 DO: FOR y = yy1 TO yy2 SELECT CASE ri CASE 1: SPosY(y) = SPosY(y) + (RND * 1.5) * Vz1 IF Vz1 = -1 THEN Verg1 = SPosY(y): Verg2 = Max1 ELSE Verg1 = Max1: Verg2 = SPosY(y) IF Verg1 < Verg2 THEN SPosY(y) = Max1 CASE 2: SPosY(y) = SPosY(y) + (RND * 1.5) * Vz2 IF Vz1 = -1 THEN Verg1 = SPosY(y): Verg2 = Max2 ELSE Verg1 = Max2: Verg2 = SPosY(y) IF Verg1 > Verg2 THEN SPosY(y) = Max2 END SELECT FOR x = xx1 TO xx2 Pok1 = 0: Pok2 = 0 SELECT CASE Hi CASE 1: IF x <= SPosY(y) THEN Pok1 = ScrDat(y * 80 + x + (80 - SPosY(y)), 1): Pok2 = ScrDat(y * 80 + x + (80 - SPosY(y)), 2) CASE 2: IF x > SPosY(y) THEN Pok1 = ScrDat(y * 80 + (x - SPosY(y)), 1): Pok2 = ScrDat(y * 80 + (x - SPosY(y)), 2) CASE 3: IF x < SPosY(y) THEN Pok1 = ScrDat((x + (25 - SPosY(y))) * 80 + y, 1): Pok2 = ScrDat((x + (25 - SPosY(y))) * 80 + y, 2) CASE 4: IF x >= SPosY(y) THEN Pok1 = ScrDat((x - SPosY(y)) * 80 + y, 1): Pok2 = ScrDat((x - SPosY(y)) * 80 + y, 2) END SELECT SELECT CASE Hi CASE 1, 2 POKE (y * 80 + x) * 2 - 2, Pok1 POKE (y * 80 + x) * 2 - 1, Pok2 CASE 3, 4 POKE (x * 80 + y) * 2 - 2, Pok1 POKE (x * 80 + y) * 2 - 1, Pok2 END SELECT NEXT CALL SchonFrage IF Stopp THEN EXIT SUB NEXT CALL Pause(3) FOR y = yy1 TO yy2 Wei = 0 IF ri = 1 THEN IF Vz1 = -1 THEN Verg1 = SPosY(y): Verg2 = Max1 ELSE Verg1 = Max1: Verg2 = SPosY(y) IF Verg1 > Verg2 THEN Wei = 1: EXIT FOR ELSE IF Vz1 = -1 THEN Verg1 = SPosY(y): Verg2 = Max2 ELSE Verg1 = Max2: Verg2 = SPosY(y) IF Verg1 < Verg2 THEN Wei = 1: EXIT FOR END IF NEXT LOOP WHILE Wei LOOP WHILE ri = 1 LOOP END SUB SUB Worms REM ----- Worms ------------------------------------------------------------- fly = 7 FlyL = 6 DIM x(fly, FlyL + 1), y(fly, FlyL + 1), d(fly, FlyL + 1) FOR I = 1 TO fly x(I, 1) = INT(RND * 80) + 1 y(I, 1) = INT(RND * 25) + 1 d(I, 2) = INT(RND * 8) + 1 NEXT DO FOR I = 1 TO fly FOR j = FlyL TO 1 STEP -1 SELECT CASE j CASE 1: COLOR 15 - I ri = INT(RND * 5) + 1 SELECT CASE ri CASE 1: d(I, 1) = d(I, 2) + 0 CASE 2: d(I, 1) = d(I, 2) + 1 CASE 3: d(I, 1) = d(I, 2) + 2 CASE 4: d(I, 1) = d(I, 2) + 6 CASE 5: d(I, 1) = d(I, 2) + 7 END SELECT IF d(I, 1) > 8 THEN d(I, 1) = d(I, 1) - 8 SELECT CASE d(I, 1) CASE 1: x(I, 1) = x(I, 1) + 1 CASE 2: x(I, 1) = x(I, 1) + 1: y(I, 1) = y(I, 1) + 1 CASE 3: y(I, 1) = y(I, 1) + 1 CASE 4: x(I, 1) = x(I, 1) - 1: y(I, 1) = y(I, 1) + 1 CASE 5: x(I, 1) = x(I, 1) - 1 CASE 6: x(I, 1) = x(I, 1) - 1: y(I, 1) = y(I, 1) - 1 CASE 7: y(I, 1) = y(I, 1) - 1 CASE 8: x(I, 1) = x(I, 1) + 1: y(I, 1) = y(I, 1) - 1 END SELECT IF x(I, 1) < 1 THEN x(I, 1) = 80 IF x(I, 1) > 80 THEN x(I, 1) = 1 IF y(I, 1) < 1 THEN y(I, 1) = 25 IF y(I, 1) > 25 THEN y(I, 1) = 1 LOCATE y(I, j), x(I, j): PRINT "™"; CASE 2 TO FlyL - 1: COLOR 15 - I IF y(I, j) > 0 AND x(I, j) > 0 THEN LOCATE y(I, j), x(I, j): PRINT "o"; CASE FlyL: COLOR 0, 0 IF y(I, j) > 0 AND x(I, j) > 0 THEN LOCATE y(I, j), x(I, j): PRINT " "; END SELECT CALL SchonFrage IF Stopp THEN EXIT SUB x(I, j + 1) = x(I, j): y(I, j + 1) = y(I, j): d(I, j + 1) = d(I, j) NEXT CALL Pause(1) NEXT LOOP END SUB SUB Zapping REM ----- Zapping ----------------------------------------------------------- COLOR 7, 0 DO: Sy = 1: sx = 1: Sb = 80: sl = 25 DO: FOR y = Sy TO sl IF y = Sy THEN LOCATE y, sx: PRINT "Ú" + STRING$((Sb - 2), "Ä") + "¿"; ELSEIF y = sl THEN LOCATE y, sx: PRINT "À" + STRING$((Sb - 2), "Ä") + "Ù"; ELSE LOCATE y, sx: PRINT "³"; LOCATE y, sx + Sb - 1: PRINT "³"; END IF NEXT CALL Pause(3) FOR y = Sy TO sl IF y = Sy THEN LOCATE y, sx: PRINT SPACE$(Sb); ELSEIF y = sl THEN LOCATE y, sx: PRINT SPACE$(Sb); ELSE LOCATE y, sx: PRINT " "; LOCATE y, sx + Sb - 1: PRINT " "; END IF NEXT sl = sl - 1: Sy = Sy + 1 sx = sx + 1: Sb = Sb - 2 CALL SchonFrage IF Stopp THEN GOTO ZappEnd LOOP WHILE sl <> Sy FOR y = 1 TO Sb / 2 LOCATE Sy, sx + y - 1: PRINT " "; STRING$((Sb - y * 2), "Ä"); " "; CALL Pause(2) NEXT PosZ = (Sy - 1) * 160 + (sx + y) * 2 FOR x = 1 TO 12 IF x <= 6 THEN POKE PosZ, bi(7 - x) ELSE POKE PosZ, bi(x - 6) CALL Pause(7) NEXT FOR y = Sb / 2 TO 1 STEP -1 LOCATE Sy, sx + y - 1: PRINT " "; STRING$((Sb - y * 2), "Ä"); " "; CALL Pause(2) NEXT CALL SchonFrage IF Stopp THEN GOTO ZappEnd DO sl = sl + 1: Sy = Sy - 1 sx = sx - 1: Sb = Sb + 2 FOR y = sl TO Sy STEP -1 IF y = Sy THEN LOCATE y, sx: PRINT "Ú" + STRING$((Sb - 2), "Ä") + "¿"; ELSEIF y = sl THEN LOCATE y, sx: PRINT "À" + STRING$((Sb - 2), "Ä") + "Ù"; ELSE LOCATE y, sx: PRINT "³"; LOCATE y, sx + Sb - 1: PRINT "³"; END IF NEXT FOR y1 = Sy TO sl - 2 FOR x1 = sx TO Sb + sx - 3 POKE (y1 * 80 + x1) * 2, ScrDat((y1 * 80 + x1) + 1, 1) POKE (y1 * 80 + x1) * 2 + 1, ScrDat((y1 * 80 + x1) + 1, 2) NEXT NEXT CALL Pause(3) LOOP UNTIL Sy = 1 AND sl = 25 FOR x = 1 TO 2000 POKE x * 2 - 2, ScrDat(x, 1): POKE x * 2 - 1, ScrDat(x, 2) NEXT FOR x = 1 TO 200 CALL SchonFrage CALL Pause(1) IF Stopp THEN GOTO ZappEnd NEXT LOOP ZappEnd: END SUB