#Include "window9.bi"
#Include "linesType.bi"

Dim Shared As LinesGui Lg
Randomize Timer
LinesGui()

'Новая игра
Sub NewGame()
	Dim As Integer TControl=1
	Lg.NumberPoints=0
	Lg.NumberBall=0
	Lg.BALLClick=FALSE
	For a As Integer=0 To 8
		For b As Integer=0 To 8
			Lg.XY_1(a,b)=0
			Lg.XY_2(a,b)=0
			SetImageGadget(TControl,Lg.img(7))
			TControl+=1
		Next
	Next
	RandomBall()
End Sub
'Добавление шаров
Sub RandomBall()
	Dim As Integer x,y,z,n
	if DeleteBALLLine()=FALSE Then
		Do
			x=Int(Rnd*9)
			y=Int(Rnd*9)
			z=Int(Rnd*6)+1
			if Lg.XY_1(x,y)=0 Then
				Lg.XY_1(x,y)=z
				SetImageGadget((y*9+x)+1,Lg.img(z))
				Lg.NumberBall+=1 : n+=1
			EndIf
		Loop  until n=3 or Lg.NumberBall=81
		DeleteBALLLine
	EndIf
	If Lg.NumberBall=81 Then MessBox("Сообщение","Похоже на то, что вы проиграли")
End Sub
'Функция возвращает True если шары были удалены
Function DeleteBALLLine() As BOOL
	Dim As Integer i,j
	Function=FALSE
'---------------------метка шаров к удалению------------------
	'по горизонталям
	for i=0 to 4
		for j=0 to 8
			if Lg.XY_1(i,j)=Lg.XY_1(i+1,j) and Lg.XY_1(i,j)=Lg.XY_1(i+2,j) and Lg.XY_1(i,j)=Lg.XY_1(i+3,j) and Lg.XY_1(i,j)=Lg.XY_1(i+4,j) and Lg.XY_1(i,j)>0 Then
				Lg.XY_2(i,j)=-20
				Lg.XY_2(i+1,j)=-20
				Lg.XY_2(i+2,j)=-20
				Lg.XY_2(i+3,j)=-20
				Lg.XY_2(i+4,j)=-20
			EndIf
		Next
	next
	'по вертикалям
	for i=0 to 8
		for j=0 to 4
			if Lg.XY_1(i,j)=Lg.XY_1(i,j+1) and Lg.XY_1(i,j)=Lg.XY_1(i,j+2) and Lg.XY_1(i,j)=Lg.XY_1(i,j+3) and Lg.XY_1(i,j)=Lg.XY_1(i,j+4) and Lg.XY_1(i,j)>0 Then
				Lg.XY_2(i,j)=-20
				Lg.XY_2(i,j+1)=-20
				Lg.XY_2(i,j+2)=-20
				Lg.XY_2(i,j+3)=-20
				Lg.XY_2(i,j+4)=-20
			EndIf
		Next
	Next
	'по диагоналям
	for i=0 to 4
		for j=0 to 4
			if Lg.XY_1(i,j)=Lg.XY_1(i+1,j+1) and Lg.XY_1(i,j)=Lg.XY_1(i+2,j+2) and Lg.XY_1(i,j)=Lg.XY_1(i+3,j+3) and Lg.XY_1(i,j)=Lg.XY_1(i+4,j+4) and Lg.XY_1(i,j)>0 Then
				Lg.XY_2(i,j)=-20
				Lg.XY_2(i+1,j+1)=-20
				Lg.XY_2(i+2,j+2)=-20
				Lg.XY_2(i+3,j+3)=-20
				Lg.XY_2(i+4,j+4)=-20
			EndIf
		Next
	Next
	For i=8 to 4 Step -1
		for j=0 to 4
			if Lg.XY_1(i,j)=Lg.XY_1(i-1,j+1) and Lg.XY_1(i,j)=Lg.XY_1(i-2,j+2) and Lg.XY_1(i,j)=Lg.XY_1(i-3,j+3) and Lg.XY_1(i,j)=Lg.XY_1(i-4,j+4) and Lg.XY_1(i,j)>0 then
				Lg.XY_2(i,j)=-20
				Lg.XY_2(i-1,j+1)=-20
				Lg.XY_2(i-2,j+2)=-20
				Lg.XY_2(i-3,j+3)=-20
				Lg.XY_2(i-4,j+4)=-20
			endif
		Next
	Next
	'удаление
	for i=0 to 8
		for j=0 to 8
			if Lg.XY_2(i,j)=-20 Then
				Sleep(200)
				SetImageGadget((j*9+i)+1,Lg.img(7))
				DeleteBALLLine=true
				Lg.NumberBall-=1
				Lg.NumberPoints+=20
				Lg.XY_1(i,j)=0
				Lg.XY_2(i,j)=0
			EndIf
		Next
	Next
   SetWindowText(Lg.hwnd,"Lines,  " & "Очки: " & Lg.NumberPoints)
