GR.OPEN 255,0,0,0,0,0 GR.SET.ANTIALIAS 0 GR.SET.STROKE 1 DIM r[255],g[255],b[255] !Разрешение пламени в данном случае 30 на 35 xsize=30 ysize=35 DIM mas[xsize,ysize],mas2[xsize,ysize] !Это плитра горения FOR q=1 TO 25 r[q]=q*10 g[q]=0 b[q]=0 NEXT FOR q=26 TO 85 r[q]=255 g[q]=ABS((q-25)*4.2) b[q]=0 NEXT FOR q=86 TO 141 r[q]=255 g[q]=255 b[q]=ABS((q-86)*4.51) NEXT FOR q=142 TO 255 r[q]=255 g[q]=255 b[q]=255 NEXT GR.COLOR 255,0,0,0 !Вообщето это лишнее но просто чтоб видно было колличество проходов !Будет выводиться счётчик. GR.COLOR 255,255,255,255,1 GR.TEXT.SIZE 90 GR.TEXT.ALIGN 2 GR.TEXT.DRAW txt,100,100," " ! Основной цикл DO ++sc GR.MODIFY txt,"text",STR$(sc) ! Начальные языки пламени FOR q=1 TO 5 q1=ABS(RND()*(xsize-2)) mas[q1+1,2]=255 NEXT !Считаем деградацию пламени FOR yy=2 TO ysize-1 FOR xx=2 TO xsize-1 !Упростил до умопомрачнения считаем среднее арифметическое из 4 клеток а в классике положено из 8 ARRAY.LOAD vr[],mas[xx-1,yy],mas[xx+1,yy],mas[xx,yy-1],mas[xx,yy+1] ARRAY.AVERAGE sz,vr[] mas2[xx,yy+1]=ABS(sz) UNDIM vr[] !Выводим огонь пока так. Но вообщето так не правильно. Не используйте такой вывод графики в своих программах. IF mas2[xx,yy]>1 THEN f=mas2[xx,yy] GR.COLOR 255,r[f],g[f],b[f],0 GR.POINT p,xx,yy END IF NEXT NEXT GR.RENDER ARRAY.COPY mas2[],mas[] UNTIL 2=4