Problem mit Cls...Flip und co. (beim Versuch eines Bj-Games)

Übersicht BlitzBasic Allgemein

Neue Antwort erstellen

 

tmode00

Betreff: Problem mit Cls...Flip und co. (beim Versuch eines Bj-Games)

BeitragDo, Jun 29, 2006 15:31
Antworten mit Zitat
Benutzer-Profile anzeigen
Hallo,

ich habe ein Problem,
beim Versuch ein Blackjack-Spiel zu machen will ich, das der Spieler eine Karte bekommt, dann die Bank, dann wieder der Spieler, dann die Bank eine Karte verdeckt, dann eine Routine abläuft die fragt ob der Spieler noch eine Karte will und gegebenenfalls das Spiel abbricht wenn 21 überschritten wurde! Sollte der Spieler ,,halt" sagen muss nun die Bank Ihre verdeckte Karte zeigen und solange sie unter 16 Punkten ist kaufen...eben ein normales blackjack Spiel!

Das Problem ist folgendes, wenn ich (vereinfacht dargestellt) so vorgehe, dass immer der Bildschirm geleert wird, dann überprüft wird ob noch eine Karte gebraucht wird und dann eine gegeben wird, so wird ja die zuerst gegebene Karte wieder von Cls gelöscht! Nach dem Prinzip:
-zeichnen
-maus anzeigen
-löschen (alte karte nun weg obwohl sie noch da sein soll)
-neue zeichnen (an anderer Position)....

Ungefähr so:


Code: [AUSKLAPPEN]
While
   cls
   
   if (wert < 21) then
   spieler_karte....
   endif

  ;hier maus zeichnen (DrawImage...)
   flip
Wend



Hier ein Screenshot von meinem Versuch:

user posted image


Hier der Quellcode:


Code: [AUSKLAPPEN]

;Init--->
Graphics 1024,768,32,1
SetBuffer BackBuffer()
;-----------------------------------------------------------------------
Global card_map = LoadAnimImage("bmp\blackjack\cardset.bmp",115,167,0,54)
MaskImage card_map,255,0,0
Global table_screen = LoadImage("bmp\blackjack\table.bmp")
Global konto_schrift = LoadFont("Tahoma",20,1,0,0)
Global title_schrift = LoadFont("Arial",20,1,0,0)
Global massage_schrift = LoadFont("Arial",50,1,0,0)

;-----------------------------------------------------------------------
;Glbale Variablen---------------->
Global slot_count_bank = 409
Global slot_count_player = 409
Global player_wert
Global bank_wert
;-----------------------------------------------------------------------
;Konstanten-->
Const Kreuz = 4
Const Pik = 3
Const Herz = 2
Const Karo = 1
;-----------------------------------------------------------------------
;Typen---->
Type TKarte
   Field farbe
   Field wert
   Field name$
   Field gfx_id
End Type

;-----------------------------------------------------------------------
Function message(txt_data$)
   SetFont title_schrift
   Color  0,0,0
   ;Fensterrahmen
   Rect 312,200,400,200,0
   Line 312,226,710,226
   
   ;Titelfüllung
   Color 255,70,21
   Rect 313,201,398,25,1
   
   ;Restfüllung
   Color 255,255,20
   Rect 313,227,398,172,1

   
   ;Titel
   Color 0,0,0
   Text 316,205, "Bitte beachten Sie:"
   
      
   ;Meldung
   SetFont massage_schrift
   Color 0,20,255
   Text 340,260,txt_data$
End Function
;-----------------------------------------------------------------------
Function create_card.TKarte(farbe,wert,name$,gfx_id)
   Kartenstapel.TKarte = New TKarte; erstelle objekt Kartenstapel (vom Typ TKarte)

   ;weise eigenschaften zu (von Function übergeben):
   Kartenstapel\farbe = farbe
   Kartenstapel\wert = wert
   Kartenstapel\name$ = name$
   Kartenstapel\gfx_id = gfx_id
   
   ;Gebe Objekt zurück
   Return Kartenstapel
