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 | 24.02.2023 |