'* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *' '* "Jumping Stars" - Screen Saver *' '* *' '* File name: JS.BAS *' '* Type: Quick Basic Source Code *' '* Version: 1.10 *' '* Created in: Feb. 1997 *' '* Created by: Zsolt Nagy Perge *' '* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *' DEFINT A-Z '* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *' '* Function Declarations *' '* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *' DECLARE SUB Initialize () DECLARE SUB JumpingStars () DECLARE SUB GetScreen (ScreenBuffer(), VideoMemory) DECLARE SUB PutScreen (ScreenBuffer(), VideoMemory) '* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *' '* Variable Declarations *' '* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *' CONST Sample$ = "ъщ+x*" ' Star samples CONST SNumber = 64 ' Star number DIM ScreenBuffer(4002) ' Output screen buffer '* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *' '* Main Function *' '* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *' Main: GetScreen ScreenBuffer(), &HB800 JumpingStars PutScreen ScreenBuffer(), &HB800 COLOR 7, 0 PRINT SYSTEM '* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *' SUB GetScreen (ScreenBuffer(), VideoMemory) DEF SEG = VideoMemory FOR Counter = 0 TO 4000 ScreenBuffer(Counter) = PEEK(Counter) NEXT Counter DEF SEG ScreenBuffer(4002) = POS(0) ScreenBuffer(4001) = CSRLIN END SUB SUB Initialize LOCATE , , 0, 12, 13 SCREEN 0 WIDTH 80, 25 COLOR 7, 0 CLS END SUB SUB JumpingStars DIM SC(64), SC$(64) ' Star color and character DIM SX(64), SY(64) ' Star x and y coordinates DIM SXM(64), SYM(64) ' Star x increase and y increase Initialize FOR Counter = 1 TO SNumber SC$(Counter) = MID$(Sample$, RND * LEN(Sample$) + 1, 1) SC(Counter) = RND * 15 SX(Counter) = RND * 79 + 1 SY(Counter) = RND * 24 + 1 SXM(Counter) = RND * 9 + 1 SYM(Counter) = RND * 1 + 1 COLOR SC(Counter) LOCATE SY(Counter), SX(Counter): PRINT SC$(Counter); NEXT Counter DO WHILE INKEY$ = "" FOR Counter = 1 TO (64 - SNumber) * 100: NEXT Counter FOR Counter = 1 TO SNumber COLOR SC(Counter) LOCATE SY(Counter), SX(Counter): PRINT " "; IF SX(Counter) <= ABS(SXM(Counter)) THEN SXM(Counter) = RND * 10 + 1 IF SY(Counter) <= ABS(SYM(Counter)) THEN SYM(Counter) = RND * 1 + 1 IF SX(Counter) + SXM(Counter) > 80 THEN SXM(Counter) = -(RND * 10 + 1) IF SY(Counter) + SYM(Counter) > 25 THEN SYM(Counter) = -(RND * 1 + 1) SX(Counter) = SX(Counter) + SXM(Counter) SY(Counter) = SY(Counter) + SYM(Counter) LOCATE SY(Counter), SX(Counter): PRINT SC$(Counter); NEXT Counter LOOP END SUB SUB PutScreen (ScreenBuffer(), VideoMemory) DEF SEG = VideoMemory FOR Counter = 0 TO 4000 POKE Counter, ScreenBuffer(Counter) NEXT Counter LOCATE ScreenBuffer(4001), ScreenBuffer(4002) DEF SEG END SUB