End Function
;-----------------------------------------------------------------------
;------>Erstelle den Kartenstapel:
create_card(kreuz,11,"Kreuz Ass",0)
create_card(kreuz,2,"Kreuz 2",1)
create_card(kreuz,3,"Kreuz 3",2)
create_card(kreuz,4,"Kreuz 4",3)
create_card(kreuz,5,"Kreuz 5",4)
create_card(kreuz,6,"Kreuz 6",5)
create_card(kreuz,7,"Kreuz 7",6)
create_card(kreuz,8,"Kreuz 8",7)
create_card(kreuz,9,"Kreuz 9",8)
create_card(kreuz,10,"Kreuz 10",9)
create_card(kreuz,10,"Kreuz Bube",10)
create_card(kreuz,10,"Kreuz Dame",11)
create_card(kreuz,10,"Kreuz König",12)
create_card(Karo,11,"Karo Ass",13)
create_card(Karo,2,"Karo 2",14)
create_card(Karo,3,"Karo 3",15)
create_card(Karo,4,"Karo 4",16)
create_card(Karo,5,"Karo 5",17)
create_card(Karo,6,"Karo 6",18)
create_card(Karo,7,"Karo 7",19)
create_card(Karo,8,"Karo 8",20)
create_card(Karo,9,"Karo 9",21)
create_card(Karo,10,"Karo 10",22)
create_card(Karo,10,"Karo Bube",23)
create_card(Karo,10,"Karo Dame",24)
create_card(Karo,10,"Karo König",25)
create_card(Herz,11,"Herz Ass",26)
create_card(Herz,2,"Herz 2",27)
create_card(Herz,3,"Herz 3",28)
create_card(Herz,4,"Herz 4",29)
create_card(Herz,5,"Herz 5",30)
create_card(Herz,6,"Herz 6",31)
create_card(Herz,7,"Herz 7",32)
create_card(Herz,8,"Herz 8",33)
create_card(Herz,9,"Herz 9",34)
create_card(Herz,10,"Herz 10",35)
create_card(Herz,10,"Herz Bube",36)
create_card(Herz,10,"Herz Dame",37)
create_card(Herz,10,"Herz König",38)
create_card(Pik,11,"Pik Ass",39)
create_card(Pik,2,"Pik 2",40)
create_card(Pik,3,"Pik 3",41)
create_card(Pik,4,"Pik 4",42)
create_card(Pik,5,"Pik 5",43)
create_card(Pik,6,"Pik 6",44)
create_card(Pik,7,"Pik 7",45)
create_card(Pik,8,"Pik 8",46)
create_card(Pik,9,"Pik 9",47)
create_card(Pik,10,"Pik 10",48)
create_card(Pik,10,"Pik Bube",49)
create_card(Pik,10,"Pik Dame",50)
create_card(Pik,10,"Pik König",51)
;Alle 52 Karten (0 die erste 51 die letzte)
;-----------------------------------------------------------------------
Function get_card(id,slot,y_pos);Zieht Karte und gibt den Wert der Gezogenen Karte zurück
   ;Durchlaufe den Kartenstapel
   For Kartenstapel.TKarte = Each TKarte
      count=count + 1
      If count = id Then
         DrawImage card_map,slot,y_pos,Kartenstapel.TKarte\gfx_id   
         Return    Kartenstapel.TKarte\wert
      EndIf
   Next
End Function
;-----------------------------------------------------------------------
Function draw_table();Zeichnet den Tisch
   DrawImage table_screen,0,0
End Function
;-----------------------------------------------------------------------
Function add_card_bank()
   Slot_count = 409;Slot Position 409 (Position 1)

   While (bank_wert < 22);Solang bankwert < 22
      Slot_count = Slot_count + 21;Rutsche in den nächsten Slot
      bank_wert = bank_wert + get_card(Rnd(0,51),Slot_count,45);und Ziehe neue Karte
   Wend
   
   ;Sobald 21 überschriten---->   
   Message(Str(bank_wert) + " Überreizt!");Zeige Überreizt + den Wert an
   Bank_Wert = 0
End Function
;-----------------------------------------------------------------------
While Not KeyHit(1)
   Cls
   draw_table();Tisch Zeichnen
   
    ;add_card_player()   ;Karte für Spieler

   add_card_bank()       ;Karte[n] für Bank
   ;add_card_player()  ;Karte für Spieler
   ;add_dummy()      ;Verdeckte Karte für Bank

;HIER muss gefragt werden ob Spieler noch eine Karte will

;Wenn ja dann ziehen
;ansonsten


   ;resolve_dummy()    ;Verdeckte Karte Auflösen
   ;ziehe_bis_21().....
         

DrawImage mouse_map,MouseX(),MouseY() ;Mausunterstützung
Flip
WaitKey
Wend



Was Passiert? Es werden dauerhaft neue Karten gezogen und bei 21 neu gestartet! Der aktuell überreizte wert wird in der Meldungsbox angezeigt!

Wenn ich beispielsweise einfach mit WaitKey unterbrechen würde dann Könnte ich ja keine Maus verwenden und außerdem würden immer alle Karten verschwinden sobald sich der Spieler entscheidet noch eine Karte zu ziehen!

Naja, ich hoffe mirkann jemand weiterhelfen
Exclamation
While (1) : Wend

PSY

BeitragDo, Jun 29, 2006 17:02
Antworten mit Zitat
Benutzer-Profile anzeigen
hoi,

ich würd das so angehen (hab deinen code nur überflogen) :

Code: [AUSKLAPPEN]
While Not KeyHit(1)

   Cls
   zeichne_tisch()
   zeichne_karten()
   zeichne_maus()
   If MouseHit(1)
     abfragen (nochne karte, keine karte mehr, blubblbubbblubb)
   endif 
   Flip

wend



waitkey ist somit auch unnötig

l8er,
psy Wink

Neue Antwort erstellen


Übersicht BlitzBasic Allgemein

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group