Решил поиграться с игрой пятнашки на спрайтах, сделал часть, но застрял как делать клик, чтобы переместить. У меня есть такое же начало на канвас, но я решил, что спрайты во первых перерисовывать не надо, а только двигать рисунки, во вторых можно плавно перемещать картинку по пикселю имитируя естественное визуальное перемещение. Но дальше дело пока не двигается.
Кажется понял, надо функции 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)