Пятнашки

Пример игры Пятнашки. Для компиляции нужна библиотека Window9
Платформа: Windows.
Автор: Станислав Будинов 2010 - stabud@yandex.ru

пятнашки

#INCLUDE "window9.bi"


Enum

Button_0
Button_1
Button_2
Button_3
Button_4
Button_5
Button_6
Button_7
Button_8
Button_9
Button_10
Button_11
Button_12
Button_13
Button_14
Button_15
End Enum


Dim Shared dvig As Integer

Dim As Integer event

Randomize Timer

SetGadgetFont(,LoadFont("arial",22,,,1))

Function Open_Window_0() As Integer

   Var hwnd=OpenWindow("Пятнашки", 516, 346, 340, 390 )
   CenterWindow(hwnd)

   ButtonGadget(Button_1, 5, 10, 75, 75, "1")
   ButtonGadget(Button_2, 85, 10, 75, 75, "2")
   ButtonGadget(Button_3, 165, 10, 75, 75, "3")
   ButtonGadget(Button_4, 245, 10, 75, 75, "4")
   ButtonGadget(Button_5, 5, 90, 75, 75, "5")
   ButtonGadget(Button_6, 85, 90, 75, 75, "6")
   ButtonGadget(Button_7, 165, 90, 75, 75, "7")
   ButtonGadget(Button_8, 245, 90, 75, 75, "8")
   ButtonGadget(Button_9, 5, 170, 75, 75, "9")
   ButtonGadget(Button_10, 85, 170, 75, 75, "10")
   ButtonGadget(Button_11, 165, 170, 75, 75, "11")
   ButtonGadget(Button_12, 245, 170, 75, 75, "12")
   ButtonGadget(Button_13, 5, 250, 75, 75, "13")
   ButtonGadget(Button_14, 85, 250, 75, 75, "14")
   ButtonGadget(Button_15, 165, 250, 75, 75, "15")
   Var menu=Create_Menu()        'Создаем меню
   Var menName= MenuTitle(menu,"Меню")
   MenuItem(1,menName,"Новая игра")
   MenuItem(2,menName,"Об игре")
   MenuBar(menName)
   MenuItem(3,menName,"Выход")

End Function


Function Pustoe_mesto(a As Integer) As Integer

   Dim As Integer razmer_x,razmer_y,raz_x,raz_y,Schet,Schet1,Schet2,Schet3
   razmer_x = GadgetX(a)    'местонахождение гаджета
   razmer_y = GadgetY(a)

   For gad As Integer=1 To 15

      raz_x = GadgetX(gad)
      raz_y = GadgetY(gad)

      If razmer_x + 80 < 320 Then

         If razmer_x + 80 <> raz_x Or razmer_y <> raz_y Then    ' проверка справа
            Schet=Schet+1

         Endif
      Endif

      If razmer_x - 80 >= 5 Then

         If razmer_x - 80 <> raz_x  Or razmer_y <> raz_y  Then      'проверка слева
            Schet1=Schet1+1

         Endif
      Endif


      If razmer_y + 80 < 325 Then

         If razmer_y + 80 <> raz_y  Or razmer_x <> raz_x Then        'проверка снизу
            Schet2=Schet2+1

         Endif
      Endif



      If razmer_y - 80 >= 10 Then

         If razmer_y - 80 <> raz_y  Or razmer_x <> raz_x Then          'проверка сверху
            Schet3=Schet3+1

         Endif
      Endif
   Next



   If Schet=15 Then

      dvig=1

   Endif

   If Schet1=15 Then

      dvig=2

   Endif

   If Schet2=15 Then

      dvig=3

   Endif

   If Schet3=15 Then

      dvig=4


   Endif

End Function


Function peremeshenie(a As Integer,b As Integer)As Integer


   Select Case a
      Case 1

         ResizeGadget(b, GadgetX(b)+80)              'Перемещение кнопок
      Case 2

         ResizeGadget(b, GadgetX(b)-80)
      Case 3

         ResizeGadget(b,,GadgetY(b)+80)
      Case 4

         ResizeGadget(b,,GadgetY(b)-80)
   End Select

   dvig=0

End Function


Sub sluch()
   Dim  gadget As Integer

   For ww As Integer=1 To 2000


      gadget= Rnd*15              ' случайная расстановка
      If gadget=0 Then

         gadget=1

      Endif
      Pustoe_mesto(gadget)
      peremeshenie(dvig,gadget)
   Next


End Sub




Open_window_0()
sluch()

Do


   event=WindowEvent()

   If event=EventGadget  Then

      For gadget As Integer=1 To 15

         If gadget = EventNumber    Then              ' Идентификация гаджета
            Pustoe_mesto(gadget)
            peremeshenie(dvig,gadget)
            Exit For

         Endif
      Next

   Endif


   If GadgetX(1)+GadgetY(1)=15 And GadgetX(2)+GadgetY(2)=95 And GadgetX(3)+GadgetY(3)=175 And GadgetX(4)+GadgetY(4)=255 Then

      If GadgetX(5)+GadgetY(5)=95 And GadgetX(6)+GadgetY(6)=175 And GadgetX(7)+GadgetY(7)=255 And GadgetX(8)+GadgetY(8)=335 Then

         If GadgetX(9)+GadgetY(9)=175 And GadgetX(10)+GadgetY(10)=255 And GadgetX(11)+GadgetY(11)=335 And GadgetX(12)+GadgetY(12)=415 Then

            If GadgetX(13)+GadgetY(13)=255 And GadgetX(14)+GadgetY(14)=335 And GadgetX(15)+GadgetY(15)=415 Then

               MessBox("Победа", "Молодец ты сумел(а) собрать пятнашку.")
               sluch()
            Endif
         Endif
      Endif
   Endif

   If event=EventMenu  Then 'события меню
      Select Case  EventNumber
         Case 1

            sluch()
         Case 2

            MessBox("Об игре", "Создано в Freebasic, автор: Станислав Будинов")
         Case 3

            End

      End Select

   Endif
   
Loop Until event=EventClose