End Function
' Поиск дозволенного хода
Sub FindZero(x1 As integer,y1 As Integer)
	Dim As Integer Colonka, Stolbik
	for Colonka=x1-1 to x1+1
		For Stolbik=y1-1 to y1+1
			if Colonka >= 0 and Colonka <9 And _
				Stolbik >= 0 and Stolbik <9 and Lg.XY_2(Colonka,Stolbik)=0 and Lg.XY_1(Colonka,Stolbik)=0 Then
				if Colonka=x1-1 and Stolbik=y1-1 then Continue For
				if Colonka=x1+1 and Stolbik=y1-1 then Continue For
				if Colonka=x1+1 and Stolbik=y1+1 then Continue For
				if Colonka=x1-1 and Stolbik=y1+1 then Continue For
				Lg.XY_2(Colonka,Stolbik)=1
				FindZero(Colonka,Stolbik)
			EndIf
		Next
	Next
End Sub
'Обработчик события мышки 
Sub OnMouseDown(id As Integer)
	Dim As UInteger x,y
	id-=1
	x=(id Mod 9)
	y=id\9
	If Lg.XY_1(x,y)>0 Then
		Erase Lg.XY_2
		Lg.TempX=x
		Lg.TempY=y
		Lg.TempZ=Lg.XY_1(x,y)
		Lg.BALLClick=true
		FindZero(x,y)
	EndIf
	if Lg.XY_1(x,y)=0 and (Lg.BALLClick=true) and Lg.XY_2(x,y)=1 Then
		SetImageGadget((Lg.TempY*9+Lg.TempX)+1,Lg.img(7))
		SetImageGadget((y*9+x)+1,Lg.img(Lg.TempZ))
		Lg.BALLClick=false
		Lg.XY_1(Lg.TempX,Lg.TempY)=0
		Lg.XY_1(x,y)=Lg.TempZ
		RandomBALL 'добавляем шарики
	EndIf
End Sub
'Gui Интерфейс
Sub LinesGui()
	For a As Integer=1 To 7
		Lg.img(a)=Load_image("Img\" & a & ".png")
	Next
	Lg.hwnd=OpenWindow("Lines", 320, 136, 332, 373)
	Lg.Menu=Create_Menu()
	Lg.Menuname=MenuTitle(Lg.Menu,"Игра")
	MenuItem(MENU1,Lg.Menuname,"Новая игра")
	MenuItem(MENU2,Lg.Menuname,"Об игре")
	MenuItem(MENU3,Lg.Menuname,"Выход")
	Lg.event=1
	For a As Integer=0 To 8
		For b As Integer=0 To 8
			Lg.ImGadget(Lg.event)=ImageGadget(Lg.event,b*33+10,a*33+10,33,33,Lg.img(7))
			Lg.event+=1
		Next
	Next
	Do
		Lg.event=WaitEvent()
		If Lg.event=eventmenu Then
			Select Case EventNumber
				Case 1
					NewGame()
				Case 2
					MessBox("Об игре","Игру написал Волков Сергей на языке Delphi. Адаптировал под FreeBasic Станислав Будинов")
				Case 3
					Lg.event=EventClose
			End Select
		ElseIf Lg.event=eventGadget Then
			Select Case EventNumber
				Case 1 To 81
					OnMouseDown(EventNumber)
			End Select
		EndIf
	Loop Until Lg.event=EventClose
End Sub