=begin
'ブラウザ版small basicで動くコード
'Win版で動かす場合は 計算行に -200とある数式から-200を消す必要があるかもしれません。
'ゲームの取説はゲーム画面に書いてあります。
head=0
tail=1
hMax=250
wMax=200
cellSize=50
leftX=100
topY=150
oldX=-1
oldY=-1
snakes_count=4
x=-1
y=-1
grab_snake=-1
grab_snake_head_or_tail=-1
snakes_colors[1]=GraphicsWindow.GetColorFromRGB(255, 0, 0)
snakes_colors[2]=GraphicsWindow.GetColorFromRGB(32, 128, 196)
snakes_colors[3]=GraphicsWindow.GetColorFromRGB(128, 196, 32)
snakes_colors[4]=GraphicsWindow.GetColorFromRGB(128, 128, 128)
GraphicsWindow.Show()
For i = 0 To hMax Step cellSize
GraphicsWindow.DrawLine(leftX,i+topY, wMax+leftX,i+topY)
EndFor
For i = 0 To wMax step cellSize
GraphicsWindow.DrawLine(leftX+i, 0+topY, leftX+i, hMax+topY)
EndFor
For i = 0 To hMax Step cellSize
GraphicsWindow.DrawLine(cellSize*10,topY+i, wMax+cellSize*10,topY+i)
EndFor
For i = 0 To wMax step cellSize
GraphicsWindow.DrawLine(cellSize*10+i, topY, cellSize*10+i, hMax+topY)
EndFor
Mouse.ShowCursor()
eventMode=0
snakes[0][0][0]=0
snakes[0][0][1]=0
snakes_body[0][0]=Shapes.AddEllipse(25, 25)
snakes_body_type[0][0]=Shapes.AddText("蛇の寝床はままならぬ horie shinniti")
Shapes.HideShape(snakes_body[0][0])
Shapes.HideShape(snakes_body_type[0][0])
set_snakes()
GraphicsWindow.MouseDown=mousedown
GraphicsWindow.MouseMove=mousemove
GraphicsWindow.MouseUp=mouseup
Sub set_snakes
snakes[0][0][0]=0
snakes[0][0][1]=0
snakes[0][1][0]=0
snakes[0][1][1]=0
snakes[0][2][0]=0
snakes[0][2][1]=0
snakes[0][3][0]=0
snakes[0][3][1]=0
snakes[0][4][0]=0
snakes[0][4][1]=0
snakes[1][0][0]=2
snakes[1][0][1]=2
snakes[1][1][0]=3
snakes[1][1][1]=2
snakes[1][2][0]=3
snakes[1][2][1]=3
snakes[1][3][0]=3
snakes[1][3][1]=4
snakes[2][0][0]=0
snakes[2][0][1]=0
snakes[2][1][0]=0
snakes[2][1][1]=1
snakes[2][2][0]=1
snakes[2][2][1]=1
snakes[2][3][0]=2
snakes[2][3][1]=1
snakes[3][0][0]=1
snakes[3][0][1]=0
snakes[3][1][0]=2
snakes[3][1][1]=0
snakes[3][2][0]=3
snakes[3][2][1]=0
snakes[3][3][0]=3
snakes[3][3][1]=1
snakes[4][0][0]=0
snakes[4][0][1]=3
snakes[4][1][0]=0
snakes[4][1][1]=4
snakes[4][2][0]=1
snakes[4][2][1]=4
snakes[4][3][0]=2
snakes[4][3][1]=4
GraphicsWindow.FontSize=16
For i = 1 To snakes_count
GraphicsWindow.BrushColor=snakes_colors[i]
For j = 0 To 3
snakes_body[i][j]=Shapes.AddEllipse(cellSize-10, cellSize-10)
EndFor
GraphicsWindow.BrushColor=GraphicsWindow.GetColorFromRGB(255, 255, 255)
snakes_body_type[i][0]=Shapes.AddText("頭部")
snakes_body_type[i][1]=Shapes.AddText("胴1")
snakes_body_type[i][2]=Shapes.AddText("胴2")
snakes_body_type[i][3]=Shapes.AddText("尻尾")
EndFor
For i = 1 To snakes_count
GraphicsWindow.BrushColor=snakes_colors[i]
For j = 0 To 3
GraphicsWindow.FillEllipse(cellSize*(10+i-1), cellSize*(j)+topY, cellSize-5, cellSize-5)
EndFor
EndFor
GraphicsWindow.BrushColor=GraphicsWindow.GetColorFromRGB(255, 255, 255)
For i = 0 To 3
GraphicsWindow.DrawText(cellSize*(10+i), cellSize*0+topY+5, "頭部")
GraphicsWindow.DrawText(cellSize*(10+i), cellSize*1+topY+5, "胴1")
GraphicsWindow.DrawText(cellSize*(10+i), cellSize*2+topY+5, "胴2")
GraphicsWindow.DrawText(cellSize*(10+i), cellSize*3+topY+5, "尻尾")
EndFor
GraphicsWindow.BrushColor=GraphicsWindow.GetColorFromRGB(255, 255, 255)
For i = 1 To snakes_count
For j = 0 To 3
px=cellSize*snakes[i][j][0]+leftX+5
py=cellSize*snakes[i][j][1]+topY+5
Shapes.Move(snakes_body[i][j], px,py)
Shapes.Move(snakes_body_type[i][j], px+5, py+5)
EndFor
EndFor
GraphicsWindow.BrushColor=GraphicsWindow.GetColorFromRGB(255, 0, 0)
GraphicsWindow.DrawText(10, 3, "ルール")
GraphicsWindow.BrushColor=GraphicsWindow.GetColorFromRGB(0, 0, 0)
GraphicsWindow.DrawText(10, 30, "色付きの蛇が左の盤面にいます")
GraphicsWindow.DrawText(10, 60, "色付き蛇の尻尾か頭部の上で右クリックを押したままマウスを動かせば、蛇を引っ張れるのでたくさん引っ張り")
GraphicsWindow.DrawText(10, 90, "右の配置と同じにしてください、頭部と尻尾が逆にならない様に注意")
GraphicsWindow.DrawText(10, 120,"クリア判定は目視でお願いします、スライドパズルでスライドする度にスライドしたピースが変形するパズルが成立するかの試作品です")
GraphicsWindow.DrawText(10, 600, "マウスの判定がすこし不安定なので、蛇が動かない時は引っ張る操作を何度か試してください,胴をひっぱても動きません")
EndSub
Sub mouseup
oldX=-1
eventMode=0
EndSub
Sub move_snake
If grab_snake_head_or_tail=head Then
For i = 2 To 0 step -1
snakes[grab_snake][i+1][0]=snakes[grab_snake][i][0]
snakes[grab_snake][i+1][1]=snakes[grab_snake][i][1]
EndFor
snakes[grab_snake][0][0]=x
snakes[grab_snake][0][1]=y
For i = 0 To 3
px=snakes[grab_snake][i][0]*cellSize+leftX+5
py=snakes[grab_snake][i][1]*cellSize+topY+5
Shapes.Move(snakes_body[grab_snake][i], px, py)
Shapes.Move(snakes_body_type[grab_snake][i], px, py)
EndFor
ElseIf grab_snake_head_or_tail=tail Then
For i = 0 To 2 Step 1
snakes[grab_snake][i][0]=snakes[grab_snake][i+1][0]
snakes[grab_snake][i][1]=snakes[grab_snake][i+1][1]
EndFor
snakes[grab_snake][3][0]=x
snakes[grab_snake][3][1]=y
For i = 3 To 0 step -1
px=snakes[grab_snake][i][0]*cellSize+leftX+5
py=snakes[grab_snake][i][1]*cellSize+topY+5
Shapes.Move(snakes_body[grab_snake][i], px, py)
Shapes.Move(snakes_body_type[grab_snake][i], px+5, py+5)
EndFor
EndIf
EndSub
Sub mousemove
if eventMode=0 and Mouse.IsRightButtonDown and oldX<>-1 Then
x=Math.floor((Mouse.MouseX-leftX)/cellSize)
y=Math.Floor((Mouse.MouseY-topY-200)/cellSize)
len=Math.abs(oldX-x)+Math.Abs(oldY-y)
For i = 1 To snakes_count
For j = 0 To 3
x1=snakes[i][j][0]
y1=snakes[i][j][1]
if x1=x and y1=y then
x=-1
EndIf
EndFor
EndFor
if eventMode=0 and len=1 and 0<=x and x<=3 and 0<=y and y<=4 then
eventMode=1
move_snake()
oldX=x
oldY=y
eventMode=0
endif
EndIf
EndSub
Sub mousedown
If Mouse.IsRightButtonDown Then
oldX=Math.floor((mouse.MouseX-leftX)/cellSize)
oldY=math.floor((Mouse.MouseY-topY-200)/cellSize)
If oldX<0 or 3<oldX or oldY<0 or 4<oldY Then
oldX=-1
EndIf
grab_snake=-1
For i = 1 To snakes_count
If snakes[i][0][0]=oldX and snakes[i][0][1]=oldY Then
grab_snake=i
grab_snake_head_or_tail=head
EndIf
If snakes[i][3][0]=oldX and snakes[i][3][1]=oldY Then
grab_snake=i
grab_snake_head_or_tail=tail
EndIf
EndFor
If grab_snake=-1 Then
oldX=-1
EndIf
EndIf
EndSub
=end
puts "small basic language slide puzzle web browser"