Da die Karten alle berechnet werden, sehen sie in sehr kleiner Kartengrösse nicht mehr wirklich gut aus, aber wer will schon mit Pygmäen Skat spielen ?
Code: Alles auswählen
Enumeration
#CC_Karo
#CC_Herz
#CC_Pik
#CC_Kreuz
EndEnumeration
Procedure.l CreateBezier(s.l, x1.l, y1.l, x2.l, y2.l, x3.l, y3.l, x4.l, y4.l, Color.l, F.d, a.d)
Protected Result.l, cx.d, bx.d, ax.d, cy.d, by.d, ay.d, i.d, x.l, y.l
cx = 3 * (x2 - x1)
bx = 3 * (x3 - x2) - cx
ax = x4 - x1 - cx - bx
cy = 3 * (y2 - y1)
by = 3 * (y3 - y2) - cy
ay = y4 - y1 - cy - by
While i < 1
i + a
x = (((ax * i + bx) * i + cx) * i + x1) * F
y = (((ay * i + by) * i + cy) * i + y1) * F
If i > 0
If x >= 0 And x < s And y > 0 And y < s
Plot(x, y, Color)
EndIf
EndIf
Wend
EndProcedure
Procedure.l CreateCardColor(Card.l, p.l)
Protected ID.l, F.d, w.l = 128
ID = CreateSprite(#PB_Any, p, p)
If ID
If StartDrawing(SpriteOutput(ID)) = 0
FreeSprite(ID)
ID = 0
Else
F = p / 128
Select Card
Case #CC_Karo
CreateBezier(p, 0, w / 2, w / 4, w / 8 * 3, w / 8 * 3, w / 4, w / 2, 0, $0000FF, F, 0.005)
CreateBezier(p, 0, w / 2, w / 4, w / 8 * 5, w / 8 * 3, w / 4 * 3, w / 2, w - 1, $0000FF, F, 0.005)
CreateBezier(p, w - 1, w / 2, w / 4 * 3, w / 8 * 3, w / 8 * 5, w / 4, w / 2, 0, $0000FF, F, 0.005)
CreateBezier(p, w - 1, w / 2, w / 4 * 3, w / 8 * 5, w / 8 * 5, w / 4 * 3, w / 2, w - 1, $0000FF, F, 0.005)
FillArea(p / 2, p / 2, -1, $0000FF)
Case #CC_Herz
CreateBezier(p, w / 2, w - 1, -0.5 * w, 2, w / 2, -0.12 * w, w / 2, w / 3 + 2, $0000FF, F, 0.001)
CreateBezier(p, w / 2, w - 1, 1.5 * w, 2, w / 2, -0.12 * w, w / 2, w / 3 + 2, $0000FF, F, 0.001)
FillArea(p / 2, p / 2, -1, $0000FF)
Case #CC_Pik
CreateBezier(p, w / 2 + 1, 0, -0.6 * w, w - 1, w / 2, w, w / 2 - w / 24, w / 3 * 2 - 10, 1, F, 0.001)
CreateBezier(p, w / 2, 0, 1.6 * w, w - 1, w / 2, w, w / 2 + w / 24, w / 3 * 2 - 10, 1, F, 0.001)
CreateBezier(p, w / 2 - w / 24, w / 3 * 2 - 10, w / 2 - w / 24, w / 16 * 12, w / 2 - w / 24, w / 16 * 14, w / 2 - w / 12, w - 1, 1, F, 0.001)
CreateBezier(p, w / 2 + w / 24, w / 3 * 2 - 10, w / 2 + w / 24, w / 16 * 12, w / 2 + w / 24, w / 16 * 14, w / 2 + w / 12, w - 1, 1, F, 0.001)
FillArea(p / 2, p / 2, -1, 1)
FillArea(p / 2, p - 1, -1, 1)
Case #CC_Kreuz
CreateBezier(p, w / 3, w / 3, 0.1 * w, -0.05 * w, 0.9 * w, -0.05 * w, w / 3 * 2, w / 3, 1, F, 0.001)
CreateBezier(p, w / 3, w / 3, -0.23 * w, 0.16 * w, 0.08 * w, w + 10, 11 * w / 26, w / 3 * 2, 1, F, 0.001)
CreateBezier(p, w / 3 * 2, w / 3, w * 1.23, 0.16 * w, 0.92 * w, w + 10, 15 * w / 26, w / 3 * 2, 1, F, 0.001)
CreateBezier(p, 11 * w / 26, w / 3 * 2, w / 2 - w / 14, w / 16 * 12, w / 2 - w / 24, w / 16 * 14, w / 8 * 3, w - 1, 1, F, 0.001)
CreateBezier(p, 15 * w / 26, w / 3 * 2, w / 2 + w / 14, w / 16 * 12, w / 2 + w / 24, w / 16 * 14, w / 8 * 5, w - 1, 1, F, 0.001)
FillArea(p / 2, p / 2, -1, 1)
FillArea(p / 2, p - 1, -1, 1)
EndSelect
StopDrawing()
EndIf
EndIf
ProcedureReturn ID
EndProcedure
Procedure.l CreateCards(w.l, h.l)
Protected i.l, j.l, Result.l = #True, Color.l, N.l, FID.l, Tw.l, Th.l, Sw.l, Sh.l
FID = LoadFont(#PB_Any, "Cataneo BT", w / 9, #PB_Font_Bold | #PB_Font_HighQuality)
Dim K.l(4 * #CC_KREUZ)
K(#CC_Karo) = CreateCardColor(#CC_Karo, w * 0.2)
K(#CC_Herz) = CreateCardColor(#CC_Herz, w * 0.2)
K(#CC_Pik) = CreateCardColor(#CC_Pik, w * 0.2)
K(#CC_Kreuz) = CreateCardColor(#CC_Kreuz, w * 0.2)
K(#CC_Karo + 4) = CreateCardColor(#CC_Karo, w * 0.35)
K(#CC_Herz + 4) = CreateCardColor(#CC_Herz, w * 0.35)
K(#CC_Pik + 4) = CreateCardColor(#CC_Pik, w * 0.35)
K(#CC_Kreuz + 4) = CreateCardColor(#CC_Kreuz, w * 0.35)
K(#CC_Karo + 8) = CreateCardColor(#CC_Karo, w * 0.6)
K(#CC_Herz + 8) = CreateCardColor(#CC_Herz, w * 0.6)
K(#CC_Pik + 8) = CreateCardColor(#CC_Pik, w * 0.6)
K(#CC_Kreuz + 8) = CreateCardColor(#CC_Kreuz, w * 0.6)
Dim C.l(#CC_KREUZ)
C(#CC_Karo) = $0000FF
C(#CC_Herz) = $0000FF
C(#CC_Pik) = 0
C(#CC_Kreuz) = 0
Dim T.s(13)
For i = 0 To 12
If i < 8
T(i) = Str(i + 2)
ElseIf i = 8
T(i) = "J"
ElseIf i = 9
T(i) = "Q"
ElseIf i = 10
T(i) = "K"
ElseIf i = 11
T(i) = "10"
ElseIf i = 12
T(i) = "A"
EndIf
Next i
Sw = SpriteWidth(K(0))
Sh = SpriteHeight(K(0))
For i = 0 To 52
If CreateSprite(i, w, h) = 0
Result = #False
Break
EndIf
If StartDrawing(SpriteOutput(i))
FillArea(0, 0, -1, $FF80FF)
Circle(5, 5, 5, 0)
Circle(5, 5, 4, $FFFFFF)
Circle(5, h - 5, 5, 0)
Circle(5, h - 5, 4, $FFFFFF)
Circle(w - 5, 5, 5, 0)
Circle(w - 5, 5, 4, $FFFFFF)
Circle(w - 5, h - 5, 5, 0)
Circle(w - 5, h - 5, 4, $FFFFFF)
Box(6, 0, 5, 10, $FFFFFF)
Box(0, 6, 10, 5, $FFFFFF)
;
Box(w - 11, 0, 5, 10, $FFFFFF)
Box(w - 11, 6, 10, 5, $FFFFFF)
;
Box(6, h - 11, 5, 10, $FFFFFF)
Box(0, h - 11, 10, 5, $FFFFFF)
; ;
Box(w - 11, h - 11, 5, 10, $FFFFFF)
Box(w - 11, h - 11, 10, 5, $FFFFFF)
LineXY(0, 5, 0, h - 5, 0)
LineXY(w - 1, 5, w - 1, h - 5, 0)
LineXY(5, 0, w - 5, 0, 0)
LineXY(5, h - 1, w - 5, h - 1, 0)
FillArea(w / 2, h / 2, -1, $FFFFFF)
DrawingFont(FontID(FID))
If i = 0
DrawingMode(#PB_2DDrawing_Outlined)
A = 5
B = 5
Color = 0
For j = 1 To 8
Box(A, B, w - 2 * A, h - 2 * B, RGB(Color, 20, $FF))
A + w / 16
B + h / 16
Color + $18
Next j
StopDrawing()
Color = 0
Else
; G\Cards[i]\ID = i
; G\Cards[i]\Color = Color
; G\Cards[i]\Num = N
Tw = TextWidth(T(N))
Th = TextHeight(T(N))
Select N
Case 0
;2er
DrawText(5 , 5, T(N), C(Color), $FFFFFF)
DrawText(w - 5 - Tw , h - 5 - Th, T(N), C(Color), $FFFFFF)
StopDrawing()
UseBuffer(i)
DisplayTransparentSprite(K(Color), w / 2 - Sw / 2, 11)
DisplayTransparentSprite(K(Color), w / 2 - Sw / 2, h - Sh - 11)
Case 1
;3er
DrawText(5 , 5, T(N), C(Color), $FFFFFF)
DrawText(w - 5 - Tw , h - 5 - Th, T(N), C(Color), $FFFFFF)
StopDrawing()
UseBuffer(i)
DisplayTransparentSprite(K(Color), w / 2 - Sw / 2, 11)
DisplayTransparentSprite(K(Color), w / 2 - Sw / 2, h / 2 - Sh / 2)
DisplayTransparentSprite(K(Color), w / 2 - Sw / 2, h - Sh - 11)
Case 2
;4er
DrawText(5 , 5, T(N), C(Color), $FFFFFF)
DrawText(w - 5 - Tw , h - 5 - Th, T(N), C(Color), $FFFFFF)
StopDrawing()
UseBuffer(i)
DisplayTransparentSprite(K(Color), 6 + Tw, 11)
DisplayTransparentSprite(K(Color), w - 7 - Tw - Sw, 11)
DisplayTransparentSprite(K(Color), 6 + Tw, h - 11 - Sh)
DisplayTransparentSprite(K(Color), w - 7 - Tw - Sw, h - 11 - Sh)
Case 3
;5er
DrawText(5 , 5, T(N), C(Color), $FFFFFF)
DrawText(w - 5 - Tw , h - 5 - Th, T(N), C(Color), $FFFFFF)
StopDrawing()
UseBuffer(i)
DisplayTransparentSprite(K(Color), 6 + Tw, 11)
DisplayTransparentSprite(K(Color), w - 7 - Tw - Sw, 11)
DisplayTransparentSprite(K(Color), 6 + Tw, h - 11 - Sh)
DisplayTransparentSprite(K(Color), w - 7 - Tw - Sw, h - 11 - Sh)
DisplayTransparentSprite(K(Color), w / 2 - Sw / 2, h / 2 - Sh / 2)
Case 4
;6er
DrawText(5 , 5, T(N), C(Color), $FFFFFF)
DrawText(w - 5 - Tw , h - 5 - Th, T(N), C(Color), $FFFFFF)
StopDrawing()
UseBuffer(i)
DisplayTransparentSprite(K(Color), 6 + Tw, 11)
DisplayTransparentSprite(K(Color), w - 7 - Tw - Sw, 11)
DisplayTransparentSprite(K(Color), 6 + Tw, h - 11 - Sh)
DisplayTransparentSprite(K(Color), w - 7 - Tw - Sw, h - 11 - Sh)
DisplayTransparentSprite(K(Color), 6 + Tw, h / 2 - Sh / 2)
DisplayTransparentSprite(K(Color), w - 7 - Tw - Sw, h / 2 - Sh / 2)
Case 5
;7er
DrawText(5 , 5, T(N), C(Color), $FFFFFF)
DrawText(w - 5 - Tw , h - 5 - Th, T(N), C(Color), $FFFFFF)
StopDrawing()
UseBuffer(i)
DisplayTransparentSprite(K(Color), 6 + Tw, 11)
DisplayTransparentSprite(K(Color), w - 7 - Tw - Sw, 11)
DisplayTransparentSprite(K(Color), 6 + Tw, h - 11 - Sh)
DisplayTransparentSprite(K(Color), w - 7 - Tw - Sw, h - 11 - Sh)
DisplayTransparentSprite(K(Color), 6 + Tw, h / 2 - Sh / 2)
DisplayTransparentSprite(K(Color), w - 7 - Tw - Sw, h / 2 - Sh / 2)
DisplayTransparentSprite(K(Color), w / 2 - Sw / 2, (h / 2 - 11 + Sh / 2) / 2 + 11 - Sh / 2)
Case 6
;8er
DrawText(5 , 5, T(N), C(Color), $FFFFFF)
DrawText(w - 5 - Tw , h - 5 - Th, T(N), C(Color), $FFFFFF)
StopDrawing()
UseBuffer(i)
DisplayTransparentSprite(K(Color), 6 + Tw, 11)
DisplayTransparentSprite(K(Color), w - 7 - Tw - Sw, 11)
DisplayTransparentSprite(K(Color), 6 + Tw, h - 11 - Sh)
DisplayTransparentSprite(K(Color), w - 7 - Tw - Sw, h - 11 - Sh)
DisplayTransparentSprite(K(Color), 6 + Tw, h / 2 - Sh / 2)
DisplayTransparentSprite(K(Color), w - 7 - Tw - Sw, h / 2 - Sh / 2)
DisplayTransparentSprite(K(Color), w / 2 - Sw / 2, (h / 2 - 11 + Sh / 2) / 2 + 11 - Sh / 2)
DisplayTransparentSprite(K(Color), w / 2 - Sw / 2, (h - 11 - Sh / 2 - h / 2) / 2 + h / 2 - Sh / 2)
Case 7
;9er
DrawText(5 , 5, T(N), C(Color), $FFFFFF)
DrawText(w - 5 - Tw , h - 5 - Th, T(N), C(Color), $FFFFFF)
StopDrawing()
UseBuffer(i)
DisplayTransparentSprite(K(Color), 6 + Tw, h / 5 - Sh /2)
DisplayTransparentSprite(K(Color), 6 + Tw, h / 5 * 2 - Sh / 2)
DisplayTransparentSprite(K(Color), 6 + Tw, h / 5 * 3 - Sh / 2)
DisplayTransparentSprite(K(Color), 6 + Tw, h / 5 * 4 - Sh / 2)
DisplayTransparentSprite(K(Color), w - 7 - Tw - Sw, h / 5 - Sh /2)
DisplayTransparentSprite(K(Color), w - 7 - Tw - Sw, h / 5 * 2 - Sh / 2)
DisplayTransparentSprite(K(Color), w - 7 - Tw - Sw, h / 5 * 3 - Sh / 2)
DisplayTransparentSprite(K(Color), w - 7 - Tw - Sw, h / 5 * 4 - Sh / 2)
DisplayTransparentSprite(K(Color), w / 2 - Sw / 2, h / 2 - Sh / 2)
Case 8
;Jungs
DrawText(5 , 5, T(N), C(Color), $FFFFFF)
DrawText(w - 5 - Tw , h - 5 - Th, T(N), C(Color), $FFFFFF)
DrawingMode(#PB_2DDrawing_Outlined)
Box(10 + Tw, 10, w - 20 - Tw * 2, h - 20)
DrawingMode(#PB_2DDrawing_Default)
Box(11 + Tw, 11, w - 22 - Tw * 2, h - 22, $B0B0B0)
StopDrawing()
UseBuffer(i)
DisplayTransparentSprite(K(Color + 4), w - 11 - Tw - SpriteWidth(K(Color + 4)), 11)
DisplayTransparentSprite(K(Color + 4), 11 + Tw, h - 11 - SpriteHeight(K(Color + 4)))
Case 9
;Mädels
DrawText(5 , 5, T(N), C(Color), $FFFFFF)
DrawText(w - 5 - Tw , h - 5 - Th, T(N), C(Color), $FFFFFF)
DrawingMode(#PB_2DDrawing_Outlined)
Box(10 + Tw, 10, w - 20 - Tw * 2, h - 20)
DrawingMode(#PB_2DDrawing_Default)
Box(11 + Tw, 11, w - 22 - Tw * 2, h - 22, $B0B0B0)
StopDrawing()
UseBuffer(i)
DisplayTransparentSprite(K(Color + 4), w - 11 - Tw - SpriteWidth(K(Color + 4)), 11)
DisplayTransparentSprite(K(Color + 4), 11 + Tw, h - 11 - SpriteHeight(K(Color + 4)))
Case 10
;Wichtigtuer
DrawText(5 , 5, T(N), C(Color), $FFFFFF)
DrawText(w - 5 - Tw , h - 5 - Th, T(N), C(Color), $FFFFFF)
DrawingMode(#PB_2DDrawing_Outlined)
Box(10 + Tw, 10, w - 20 - Tw * 2, h - 20)
DrawingMode(#PB_2DDrawing_Default)
Box(11 + Tw, 11, w - 22 - Tw * 2, h - 22, $B0B0B0)
StopDrawing()
UseBuffer(i)
DisplayTransparentSprite(K(Color + 4), w - 11 - Tw - SpriteWidth(K(Color + 4)), 11)
DisplayTransparentSprite(K(Color + 4), 11 + Tw, h - 11 - SpriteHeight(K(Color + 4)))
Case 11
;10er
DrawText(5 , 5, T(N), C(Color), $FFFFFF)
DrawText(w - 5 - Tw , h - 5 - Th, T(N), C(Color), $FFFFFF)
StopDrawing()
UseBuffer(i)
DisplayTransparentSprite(K(Color), 6 + Tw, h / 5 - Sh /2)
DisplayTransparentSprite(K(Color), 6 + Tw, h / 5 * 2 - Sh / 2)
DisplayTransparentSprite(K(Color), 6 + Tw, h / 5 * 3 - Sh / 2)
DisplayTransparentSprite(K(Color), 6 + Tw, h / 5 * 4 - Sh / 2)
DisplayTransparentSprite(K(Color), w - 7 - Tw - Sw, h / 5 - Sh /2)
DisplayTransparentSprite(K(Color), w - 7 - Tw - Sw, h / 5 * 2 - Sh / 2)
DisplayTransparentSprite(K(Color), w - 7 - Tw - Sw, h / 5 * 3 - Sh / 2)
DisplayTransparentSprite(K(Color), w - 7 - Tw - Sw, h / 5 * 4 - Sh / 2)
DisplayTransparentSprite(K(Color), w / 2 - Sw / 2, h / 5 + h / 10 - Sh / 2)
DisplayTransparentSprite(K(Color), w / 2 - Sw / 2, h / 5 * 3 + h / 10 - Sh / 2)
Case 12
;Asse
DrawText(5 , 5, T(N), C(Color), $FFFFFF)
DrawText(w - 5 - Tw , h - 5 - Th, T(N), C(Color), $FFFFFF)
StopDrawing()
UseBuffer(i)
DisplayTransparentSprite(K(Color + 8), w / 2 - SpriteWidth(K(Color + 8)) / 2, h / 2 - SpriteHeight(K(Color + 8)) /2)
Default
;Hä ? Wie komm ich denn hierhin ?
StopDrawing()
Break
EndSelect
Color = (Color + 1) & $03
If Color = 0
N + 1
EndIf
UseBuffer(#PB_Default)
EndIf
TransparentSpriteColor(i, $FF80FF)
EndIf
Next i
For i = 0 To 11
FreeSprite(K(i))
Next i
FreeFont(FID)
ProcedureReturn Result
EndProcedure
;-Example
Define.l A, B, S, M, i
Define.f X, Y
Define.s Text
InitSprite() : InitKeyboard()
OpenWindowedScreen(OpenWindow(0, #PB_Ignore, #PB_Ignore, 640, 480, "Test", #PB_Window_SystemMenu | #PB_Window_MaximizeGadget | #PB_Window_SizeGadget), 0, 0, 640, 480, 0, 0, 0)
CreateCards(96, 120)
A = 1
S = 0
M = WindowWidth(0) / 2
Text = "Use UP / DOWN to change seen cards. Resize Screen to recreate cards"
Repeat
Repeat
Select WindowEvent()
Case #WM_CLOSE
Break 2
Case #WM_SIZE
S = 1
X = (WindowWidth(0) / 640) * 96
Y = (WindowWidth(0) / 640) * 120
M = WindowWidth(0) / 2
Case 0
If S
If OpenWindowedScreen(WindowID(0), 0, 0, WindowWidth(0), WindowHeight(0), 0, 0, 0)
CreateCards(X, Y)
B = M - SpriteWidth(0) * 2 - 15
EndIf
S = 0
EndIf
Delay(5)
Break
EndSelect
ForEver
If ExamineKeyboard()
If KeyboardReleased(#PB_Key_Down)
A + 8
If A > 45
A = 45
EndIf
ElseIf KeyboardReleased(#PB_Key_Up)
A - 8
If A < 1
A = 1
EndIf
EndIf
EndIf
ClearScreen($8F8F8F)
DisplayTransparentSprite(0, M - SpriteWidth(0) / 2, 20)
For i = 0 To 3
DisplayTransparentSprite(i + A, B + (i) * (SpriteWidth(i + A) + 10), 30 + SpriteHeight(i + A))
DisplayTransparentSprite(i + 4 + A, B + (i) * (SpriteWidth(i + 4 + A) + 10), 40 + 2 * SpriteHeight(i + 4 + A))
Next i
If StartDrawing(ScreenOutput())
DrawText(WindowWidth(0) - TextWidth(Text), WindowHeight(0) - TextHeight(Text), Text, #White, $8F8F8F)
StopDrawing()
EndIf
FlipBuffers()
ForEver