War es auch, naja, hier ist sozusagen das ergebniss (ok, es ist irgendwie öde...)
edit: Grafik geupdatet, Danke an Rings für die Windowskartenfunktion
Code: Alles auswählen
Global budget.l
Global kartenwert.b
Global newround.b
budget=1000
newround=1
Enumeration
#neuekarte
#fertig
#einsatz
#ok
#budget
#text
#thanks
EndEnumeration
#WindowWidth=400
#windowHeight=300
Structure karte
wert.b
name.s
state.b
Sprite.b
EndStructure
Structure hand
wert.b
name.s
Sprite.b
EndStructure
Dim karten.karte(52)
NewList hand.hand()
Procedure.s farbe(farbe)
Select farbe
Case 1
farbreturn.s="Kreuz"
Case 2
farbreturn.s="Karo"
Case 3
farbreturn.s="Herz"
Case 4
farbreturn.s="Piek"
EndSelect
ProcedureReturn farbreturn
EndProcedure
Procedure zieh()
rezieh:
karte=Random(51)+1
If karten(karte)\state=0
Goto rezieh
EndIf
ResetList(hand())
AddElement(hand())
hand()\name=karten(karte)\name
hand()\wert=karten(karte)\wert
hand()\Sprite=karten(karte)\Sprite
karten(karte)\state=0
;DeleteElement(karten())
num=0
EndProcedure
For kart=1 To 13
For farb=1 To 4
Select kart
Case 1
karten(num)\wert=11
karten(num)\name=farbe(farb)+" "+"Ass"
Case 11
karten(num)\wert=10
karten(num)\name=farbe(farb)+" "+"Bube"
Case 12
karten(num)\wert=10
karten(num)\name=farbe(farb)+" "+"Dame"
Case 13
karten(num)\wert=10
karten(num)\name=farbe(farb)+" "+"König"
Default
karten(num)\wert=kart
karten(num)\name=farbe(farb)+" "+Str(kart)
EndSelect
karten(num)\state=1
karten(num)\Sprite=num
num+1
Next
Next
Procedure CardDraw(hdc,NR,x,y,X2,Y2)
result=OpenLibrary(1,"cards.dll")
If result
cdtInit=IsFunction(1,"cdtInit")
cdtDrawExt=IsFunction(1,"cdtDrawExt")
cdtTerm=IsFunction(1,"cdtTerm")
EndIf
result=CallFunctionFast(cdtInit,@w,@h)
result=CallFunctionFast(cdtDrawExt,hdc,x,y,X2,Y2,NR,0,0)
result= CallFunctionFast(cdtTerm)
CloseLibrary(1)
EndProcedure
OpenWindow(1,100,100,#WindowWidth,#windowHeight,#PB_Window_SystemMenu|#PB_Window_ScreenCentered|#PB_Window_SizeGadget,"17&4")
;OpenWindowedScreen(WindowID(),0,0,300,200,1,0,0)
CreateGadgetList(WindowID())
ButtonGadget(#neuekarte,10,#windowHeight-20,100,20,"Noch eine Karte")
ButtonGadget(#fertig, 110,#windowHeight-20,50,20,"Fertig")
ButtonGadget(#ok,250,#windowHeight-20,40,20,"OK")
StringGadget(#budget,#WindowWidth-100,10,100,20,Str(budget),#PB_String_ReadOnly|#PB_String_LowerCase)
SpinGadget(#einsatz,200,#windowHeight-20,50,20,1,19999)
TextGadget(#text,160,#windowHeight-20,75,20,"Einsatz:")
SetGadgetState(#einsatz,10)
DisableGadget(#neuekarte,1)
DisableGadget(#fertig,1)
DisableGadget(#einsatz,1)
TextGadget(#thanks,100,#windowHeight+2,300,15,"BenpiccoSoft 2005, special Thanks to Rings")
LoadFont(1,"Old English Text MT",16)
LoadFont(0,"Times New Roman",14)
Procedure newround(message$,win)
StartDrawing(WindowOutput())
Box(150,100,100,15,RGB($DB,$E0,$1))
DrawingMode(1)
Locate(150,200)
FrontColor(255,10,10)
DrawingFont(UseFont(1))
DrawText(message$)
;Box(0,0,WindowWidth(),WindowHeight(),RGB($DB,$E0,$1))
StopDrawing()
DisableGadget(#fertig,1)
DisableGadget(#neuekarte,1)
budget=budget+GetGadgetState(#einsatz)*win
DisableGadget(#ok,0)
newround=1
ClearList(hand())
kartenwert=0
For x=1 To 52
karten(x)\state=1
Next
ClearList(hand())
If win>1
For x=1 To 3
beep_(150*x,100)
Next
ElseIf win<=0
For x=3 To 1 Step-1
beep_(150*x,100)
Next
ElseIf win=1
beep_(100,100)
EndIf
StartDrawing(WindowOutput())
Locate(100,100)
DrawingFont(UseFont(0))
DrawText("Drücken Sie OK um fortzufahren")
StopDrawing()
EndProcedure
Repeat
Delay(10)
x=0
Redraw-1
If Redraw<1
Redraw=100
hdc.l = StartDrawing(WindowOutput())
;For card=0 To 51
; CardDraw(hdc,karten(card)\Sprite,10+(card*30),10,80,100)
;Next
DrawingMode(1)
ForEach hand()
x+1
;Debug hand()\name
CardDraw(hdc,hand()\Sprite,10,15*x,80,100)
Locate(10,15*x+100)
DrawText("Gesamt:"+Str(kartenwert))
Next
StopDrawing()
EndIf
Event = WaitWindowEvent()
If budget<=0
Goto blank:
EndIf
If kartenwert>21
newround("Verloren!",-1)
ElseIf kartenwert=21
newround("Gewonnen!",2)
EndIf
If Event = #PB_EventGadget
GadgetID = EventGadgetID()
If GadgetID=#neuekarte
zieh()
Redraw=0
ElseIf GadgetID=#fertig
ClearList(hand())
wert=1
zieh=0
Repeat
zieh()
ResetList(hand())
NextElement(hand())
wert+hand()\wert
zieh+1
hdc=StartDrawing(WindowOutput())
CardDraw(hdc,hand()\Sprite,100,15*zieh,80,100)
StopDrawing()
Delay(500)
If wert>21
newround("Verloren!",-1)
Goto gewinn
EndIf
Until wert >16 Or zieh>4 Or Random(budget)=1
If wert>21
newround("Verloren!",-1)
Goto gewinn
EndIf
If wert>kartenwert
newround("Verloren!",-1)
ElseIf wert<kartenwert
newround("Gewonnen!",2)
ElseIf wert=kartenwert
newround("Unentschieden...",1)
EndIf
gewinn:
ElseIf GadgetID=#einsatz And GetGadgetState(#einsatz)>budget
SetGadgetState(#einsatz,budget)
ElseIf GadgetID=#ok And newround=1
StartDrawing(WindowOutput())
DrawingFont(UseFont(0))
Box(100,100,TextLength("Drücken Sie OK um fortzufahren"),16,RGB(255,255,255))
Locate(100,100)
DrawText("Ihren Einsatz bitte.")
StopDrawing()
newround=0
DisableGadget(#einsatz,0)
ElseIf GadgetID=#ok And newround=0
StartDrawing(WindowOutput())
Box(0,0,#WindowWidth-110,#windowHeight-30,RGB($DB,$E0,$1))
StopDrawing()
Redraw=1
DisableGadget(#einsatz,1)
DisableGadget(#ok,1)
DisableGadget(#neuekarte,0)
DisableGadget(#fertig,0)
For x=1 To 2
zieh()
Next
EndIf
SetGadgetText(#budget,Str(budget))
SetGadgetText(#einsatz,Str(GetGadgetState(#einsatz)))
StartDrawing(WindowOutput())
Box(10,15,200,15*CountList(hand()),RGB($DB,$E0,$1))
DrawingMode(1)
ResetList(hand())
x=0
kartenwert=0
While NextElement(hand())
x+1
Locate(10,15*x)
;DrawText("Test")
DrawText(hand()\name)
kartenwert=kartenwert+hand()\wert
Wend
;Locate(100,150)
;Box(100,150,100,20,RGB($DB,$E0,$1))
StopDrawing()
EndIf
Until Event = #PB_EventCloseWindow
End
blank:
MessageRequester("Blank","Du bist blank!")
End
Das Ding in der Mitte ist das Feld für den Einsatz (ich weiß, das ginge schöner...), naja, dann bekommt man die karten, Ziel des Spiels ist es, 21 Punkte zu erreichen, tut man das, hat man gewonnen (z.b. ein Ass (11) und ein König (10), oder Eine 7 eine 10 und eine 4)
man drückt solange auf "Noch eine karte" bis man glaubt, es seie gut (hat man über 21, hat man verloren). Dann auf "Fertig" Jetzt versucht der Computer (der die bank spielt) eine höhere Punktzahl zu erreichen (er weiß nichts von der Spielerpunktzahl). Geingt ihm das, verliert man den einsatz, anderenfalls hat man das doppelte gewonnen.
Achso, das oben rechts ist das Geld, das man hat.