REM > Blend ONERRORONERROROFF:MODE27:REPORT:PRINTERL:END DIM g%(50, 50) REPEAT MODE 28 :REM 640 x 480 VDU 28, 0, 0, 79, 0 REPEAT INPUT "Grid width: "w$ w% = VAL(w$) IF w% > 50 THEN VDU7: PRINT "Maximum is 50";: g=GET: PRINT IF w% < 2 THEN VDU7: PRINT "Minimum is 2";: g=GET: PRINT UNTIL (w% <= 50) AND (w% > 1) REPEAT INPUT "Grid height: "h$ h% = VAL(h$) IF h% > 50 THEN VDU7: PRINT "Maximum is 50";: g=GET: PRINT IF h% < 2 THEN VDU7: PRINT "Minimum is 2";: g=GET: PRINT UNTIL (h% <= 50) AND (h% > 1) OFF dx% = 1279 / w% dy% = 920 / h% IF dx% < dy% THEN d% = dx% ELSE d% = dy% GCOL %111111 TINT %11 FOR x% = 0 TO w% LINE x% * d%, 0, x% * d%, h% * d% NEXT FOR y% = 0 TO h% LINE 0, y% * d%, w% * d%, y% * d% NEXT g%() = 0 PRINT "Use 0-6 to choose colours and mouse to place atoms; press space to start"; MOUSE ON MOUSE RECTANGLE 0, 0, w% * d% - 1, h% * d% - 1 MOUSE X%, Y%, Z% ox% = X% / d% + 1 oy% = Y% / d% + 1 c% = 1 GCOL %000011 TINT %11 REPEAT MOUSE X%, Y%, Z% x% = X% / d% + 1 y% = Y% / d% + 1 i$ = INKEY$(0) IF (x% <> ox%) OR (y% <> oy%) THEN PRINT '"Coordinates: "+STR$x%+", "+STR$y%; ox% = x% oy% = y% ENDIF CASE i$ OF WHEN "1": c% = 1: GCOL %000011 TINT %11: PRINT '"Red selected"; WHEN "2": c% = 2: GCOL %001100 TINT %11: PRINT '"Green selected"; WHEN "3": c% = 3: GCOL %110000 TINT %11: PRINT '"Blue selected"; WHEN "4": c% = 4: GCOL %001111 TINT %11: PRINT '"Yellow selected"; WHEN "5": c% = 5: GCOL %110011 TINT %11: PRINT '"Magenta selected"; WHEN "6": c% = 6: GCOL %111100 TINT %11: PRINT '"Cyan selected"; WHEN "0": c% = 0: GCOL %000000 TINT %00: PRINT '"Removing atoms"; ENDCASE IF Z% > 0 THEN g%(x%, y%) = c% CIRCLE FILL x% * d% - (d% / 2), y% * d% - (d% / 2), (d% / 2) - 4 ENDIF UNTIL i$ = " " MOUSE OFF GCOL %000000 TINT %00 FOR x% = 1 TO w% - 1 LINE x% * d%, 2, x% * d%, h% * d% - 1 NEXT FOR y% = 1 TO h% - 1 LINE 2, y% * d%, w% * d% - 1, y% * d% NEXT PRINT '"Diffusing... press a key to end"; REPEAT x% = RND(w%) y% = RND(h%) tx% = x% ty% = y% IF g%(x%, y%) > 0 THEN CASE RND(8) OF WHEN 1: ty% += 1 WHEN 2: tx% += 1: ty% += 1 WHEN 3: tx% += 1 WHEN 4: tx% += 1: ty% -= 1 WHEN 5: ty% -= 1 WHEN 6: tx% -= 1: ty% -= 1 WHEN 7: tx% -= 1 WHEN 8: tx% -= 1: ty% += 1 ENDCASE IF (tx% > 0) AND (ty% > 0) AND (tx% <= w%) AND (ty% <= h%) THEN IF g%(tx%, ty%) = 0 THEN g%(tx%, ty%) = g%(x%, y%) g%(x%, y%) = 0 GCOL %000000 TINT %00 CIRCLE FILL x% * d% - (d% / 2), y% * d% - (d% / 2), (d% / 2) - 4 CASE g%(tx%, ty%) OF WHEN 1: GCOL %000011 TINT %11 WHEN 2: GCOL %001100 TINT %11 WHEN 3: GCOL %110000 TINT %11 WHEN 4: GCOL %001111 TINT %11 WHEN 5: GCOL %110011 TINT %11 WHEN 6: GCOL %111100 TINT %11 ENDCASE CIRCLE FILL tx% * d% - (d% / 2), ty% * d% - (d% / 2), (d% / 2) - 4 ENDIF ENDIF ENDIF UNTIL INKEY(0) > -1 PRINT '"Press a key..."; IF GET UNTIL 0