Seite 2 von 2

Verfasst: 04.02.2008 22:29
von hardfalcon
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 :lol: :

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 

Verfasst: 04.02.2008 23:08
von HeX0R
DrawImage() will die ImageID...

Ausserdem ist der "neue Befehl" EventwParam() glaube schon seit 3.9 oder noch länger existent ;)

Verfasst: 04.02.2008 23:22
von hardfalcon
Man lernt nie aus... :D