Verfasst: 04.02.2008 22:29
Ich hab mal angefangen, den Code auf Images umzustellen (damit wir den WindowedScreen nicht brauchen, und es nicht so abartig ruckelt, wenn man das Fenster vergrößert/verkleinert). Der Code funktioniert zwar momentan hinten und vorne nicht, aber mich würde mal interessieren, ob ihr auch diese lustigen Icons (die gleichen, die auch für die MessageRequester zur Verfügung stehen) anstatt der normalen Karten angezeigt bekommt (hier wird nur die oberste Karte, sprich das Deckblatt, korrekt angezeigt ^^).
Der Code setzt übrigens PB 4.20 vorraus, da ich für die Keyboard-Abfrage den neuen Befehl EventwParam() verwende.
//EDIT: Und mit Pauken und Trompeten das wchtigste, den Code, vergessen
:
Der Code setzt übrigens PB 4.20 vorraus, da ich für die Keyboard-Abfrage den neuen Befehl EventwParam() verwende.
//EDIT: Und mit Pauken und Trompeten das wchtigste, den Code, vergessen

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 = CreateImage(#PB_Any, p, p)
If ID
If StartDrawing(ImageOutput(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 = ImageWidth(K(0))
Sh = ImageHeight(K(0))
For i = 0 To 52
If CreateImage(i, w, h) = 0
Result = #False
Break
EndIf
If StartDrawing(ImageOutput(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)
StartDrawing(ImageOutput(i))
DrawImage(K(Color), w / 2 - Sw / 2, 11)
DrawImage(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)
StartDrawing(ImageOutput(i))
DrawImage(K(Color), w / 2 - Sw / 2, 11)
DrawImage(K(Color), w / 2 - Sw / 2, h / 2 - Sh / 2)
DrawImage(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)
StartDrawing(ImageOutput(i))
DrawImage(K(Color), 6 + Tw, 11)
DrawImage(K(Color), w - 7 - Tw - Sw, 11)
DrawImage(K(Color), 6 + Tw, h - 11 - Sh)
DrawImage(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)
StartDrawing(ImageOutput(i))
DrawImage(K(Color), 6 + Tw, 11)
DrawImage(K(Color), w - 7 - Tw - Sw, 11)
DrawImage(K(Color), 6 + Tw, h - 11 - Sh)
DrawImage(K(Color), w - 7 - Tw - Sw, h - 11 - Sh)
DrawImage(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)
StartDrawing(ImageOutput(i))
DrawImage(K(Color), 6 + Tw, 11)
DrawImage(K(Color), w - 7 - Tw - Sw, 11)
DrawImage(K(Color), 6 + Tw, h - 11 - Sh)
DrawImage(K(Color), w - 7 - Tw - Sw, h - 11 - Sh)
DrawImage(K(Color), 6 + Tw, h / 2 - Sh / 2)
DrawImage(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)
StartDrawing(ImageOutput(i))
DrawImage(K(Color), 6 + Tw, 11)
DrawImage(K(Color), w - 7 - Tw - Sw, 11)
DrawImage(K(Color), 6 + Tw, h - 11 - Sh)
DrawImage(K(Color), w - 7 - Tw - Sw, h - 11 - Sh)
DrawImage(K(Color), 6 + Tw, h / 2 - Sh / 2)
DrawImage(K(Color), w - 7 - Tw - Sw, h / 2 - Sh / 2)
DrawImage(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)
StartDrawing(ImageOutput(i))
DrawImage(K(Color), 6 + Tw, 11)
DrawImage(K(Color), w - 7 - Tw - Sw, 11)
DrawImage(K(Color), 6 + Tw, h - 11 - Sh)
DrawImage(K(Color), w - 7 - Tw - Sw, h - 11 - Sh)
DrawImage(K(Color), 6 + Tw, h / 2 - Sh / 2)
DrawImage(K(Color), w - 7 - Tw - Sw, h / 2 - Sh / 2)
DrawImage(K(Color), w / 2 - Sw / 2, (h / 2 - 11 + Sh / 2) / 2 + 11 - Sh / 2)
DrawImage(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)
StartDrawing(ImageOutput(i))
DrawImage(K(Color), 6 + Tw, h / 5 - Sh /2)
DrawImage(K(Color), 6 + Tw, h / 5 * 2 - Sh / 2)
DrawImage(K(Color), 6 + Tw, h / 5 * 3 - Sh / 2)
DrawImage(K(Color), 6 + Tw, h / 5 * 4 - Sh / 2)
DrawImage(K(Color), w - 7 - Tw - Sw, h / 5 - Sh /2)
DrawImage(K(Color), w - 7 - Tw - Sw, h / 5 * 2 - Sh / 2)
DrawImage(K(Color), w - 7 - Tw - Sw, h / 5 * 3 - Sh / 2)
DrawImage(K(Color), w - 7 - Tw - Sw, h / 5 * 4 - Sh / 2)
DrawImage(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)
StartDrawing(ImageOutput(i))
DrawImage(K(Color + 4), w - 11 - Tw - ImageWidth(K(Color + 4)), 11)
DrawImage(K(Color + 4), 11 + Tw, h - 11 - ImageHeight(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)
StartDrawing(ImageOutput(i))
DrawImage(K(Color + 4), w - 11 - Tw - ImageWidth(K(Color + 4)), 11)
DrawImage(K(Color + 4), 11 + Tw, h - 11 - ImageHeight(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)
StartDrawing(ImageOutput(i))
DrawImage(K(Color + 4), w - 11 - Tw - ImageWidth(K(Color + 4)), 11)
DrawImage(K(Color + 4), 11 + Tw, h - 11 - ImageHeight(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)
StartDrawing(ImageOutput(i))
DrawImage(K(Color), 6 + Tw, h / 5 - Sh /2)
DrawImage(K(Color), 6 + Tw, h / 5 * 2 - Sh / 2)
DrawImage(K(Color), 6 + Tw, h / 5 * 3 - Sh / 2)
DrawImage(K(Color), 6 + Tw, h / 5 * 4 - Sh / 2)
DrawImage(K(Color), w - 7 - Tw - Sw, h / 5 - Sh /2)
DrawImage(K(Color), w - 7 - Tw - Sw, h / 5 * 2 - Sh / 2)
DrawImage(K(Color), w - 7 - Tw - Sw, h / 5 * 3 - Sh / 2)
DrawImage(K(Color), w - 7 - Tw - Sw, h / 5 * 4 - Sh / 2)
DrawImage(K(Color), w / 2 - Sw / 2, h / 5 + h / 10 - Sh / 2)
DrawImage(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)
StartDrawing(ImageOutput(i))
DrawImage(K(Color + 8), w / 2 - ImageWidth(K(Color + 8)) / 2, h / 2 - ImageHeight(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)
StopDrawing()
EndIf
;TransparentSpriteColor(i, $FF80FF)
EndIf
Next i
For i = 0 To 11
FreeImage(K(i))
Next i
FreeFont(FID)
ProcedureReturn Result
EndProcedure
;-Example
Define.l A, B, S, M, i
Define.f X, Y
Define.s Text
OpenWindow(0, #PB_Ignore, #PB_Ignore, 640, 480, "Test", #PB_Window_SystemMenu | #PB_Window_MaximizeGadget | #PB_Window_SizeGadget)
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_KEYDOWN
Select EventwParam()
Case #VK_DOWN
A + 8
If A > 45
A = 45
EndIf
Case #VK_UP
A - 8
If A < 1
A = 1
EndIf
EndSelect
Case #WM_SIZE
S = 1
X = (WindowWidth(0) / 640) * 96
Y = (WindowWidth(0) / 640) * 120
M = WindowWidth(0) / 2
Case 0
If S = 134568487
If OpenWindowedScreen(WindowID(0), 0, 0, WindowWidth(0), WindowHeight(0), 0, 0, 0)
CreateCards(X, Y)
B = M - ImageWidth(0) * 2 - 15
EndIf
S = 0
EndIf
Delay(5)
Break
EndSelect
ForEver
; If ExamineKeyboard()
; If KeyboardReleased(#PB_Key_Down)
;
; ElseIf KeyboardReleased(#PB_Key_Up)
; A - 8
; If A < 1
; A = 1
; EndIf
; EndIf
; EndIf
;ClearScreen($8F8F8F)
StartDrawing(WindowOutput(0))
DrawImage(ImageID(0), M - ImageWidth(0) / 2, 20)
For i = 0 To 3
DrawImage(i + A, B + (i) * (ImageWidth(i + A) + 10), 30 + ImageHeight(i + A))
DrawImage(i + 4 + A, B + (i) * (ImageWidth(i + 4 + A) + 10), 40 + 2 * ImageHeight(i + 4 + A))
Next i
; StopDrawing()
; If StartDrawing(ScreenOutput())
DrawText(WindowWidth(0) - TextWidth(Text), WindowHeight(0) - TextHeight(Text), Text, #White, $8F8F8F)
StopDrawing()
; EndIf
;FlipBuffers()
ForEver