48 FreeBASIC. Программируем "Жизнь". Расстанавливаем клетки мышью.
Для отладки программы в её тексте мы заполнили 7 клеток подряд единицей, можно было бы и дале так заполнять массив вручную, в тексте программы. Но было бы хорошо сделать редактор - расстановку клеток жизни на поле,например мышью.
Команды работы с мышью указаны в уроках 35, 36.
Но как по экранным координатам занести значения в массив? Точно так же как и при выводе массива-жизни на экран(расстановке кружочков, клеток жизнь).. только направив конвертацию в обратную сторону.
if life(x,y)=1 then circle(2*R*x+K,2*R*y+K),R*0.7,2:paint(2*R*x+K,2*R*y+K),2,2
В программе то что выдает GetMouse я обозначил через mx,my
Решив уравнение mx=2Rx+K найдём x=(mx-K)/2/R, возьмём целую часть... x=int((mx-K)/2/R)
Do
mr = GetMouse (mx, my, , mb)
If mr = 0 Then
If mb And 1 Then
x=int((mx-K)/2/R)
y=int((my-K)/2/R)
if lifenew(x,y)=1 then
lifenew(x,y)=0
paint(2*R*x+K,2*R*y+K),0,0
circle(2*R*x+K,2*R*y+K),R*0.7,0
else
lifenew(x,y)=1
circle(2*R*x+K,2*R*y+K),R*0.7,2
paint(2*R*x+K,2*R*y+K),2,2
End IF
End If
End If
loop while asc(inkey())<>27 and asc(inkey())<>32
Стоит немного улучшить программу, т.к. при установке клетки она неоднокрано устанавливается и снимается. Добавим условие чтобы в обном и том же месте не устанавливалась/не снималась клетка.
Do
mr = GetMouse (mx, my, , mb)
If mr = 0 Then
If mb And 1 and (mx<>mxo or my<>myo or mb<>mbo) Then
x=int((mx-K)/2/R)
y=int((my-K)/2/R)
if lifenew(x,y)=1 then
lifenew(x,y)=0
paint(2*R*x+K,2*R*y+K),0,0
circle(2*R*x+K,2*R*y+K),R*0.7,0
else
lifenew(x,y)=1
circle(2*R*x+K,2*R*y+K),R*0.7,2
paint(2*R*x+K,2*R*y+K),2,2
End IF
mxo=mx:myo=my:mbo=mb
End If
End If
loop while asc(inkey())<>27 and asc(inkey())<>32