snooow.basDenna kod är public domain. Om ni hittar fel eller vill ändra något i koden blir jag jätteglad om ni skickar dessa ändringar till jesper [at] fantasi [punkt] se.
DECLARE SUB InitSnow ()
DECLARE SUB PrepScreen ()
DECLARE SUB MakePlog ()
DECLARE SUB StopSnow ()
DECLARE SUB Ploga ()
Max = 100: sts = 0
DIM sx(Max), sy(Max)
DIM plog%(1 TO 594)
RANDOMIZE TIMER
SCREEN 12
MakePlog
PrepScreen
InitSnow
ON TIMER(180) GOSUB StopS
TIMER ON
WHILE INKEY$ = ""
IF sts > 0 THEN sts = sts + 1
IF sts > 210 THEN Ploga
FOR x = 0 TO Max - 1
IF sy(x) > 0 THEN
PSET (sx(x) + 150, sy(x) + 100), 0
sy(x) = sy(x) + 1
T = INT(RND * 3) - 1
IF (T <> 0) AND (POINT(sx(x) + T + 150, sy(x) + 100) = 0) THEN sx(x) = sx(x) + T
pt = POINT(sx(x) + 150, sy(x) + 1 + 100)
IF ((pt <> 0) AND (POINT(sx(x) + 150, sy(x) + 2 + 100) <> 0)) OR (pt > 0 AND pt < 15) THEN
IF POINT(sx(x) + 151, sy(x) + 101) = 0 THEN
sx(x) = sx(x) + 1
ELSE
IF POINT(sx(x) + 149, sy(x) + 101) = 0 THEN
sx(x) = sx(x) - 1
ELSE
PSET (sx(x) + 150, sy(x) + 100), 15
IF sts = 0 THEN
sy(x) = 1
ELSE
sy(x) = -1
END IF
sx(x) = RND * 320
END IF
END IF
END IF
PSET (sx(x) + 150, sy(x) + 100), 15
END IF
NEXT
WEND
END
StopS:
StopSnow
RETURN
DATA 00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,12,12,12,12,12,12,12,12,12,12,12,00,00
DATA 00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,01,01,12,12,12,01,01,09,12,12,00,00
DATA 00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,01,01,09,12,12,01,01,09,12,12,00,00
DATA 00,00,00,00,00,00,00,00,00,00,00,00,00,07,08,00,00,00,00,00,00,01,01,09,12,12,01,09,09,12,12,00,00
DATA 00,00,00,00,00,00,00,00,00,00,00,00,00,07,08,00,00,00,00,00,00,09,09,12,12,12,12,12,12,12,12,00,00
DATA 00,00,00,00,00,00,00,00,00,00,00,00,00,07,08,00,00,00,00,00,00,12,12,12,12,12,12,12,12,12,12,00,00
DATA 00,00,00,00,00,00,00,00,00,00,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,00,00
DATA 00,00,00,00,00,00,00,00,00,12,12,04,04,04,04,04,04,04,04,12,12,12,12,12,04,04,12,12,12,12,12,00,00
DATA 00,00,00,00,00,00,00,00,00,07,12,12,12,12,12,12,12,12,12,12,12,12,12,04,12,12,12,12,12,12,12,00,00
DATA 00,00,00,00,00,00,00,00,00,07,12,04,04,04,04,04,04,04,04,12,12,12,04,12,08,08,08,08,08,12,12,00,00
DATA 00,00,00,00,00,00,00,00,00,07,08,12,12,12,12,12,12,12,12,12,12,04,12,08,08,08,08,08,08,08,12,12,00
DATA 00,00,00,00,08,08,08,08,08,08,08,12,12,12,12,12,12,12,12,12,04,12,08,08,08,08,08,08,08,08,08,12,00
DATA 00,00,00,00,08,08,08,08,08,08,12,12,12,12,12,12,12,12,12,12,04,12,08,08,08,08,12,08,08,08,08,12,00
DATA 00,00,00,08,08,08,08,08,08,08,12,12,08,08,08,12,12,12,12,12,12,12,08,08,08,12,00,12,08,08,08,12,00
DATA 00,00,08,08,08,08,08,08,08,08,00,08,08,08,08,08,00,00,00,00,00,00,08,08,08,08,12,08,08,08,08,00,00
DATA 00,00,08,08,08,08,08,08,08,08,00,08,08,12,08,08,00,00,00,00,00,00,08,08,08,08,08,08,08,08,08,00,00
DATA 00,08,08,08,08,08,08,08,08,00,00,08,08,08,08,08,00,00,00,00,00,00,00,08,08,08,08,08,08,08,00,00,00
DATA 08,08,08,08,08,08,08,08,08,00,00,00,08,08,08,00,00,00,00,00,00,00,00,00,08,08,08,08,08,00,00,00,00
SUB InitSnow
SHARED sx(), sy(), Max
FOR x = 0 TO Max - 1
sx(x) = RND * 320
sy(x) = RND * -195
NEXT
FOR trs = 1 TO 200
FOR x = 0 TO Max - 1
IF sy(x) > 0 THEN PSET (sx(x) + 150, sy(x) + 100), 0
sy(x) = sy(x) + 1
T = 0
IF sy(x) > 0 THEN T = INT(RND * 3) - 1
IF (T <> 0) AND (POINT(sx(x) + T + 150, sy(x) + 100) = 0) THEN sx(x) = sx(x) + T
pt = POINT(sx(x) + 150, sy(x) + 1 + 100)
IF sy(x) > 0 THEN
IF ((pt <> 0) AND (POINT(sx(x) + 150, sy(x) + 2 + 100) <> 0)) OR (pt > 0 AND pt < 15) THEN
IF POINT(sx(x) + 151, sy(x) + 101) = 0 THEN
sx(x) = sx(x) + 1
ELSE
IF POINT(sx(x) + 149, sy(x) + 101) = 0 THEN
sx(x) = sx(x) - 1
ELSE
PSET (sx(x) + 150, sy(x) + 100), 15
IF sts = 0 THEN
sy(x) = 1
ELSE
sy(x) = -1
END IF
sx(x) = RND * 320
END IF
END IF
END IF
END IF
IF sy(x) > 0 THEN PSET (sx(x) + 150, sy(x) + 100), 15
NEXT
NEXT
END SUB
SUB MakePlog
SHARED plog%()
FOR y = 1 TO 18
FOR x = 1 TO 33
READ a
PSET (x, y), a
NEXT
NEXT
GET (1, 1)-(33, 18), plog%
CLS
END SUB
SUB Ploga
SHARED plog%(), sts
wq = 500: sts = 0
FOR px = 606 TO 580 STEP -1
PUT (px, 282), plog%, PSET
FOR pq = 1 TO wq
NEXT
NEXT
FOR px = 0 TO 90
LINE (321 + 150, 170 + 100)-(321 + 150 + SIN((px - 1) * 3.14159 / 180) * 30, 170 + 100 + COS((px - 1) * 3.14159 / 180) * 30), 0
LINE (321 + 150, 170 + 100)-(321 + 150 + SIN(px * 3.14159 / 180) * 30, 170 + 100 + COS(px * 3.14159 / 180) * 30), 15
PUT (580 - px, 282), plog%, PSET
FOR pq = 1 TO wq
NEXT
NEXT
FOR px = 490 TO 430 STEP -1
PUT (px, 282), plog%, PSET
FOR pq = 1 TO wq
NEXT
NEXT
FOR px = 90 TO 0 STEP -1
LINE (321 + 150, 170 + 100)-(321 + 150 + SIN((px + 1) * 3.14159 / 180) * 30, 170 + 100 + COS((px + 1) * 3.14159 / 180) * 30), 0
LINE (321 + 150, 170 + 100)-(321 + 150 + SIN(px * 3.14159 / 180) * 30, 170 + 100 + COS(px * 3.14159 / 180) * 30), 15
PUT (339 + px, 282), plog%, PSET
FOR pq = 1 TO wq
NEXT
NEXT
FOR px = 339 TO 240 STEP -1
PUT (px, 282), plog%, PSET
FOR pq = 1 TO wq
NEXT
NEXT
FOR px = 360 TO 270 STEP -1
LINE (-1 + 150, 170 + 100)-(-1 + 150 + SIN((px + 1) * 3.14159 / 180) * 30, 170 + 100 + COS((px + 1) * 3.14159 / 180) * 30), 0
LINE (-1 + 150, 170 + 100)-(-1 + 150 + SIN(px * 3.14159 / 180) * 30, 170 + 100 + COS(px * 3.14159 / 180) * 30), 15
PUT (150 + (px - 270), 282), plog%, PSET
FOR pq = 1 TO wq
NEXT
NEXT
FOR px = 150 TO 95 STEP -1
PUT (px, 282), plog%, PSET
FOR pq = 1 TO wq
NEXT
NEXT
FOR px = 270 TO 360
LINE (-1 + 150, 170 + 100)-(-1 + 150 + SIN((px - 1) * 3.14159 / 180) * 30, 170 + 100 + COS((px - 1) * 3.14159 / 180) * 30), 0
LINE (-1 + 150, 170 + 100)-(-1 + 150 + SIN(px * 3.14159 / 180) * 30, 170 + 100 + COS(px * 3.14159 / 180) * 30), 15
PUT (95 - (px - 269), 282), plog%, PSET
FOR pq = 1 TO wq
NEXT
NEXT
LINE (0, 280)-(50, 300), 0, BF
LINE (149, 99)-(471, 300), 15, B
LINE (150, 301)-(470, 301), 15
InitSnow
TIMER ON
END SUB
SUB PrepScreen
LOCATE 12, 35
COLOR 12
PRINT "God Jul!"
FOR x = 270 TO 335
FOR y = 175 TO 190
REM IF POINT(x + 1, y) = 12 AND POINT(x, y) = 0 THEN PSET (x, y), 1
IF POINT(x - 1, y) = 12 AND POINT(x, y) = 0 THEN PSET (x, y), 1
REM IF POINT(x, y + 1) = 12 AND POINT(x, y) = 0 THEN PSET (x, y), 1
IF POINT(x, y - 1) = 12 AND POINT(x, y) = 0 THEN PSET (x, y), 1
NEXT
NEXT
LINE (149, 99)-(471, 300), 15, B
LINE (150, 301)-(470, 301), 15
END SUB
SUB StopSnow
SHARED sts
TIMER OFF
sts = 1
END SUB
|