Решил поиграться с игрой пятнашки на спрайтах, сделал часть, но застрял как делать клик, чтобы переместить. У меня есть такое же начало на канвас, но я решил, что спрайты во первых перерисовывать не надо, а только двигать рисунки, во вторых можно плавно перемещать картинку по пикселю имитируя естественное визуальное перемещение. Но дальше дело пока не двигается.
Кажется понял, надо функции TouchScreen задействовать.
; AZJIO EnableExplicit #Font = 0 #Window = 0 #FontName$ = "Arial" Global s = 80, x, y, i, evg, bRefresh = #True Global Dim aXY(16, 4) Global DspHeight, DspWidth, tmp Global BCtxt2 = $c7c7c7 Global BCbg2 = $424242 Global BCbg3 = $111111 Global BCbg4 = $002123 Global BCbg4 = $333333 Global isLFont Global indentX, indentY Declare SetFont(BtnSize) DspWidth = 240 DspHeight = 240 s = DspWidth / 4 ;- Lang Global lang0$ Global Dim Lng.s(2) Lng(1) = "Пятнашки" Lng(2) = "Перемешать" Lng(0) = "Отлично!" Procedure Update() ; Размещаем спрайты y = 0 x = 0 For i = 1 To 16 aXY(i, 0) = i Select i Case 1 To 4 y = 0 x = 1 Case 5 To 8 y = 1 x = 5 Case 9 To 12 y = 2 x = 9 Case 13 To 16 y = 3 x = 13 EndSelect aXY(i, 2) = i - x aXY(i, 3) = y DisplaySprite(aXY(i, 1), aXY(i, 2) * s, aXY(i, 3) * s) Next FlipBuffers() EndProcedure ;- GUI If OpenWindow(#Window, 0, 0, 4*s, 4*s, Lng(1), #PB_Window_ScreenCentered) If InitSprite() And Not OpenWindowedScreen(WindowID(#Window), 0, 0, 4*s, 4*s) End EndIf SetFrameRate(1) ClearScreen($3f3f3f) If LoadFont(#Font, "Arial", s / 2.5) isLFont = 1 EndIf ; Создаём спрайты For i = 1 To 16 aXY(i, 1) = CreateSprite(#PB_Any, s, s) If StartDrawing(SpriteOutput(aXY(i, 1))) If isLFont DrawingFont(FontID(#Font)) EndIf If Not indentY indentY = (s - TextHeight("1")) / 2 EndIf If i < 16 Box(1, 1, s - 2, s - 2, BCbg2) Else Box(1, 1, s - 2, s - 2, BCbg4) EndIf indentX = (s - TextWidth(Str(i))) / 2 If i < 16 DrawText(aXY(i, 2) * s + indentX, aXY(i, 3) * s + indentY, Str(i), BCtxt2, BCbg2) EndIf StopDrawing() EndIf Next FlipBuffers() BindEvent(#PB_Event_RenderFrame,@Update()) EndIf
PureBasic
; AZJIO EnableExplicit #Font = 0 #Window = 0 #FontName$ = "Arial" Global s = 80, x, y, i, evg, bRefresh = #True Global Dim aXY(16, 4) Global DspHeight, DspWidth, tmp Global BCtxt2 = $c7c7c7 Global BCbg2 = $424242 Global BCbg3 = $111111 Global BCbg4 = $002123 Global BCbg4 = $333333 Global isLFont Global indentX, indentY DspWidth = 240 DspHeight = 240 s = DspWidth / 4 ;- Lang Global lang0$ Global Dim Lng.s(2) Lng(1) = "Пятнашки" Lng(2) = "Перемешать" Lng(0) = "Отлично!" ;- GUI If OpenWindow(#Window, 0, 0, 4*s, 4*s, Lng(1), #PB_Window_SystemMenu | #PB_Window_MinimizeGadget | #PB_Window_ScreenCentered) If InitSprite() And Not OpenWindowedScreen(WindowID(#Window), 0, 0, 4*s, 4*s) End EndIf SetFrameRate(1) ClearScreen($3f3f3f) If LoadFont(#Font, "Arial", s / 2.5) isLFont = 1 EndIf ; Создаём спрайты For i = 1 To 16 aXY(i, 1) = CreateSprite(#PB_Any, s, s) If StartDrawing(SpriteOutput(aXY(i, 1))) If isLFont DrawingFont(FontID(#Font)) EndIf If Not indentY indentY = (s - TextHeight("1")) / 2 EndIf If i < 16 Box(1, 1, s - 2, s - 2, BCbg2) Else Box(1, 1, s - 2, s - 2, BCbg4) EndIf indentX = (s - TextWidth(Str(i))) / 2 If i < 16 DrawText(aXY(i, 2) * s + indentX, aXY(i, 3) * s + indentY, Str(i), BCtxt2, BCbg2) EndIf StopDrawing() EndIf Next ; Размещаем спрайты y = 0 x = 0 For i = 1 To 16 aXY(i, 0) = i Select i Case 1 To 4 y = 0 x = 1 Case 5 To 8 y = 1 x = 5 Case 9 To 12 y = 2 x = 9 Case 13 To 16 y = 3 x = 13 EndSelect aXY(i, 2) = i - x aXY(i, 3) = y DisplaySprite(aXY(i, 1), aXY(i, 2) * s, aXY(i, 3) * s) Next FlipBuffers() Repeat : Until WaitWindowEvent() = #PB_Event_CloseWindow EndIf
Отредактировано AZJIO (12.03.2023 18:08:48)