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 
программированиеfreebasicкомпьютерыsgfbsgpgобучениеобразованиеbod
673
558.658 GOLOS
0
В избранное
Сергей
Кибернетик... а кто это? deals.weku.io/@sergiy, serey.io/@sergiy, whaleshares.io/@sergiy, sola.ai/nsergiy
673
0

Зарегистрируйтесь, чтобы проголосовать за пост или написать комментарий

Авторы получают вознаграждение, когда пользователи голосуют за их посты. Голосующие читатели также получают вознаграждение за свои голоса.

Зарегистрироваться
Комментарии (3)
Сортировать по:
Сначала старые