Spielkarten
Verfasst: 18.01.2008 00:26
Da mich neotoma erfolgreich ignoriert hat, musste ich meine angestaubten Mathekenntnisse mit meinen nicht vorhandenen Grafikfähigkeiten kombinieren und heraus ist das hier gekommen.
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 ?
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