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

tmode00Betreff: Problem mit Cls...Flip und co. (beim Versuch eines Bj-Games) |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
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: 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 ![]() |
||
While (1) : Wend |
![]() |
PSY |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 ![]() |
||
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group