Enumeration
#Window_0
EndEnumeration
Enumeration
#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
EndEnumeration
Global dvig
Procedure Open_Window_0()
If OpenWindow(#Window_0, 516, 346, 325, 353, "Пятнашки", #PB_Window_SystemMenu | #PB_Window_MinimizeGadget | #PB_Window_SizeGadget | #PB_Window_TitleBar | #PB_Window_WindowCentered )
If LoadFont(0, "Arial", 22)
SetGadgetFont(#PB_Default, FontID(0)) ; Устанавливаем шрифт по умолчанию
EndIf
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")
If CreateMenu(1,WindowID(#Window_0)) ;Создаем меню
MenuTitle("Меню")
MenuItem(1,"Новая игра")
MenuItem(2,"Об игре")
MenuBar()
MenuItem(3,"Выход")
EndIf
EndIf
EndProcedure
Procedure.l Pustoe_mesto(a)
razmer_x = GadgetX(a) ;местонахождение гаджета
razmer_y = GadgetY(a)
For gad=1 To 15
raz_x = GadgetX(gad)
raz_y = GadgetY(gad)
If razmer_x + 80 < 320
If razmer_x + 80 <> raz_x Or razmer_y <> raz_y ; проверка справа
Schet=Schet+1
EndIf
EndIf
If razmer_x - 80 >= 5
If razmer_x - 80 <> raz_x Or razmer_y <> raz_y ;проверка слева
Schet1=Schet1+1
EndIf
EndIf
If razmer_y + 80 < 325
If razmer_y + 80 <> raz_y Or razmer_x <> raz_x ;проверка снизу
Schet2=Schet2+1
EndIf
EndIf
If razmer_y - 80 >= 10
If razmer_y - 80 <> raz_y Or razmer_x <> raz_x ;проверка сверху
Schet3=Schet3+1
EndIf
EndIf
Next
If Schet=15
dvig=1
EndIf
If Schet1=15
dvig=2
EndIf
If Schet2=15
dvig=3
EndIf
If Schet3=15
dvig=4
EndIf
EndProcedure
Procedure peremeshenie(a,b)
Select a
Case 1
ResizeGadget(b, GadgetX(b)+80, #PB_Ignore, #PB_Ignore, #PB_Ignore) ;Перемещение кнопок
Case 2
ResizeGadget(b, GadgetX(b)-80, #PB_Ignore, #PB_Ignore, #PB_Ignore)
Case 3
ResizeGadget(b, #PB_Ignore,GadgetY(b)+80, #PB_Ignore, #PB_Ignore)
Case 4
ResizeGadget(b, #PB_Ignore,GadgetY(b)-80, #PB_Ignore, #PB_Ignore)
EndSelect
dvig=0
EndProcedure
Procedure sluch()
For ww=1 To 2000
gadget= Random(15) ; случайная расстановка
If gadget=0
gadget=1
EndIf
Pustoe_mesto(gadget)
peremeshenie(dvig,gadget)
Next
EndProcedure
Open_window_0()
sluch()
Repeat
ev=WaitWindowEvent()
If ev=#PB_Event_Gadget
For gadget=1 To 15
If EventGadget()=gadget ; Индефикация гаджета
Pustoe_mesto(gadget)
peremeshenie(dvig,gadget)
Break
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
If GadgetX(5)+GadgetY(5)=95 And GadgetX(6)+GadgetY(6)=175 And GadgetX(7)+GadgetY(7)=255 And GadgetX(8)+GadgetY(8)=335
If GadgetX(9)+GadgetY(9)=175 And GadgetX(10)+GadgetY(10)=255 And GadgetX(11)+GadgetY(11)=335 And GadgetX(12)+GadgetY(12)=415
If GadgetX(13)+GadgetY(13)=255 And GadgetX(14)+GadgetY(14)=335 And GadgetX(15)+GadgetY(15)=415
MessageRequester("Победа", "Молодец ты сумел(а) собрать пятнашку.")
sluch()
EndIf
EndIf
EndIf
EndIf
Menu=EventMenu() ;события меню
If ev=#PB_Event_Menu
Select Menu
Case 1
sluch()
Case 2
MessageRequester("Об игре", "Создано в PureBasic, автор: Станислав Будинов")
Case 3
End
EndSelect
EndIf
Until ev=#PB_Event_CloseWindowИгра Пятнашки
Сообщений 1 страница 30 из 39
Поделиться113.02.2010 14:37:02
Поделиться213.02.2010 14:51:05
Нашел когда то на забугорном сайте, по теме:
http://www.mirashic.narod.ru/shiftit.zip
Поделиться314.02.2010 13:17:58
Чуть- чуть изменил.
Пятнашки_img
Поделиться414.02.2010 14:29:40
Чуть- чуть изменил.
Ну уж тогда доводи до конца.
Человек должен знать какой рисунок собирать надо. В самом начале на несколько секунд должно появится полное изображение. А так отлично получилось 
Поделиться514.02.2010 15:18:39
Изменил код, добавил просмотр в начале и в конце.
(может не правильно ?)
Поделиться614.02.2010 15:52:05
Неплохие пазлы получились! Осталось добавить функцию свои фото добавлять. И будет готовый полноценный продукт!
Поделиться714.02.2010 16:07:48
Не представляю как программно резать изображение.
Поделиться814.02.2010 16:20:41
Не представляю как программно резать изображение
Как-то так
Result = GrabImage(#Image1, #Image2, x, y, Width, Height)
Поделиться914.02.2010 17:09:00
Не могу разобраться, как правильно её использовать ?
UsePNGImageDecoder()
Enumeration
#Window_0
#Button_1
#Image1
#Image2
EndEnumeration
CatchImage(1111, ?Im1111, ?Im1111End -?Im1111 )
OpenWindow (#Window_0, 0, 0, 320, 320, "Заглавие",#PB_Window_ScreenCentered|#PB_Window_SystemMenu)
ButtonImageGadget(#Button_1, 5, 10, 81, 81, 0)
ImageGadget(#Image1, 3, 3, 314, 314, ImageID(1111))
Repeat
Event = WaitWindowEvent()
Window = EventWindow()
Gadget = EventGadget()
Select Event
Case #PB_Event_Gadget
Select EventGadget()
Case #Button_1
GrabImage(#Image1, #Image2, 0, 0, 74, 74)
; SetGadgetAttribute(#Button_1, #PB_Button_Image, ImageID(1111))
EndSelect
EndSelect
If Event = #PB_Event_CloseWindow
Break
EndIf
ForEver
DataSection
Im1111:
IncludeBinary "img_1/1111.png"
Im1111End:
EndDataSectionПоделиться1014.02.2010 17:52:31
Не могу разобраться, как правильно её использовать
В место #Image1 должен быть идентификатор реального рисунка, в нашем случае это 1111.
UsePNGImageDecoder()
Enumeration
#Window_0
#Button_1
#Image1
#Image2
EndEnumeration
CatchImage(1111, ?Im1111, ?Im1111End -?Im1111 )
OpenWindow (#Window_0, 0, 0, 320, 320, "Заглавие",#PB_Window_ScreenCentered|#PB_Window_SystemMenu)
ButtonImageGadget(#Button_1, 5, 10, 81, 81, 0)
ImageGadget(#Image1, 3, 3, 314, 314, ImageID(1111))
Repeat
Event = WaitWindowEvent()
Window = EventWindow()
Gadget = EventGadget()
Select Event
Case #PB_Event_Gadget
Select EventGadget()
Case #Button_1
GrabImage(1111, #Image2, 0, 0, 74, 74)
SetGadgetAttribute(#Button_1, #PB_Button_Image, ImageID(#Image2))
EndSelect
EndSelect
If Event = #PB_Event_CloseWindow
Break
EndIf
ForEver
DataSection
Im1111:
IncludeBinary "img_1/1111.png"
Im1111End:
EndDataSectionПоделиться1114.02.2010 17:56:22
Спасибо, я писал ImageID(1111), и выскакивала ошибка.
Поделиться1214.02.2010 20:13:01
Новый вариант : пятнашки 2
С дуру нарезал много изображений, но архив слишком большой получится.
Поделиться1314.02.2010 20:18:22
Ох уж этот аватар, блин! 
Поделиться1414.02.2010 20:22:08
297 строка , при отмене выбора изображения, горит желтым цветом, как это исправить ?
Поделиться1514.02.2010 20:31:29
Это потому, что рисунок не загружен.
Это только предупреждение, а не ошибка.
Сделай так
File.s=OpenFileRequester("","","*.*|*.*",0)
If File
a= LoadImage(#Ima, File )
ImageGadget(#Imag, 8,13,314,314,a)
Delay(2000)
ImageGadget(#Imag, 8,13,314,314,0)
Open_img(#Ima)
EndIfПоделиться1614.02.2010 20:37:37
Спасибо !
И ещё, как правильно перечислять все форматы?
OpenFileRequester("","",".png|*.png*",0) )
Отредактировано mirashic (14.02.2010 20:39:42)
Поделиться1714.02.2010 20:53:37
OpenFileRequester("","","png и jpg а также, bmp|*.png;*.jpg;*.bmp|Все файлы|*.*",0)Поделиться1814.02.2010 21:04:58
Спасибо .
Поделиться1914.02.2010 21:13:40
А изображения только указанного размера загружаются? Наверно надо чтобы любые можно было. С помощью ResizeImage сделать эту функцию при загрузке, если есть конечно желание
Поделиться2014.02.2010 21:31:38
Можно, но будет не совсем корректно, если подгонять по высоте - потеря композиции.
Поделиться2114.02.2010 21:52:39
Обновил с изменением размера.
12 пост
Отредактировано mirashic (14.02.2010 21:53:44)
Поделиться2214.02.2010 22:09:52
Наверное так будет корректней по сохранении композиции:
If File
LoadImage(#Ima, File )
w = ImageWidth(#Ima)
h = ImageHeight(#Ima)
w1 = (w*316)/h
ResizeImage(#Ima, w1, 316) ; изменяем размер по высоте
GrabImage(#Ima, #img333, 50, 0, 316, 316) ; отступаем 50пикс от края и вырезаем
ImageGadget(#Imag, 8,13,314,314,ImageID(#img333))
Delay(2000)
ImageGadget(#Imag, 8,13,314,314,0)
Open_img(#img333)
a= ImageID(#img333)
EndIfОтредактировано mirashic (15.02.2010 00:10:10)
Поделиться2314.02.2010 22:45:59
Я не смотрел код, загрузил первую попавшуюся картинку, все хорошо работает.
Поделиться2415.02.2010 00:22:28
Не правильно отображалась картинка - когда собрана.
Добавил подсказку.
Исправил Пятнашка
Поделиться2615.02.2010 09:09:42
Эта картинка загружена изначально в память, предполагается что её уже загружать не будут.
Так как основная масса изображений прямоугольной формы (квадратных мало) и ширина, как правило
больше высоты, отступ сделан для сохранения более - мение композиции рисунка.
Хотя, можно и не делать , по усмотрению (загрузил, не понравилось -грузи следующею).
Поделиться2715.02.2010 09:19:55
Пример
Оригинал:
С отступом и без:

Поделиться2815.02.2010 10:13:55
Тогда наверно надо создать условие для проверки соотношения сторон, при которых по разному работает этот код:
GrabImage(#Ima, #img333, 50, 0, 316, 316) ; отступаем 50пикс от края и вырезаем
Поделиться2915.02.2010 10:46:03
Точно !
Похожие темы
| SpiderBasic | SpiderBasic | 29.06.2024 |
| Клик на спрайте существует? | SpiderBasic | 18.03.2023 |
| Balloons | PureBasic для Windows | 22.02.2023 |
