RosettaCodeData/Task/Wireworld/BBC-BASIC/wireworld.basic

43 lines
1.2 KiB
Plaintext

Size% = 20
DIM P&(Size%-1,Size%-1), Q&(Size%-1,Size%-1)
VDU 23,22,Size%*8;Size%*8;64,64,16,0
OFF
DATA "tH........."
DATA ". . "
DATA " ... "
DATA ". . "
DATA "Ht.. ......"
FOR Y% = 12 TO 8 STEP -1
READ A$
FOR X% = 1 TO LEN(A$)
P&(X%+4, Y%) = ASCMID$(A$, X%, 1) AND 15
NEXT
NEXT Y%
COLOUR 8,0,0,255 : REM Electron head = blue
COLOUR 4,255,0,0 : REM Electron tail = red
COLOUR 14,255,200,0 : REM Conductor orange
REPEAT
FOR Y% = 1 TO Size%-2
FOR X% = 1 TO Size%-2
IF P&(X%,Y%)<>Q&(X%,Y%) GCOL P&(X%,Y%) : PLOT X%*16, Y%*16
CASE P&(X%,Y%) OF
WHEN 0: Q&(X%,Y%) = 0
WHEN 8: Q&(X%,Y%) = 4
WHEN 4: Q&(X%,Y%) = 14
WHEN 14:
T% = (P&(X%+1,Y%)=8) + (P&(X%+1,Y%+1)=8) + (P&(X%+1,Y%-1)=8) + \
\ (P&(X%-1,Y%)=8) + (P&(X%-1,Y%+1)=8) + (P&(X%-1,Y%-1)=8) + \
\ (P&(X%,Y%-1)=8) + (P&(X%,Y%+1)=8)
IF T%=-1 OR T%=-2 THEN Q&(X%,Y%) = 8 ELSE Q&(X%,Y%) = 14
ENDCASE
NEXT
NEXT Y%
SWAP P&(), Q&()
WAIT 50
UNTIL FALSE