Microsoft Small Basic

Program Listing: PQK191
' Artificial Neuron 0.1
' Copyright © 2016 Nonki Takahashi. The MIT License
' Update 2016-01-14
'
GraphicsWindow.Title = "Artificial Neuron 0.1"
gw = 598
gh = 428
GraphicsWindow.Width = gw
GraphicsWindow.Height = gh
w = "1=0.5;2=0.5;"
x = "1=1;2=0;"
b = -0.7
size = 30
InitNeuron()
While "True"
If textTyped Then
UpdateNeuron()
textTyped = "False"
Else
Program.Delay(100)
EndIf
EndWhile

Sub InitNeuron
n = Array.GetItemCount(w)
a = 0
oy = -size / 2
GraphicsWindow.FontSize = size * 0.8
GraphicsWindow.FontName = "Trebuchet MS"
py[n + 1] = Math.Floor((1 + 1) * gh / (n + 2)) + oy
px[n + 1] = Math.Floor(2 * gw / (2 + 1))
For i = 0 To n
py[i] = Math.Floor((i + 1) * gh / (n + 2)) + oy
px[i] = Math.Floor(1 * gw / (2 + 1))
GraphicsWindow.DrawLine(px[i], py[i], px[n + 1], py[n + 1])
GraphicsWindow.BrushColor = "Cyan"
GraphicsWindow.FillEllipse(px[i] - size / 2, py[i] - size / 2, size, size)
GraphicsWindow.BrushColor = "Black"
If i = 0 Then
txtX[i] = Shapes.AddText(1)
Shapes.Move(txtX[i], px[i] - 2 * size, py[i] - size / 1.7)
Else
txtX[i] = Controls.AddTextBox(px[i] - 2 * size, py[i] - size / 1.7)
Controls.SetSize(txtX[i], size, size)
Controls.SetTextBoxText(txtX[i], x[i])
GraphicsWindow.DrawText(px[i] - 3.3 * size, py[i] - size / 2, "x" + i)
EndIf
txtW[i] = Controls.AddTextBox((px[i] + px[n + 1]) / 2 - size, (py[i] + py[n + 1]) / 2 + size / 4)
Controls.SetSize(txtW[i], size * 2, size)
If i = 0 Then
GraphicsWindow.DrawText((px[i] + px[n + 1]) / 2 - 2.5 * size, (py[i] + py[n + 1]) / 2 + size / 3.5, "b")
Controls.SetTextBoxText(txtW[i], b)
Else
GraphicsWindow.DrawText((px[i] + px[n + 1]) / 2 - 2.5 * size, (py[i] + py[n + 1]) / 2 + size / 3.5, "w" + i)
Controls.SetTextBoxText(txtW[i], w[i])
EndIf
EndFor
GraphicsWindow.BrushColor = "Cyan"
GraphicsWindow.FillEllipse(px[n + 1] - size / 2, py[n + 1] - size / 2, size, size)
GraphicsWindow.BrushColor = "Black"
txtY = Controls.AddTextBox(px[n + 1] + 1.7 * size, py[n + 1] - size / 1.7)
GraphicsWindow.DrawText(px[n + 1] + size, py[n + 1] - size / 2, "y")
Controls.SetSize(txtY, size, size)
Controls.TextTyped = OnTextTyped
textTyped = "True"
EndSub

Sub OnTextTyped
textTyped = "True"
EndSub

Sub UpdateNeuron
n = Array.GetItemCount(w)
b = Controls.GetTextBoxText(txtW[0])
a = b
For i = 1 To n
w[i] = Controls.GetTextBoxText(txtW[i])
x[i] = Controls.GetTextBoxText(txtX[i])
a = a + w[i] * x[i]
Controls.SetTextBoxText(txtX[i], x[i])
Controls.SetTextBoxText(txtW[i], w[i])
EndFor
If a >= 0 Then
y = 1
Else
y = 0
EndIf
Controls.SetTextBoxText(txtY, y)
EndSub