Punktezählung bei einem Kartenspiel

Übersicht BlitzBasic Beginners-Corner

Neue Antwort erstellen

Smokie

Betreff: Punktezählung bei einem Kartenspiel

BeitragSa, Jul 09, 2005 11:31
Antworten mit Zitat
Benutzer-Profile anzeigen
Hallo,
ich programmiere gard ein Blackjack-kartenspiel. Es läuft alles wunderbar nur habe ich ein Problem:
Ich verstehe nicht was an meinem Program NICHT flasch ist Laughing:
Ich habe für jede Karte ne function z.B. so:
Code: [AUSKLAPPEN]

Function sieben(xpos,ypos,nummer)
DrawImageRect karten,xpos,ypos,3,5,154,245
spielerpunkte(nummer)=7
End Function


mit dem Parameter nummer wird übergeben die wieviele karte jetzt gezogen wurde also wenn ich 3 Karten gezogen habe ist der Befehl für die dritte Karte:
Code: [AUSKLAPPEN]

If noch=1 Then
   
   drittekartegeben()
   
EndIf

Function drittekartegeben()
   If kartespieler(2)=0 Then
   sieben(500,500,2)
   
   ElseIf kartespieler(2)=1 Then
   acht(500,500,2)
   
   ElseIf kartespieler(2)=2 Then
   neun(500,500,2)
   
   ElseIf kartespieler(2)=3 Then
   bube(500,500,2)
   
   ElseIf kartespieler(2)=4 Then
   dame(500,500,2)
   
   ElseIf kartespieler(2)=5 Then
   koenig(500,500,2)
   
   ElseIf kartespieler(2)=6 Then
   zehn(500,500,2)
   
   ElseIf kartespieler(2)=7 Then
   ass(500,500,2)
   
   EndIf
End Function



Ich habe für die Bank und für den Spieler je 2 Dim-Felder für die Punkte und eins für die Karte die liegt jedes dim Feld hat 4 Einträge:
Code: [AUSKLAPPEN]

dim kartespieler(3)

Und jetzt kommt mein Problem:
hier wird die 1. Karte für die Bank gelget:
Code: [AUSKLAPPEN]

If kartenbank(0)=0 Then
sieben(100,50,0)

ElseIf kartenbank(0)=1 Then
acht(100,50,0)

ElseIf kartenbank(0)=2 Then
neun(100,50,0)

ElseIf kartenbank(0)=3 Then
bube(100,50,0)

ElseIf kartenbank(0)=4 Then
dame(100,50,0)

ElseIf kartenbank(0)=5 Then
koenig(100,50,0)

ElseIf kartenbank(0)=6 Then
zehn(100,50,0)

ElseIf kartenbank(0)=7 Then
ass(100,50,0)

EndIf

mein Problem ist nun Warum wenn jetzt die erste karte de Bank acht ist nicht die Acht zu den Punkten des Spielers dazu gezählt wird. Es ist zwar richtig wie es passiert aber ich finde es müsste eigendlich falsch sein Wink

Bitte um Hilfe
Smokie
M-Soft Studios Mit selbst gemachtem Forum!!!
Unbequem lebt's sich schwer.
Musik macht erst Spaß, wenn man sie mit 2,8 facher Geschwindigkeit hört
Zuletzt bearbeitet von Smokie am Fr Jan 01, 1888 51:58 PM, insgesamt 1000-mal bearbeitet

Jack

BeitragSa, Jul 09, 2005 11:40
Antworten mit Zitat
Benutzer-Profile anzeigen
Eine Frage, bei einem Kartenspiel gibt es doch immer 4 Farben, oder Question
Wer kein HTML kann und lernen will, der ist wirklich dumm... MFG Dennerlein

Smokie

BeitragSa, Jul 09, 2005 11:42
Antworten mit Zitat
Benutzer-Profile anzeigen
Das ist richtig aber ich wollte erstmal das Prinzip machen außerdem ist das bei Blackjack nicht wichtig
M-Soft Studios Mit selbst gemachtem Forum!!!
Unbequem lebt's sich schwer.
Musik macht erst Spaß, wenn man sie mit 2,8 facher Geschwindigkeit hört
Zuletzt bearbeitet von Smokie am Fr Jan 01, 1888 51:58 PM, insgesamt 1000-mal bearbeitet
 

konstantin

BeitragSa, Jul 09, 2005 11:51
Antworten mit Zitat
Benutzer-Profile anzeigen
du machst dir das leben unnoetig schwer. du kannst vorher "plaetze" definieren, an denen die karten liegen und dir dann ein type basteln.

BlitzBasic: [AUSKLAPPEN]
Type tSpielkarte
Field farbe
Field wert
Field platz


BlitzBasic: [AUSKLAPPEN]
karte.tSpielkarte = New tSpielkarte
karte\farbe = 0 ; 0 = kreuz, 1 = pik, 2 = herz, 3 = karo
karte\wert = 7 ; 7 = sieben, 8 = acht, 9 = neun, 10 = zehn, 11 = bube, 12 = dame, 13 = koenig, 14 = ass
karte\platz = 0 ; 0 = kartenstapel, 1 = spielerhand


BlitzBasic: [AUSKLAPPEN]
For karte.tSpielkarte = Each tSpielkarte
If(Not karten\platz)
; karte beim kartenstapel malen
Else
; karte beim spieler malen
EndIf
Next
  • Zuletzt bearbeitet von konstantin am Sa, Jul 09, 2005 11:52, insgesamt einmal bearbeitet

Smokie

BeitragSa, Jul 09, 2005 11:52
Antworten mit Zitat
Benutzer-Profile anzeigen
Das wollte ichd doch net wissen ich will doch nur das mit den Punkten wissen ich möchte das ganze möglichst ohne Hilfe machen
M-Soft Studios Mit selbst gemachtem Forum!!!
Unbequem lebt's sich schwer.
Musik macht erst Spaß, wenn man sie mit 2,8 facher Geschwindigkeit hört
Zuletzt bearbeitet von Smokie am Fr Jan 01, 1888 51:58 PM, insgesamt 1000-mal bearbeitet

Jack

BeitragSa, Jul 09, 2005 12:00
Antworten mit Zitat
Benutzer-Profile anzeigen
Alu hat Folgendes geschrieben:
BlitzBasic: [AUSKLAPPEN]
Type tSpielkarte 
Field farbe
Field wert
Field platz


Da gehört doch noch End Type hin, oder Question
Wer kein HTML kann und lernen will, der ist wirklich dumm... MFG Dennerlein

Alfadur

BeitragSa, Jul 09, 2005 12:57
Antworten mit Zitat
Benutzer-Profile anzeigen
nein jack, das geht auch ohne. allerdings kommt dann ne fehlermeldung...*narf*. lass das. aus. bei fuss...

zu deinem problem smokie: so ist das nicht wirklich ersichtlich aus deinem code, zumindest nicht für mich, aber versuchs dochmal mit debugger an ... kann man davon ausgehen das du dann einfach spielerpunkte() durchgehst von 0 bis 3 und dir die punkte zusammenrechnen läßt?
A Cray is the only computer that runs an endless loop in less than four hours.

Alfadur

BeitragSa, Jul 09, 2005 14:18
Antworten mit Zitat
Benutzer-Profile anzeigen
so, hab mal was gemacht, vielleicht lernst du ja was davon ... kann man noch verbessern, aber als grundgerüst sicher nicht verkehrt ...

BlitzBasic: [AUSKLAPPEN]

;blackjack von mir, der chillkröte, weil smokie so nett fragte...

SeedRnd MilliSecs() ;zufallsgenerator, der freund eines jeden programmierers

;konstanten für die einzelnen farben und bank und spieler

Const farbe_pik=0
Const farbe_herz=1
Const farbe_karo=2
Const farbe_blatt=3
Const bank=1
Const spieler=2

;typ für die karte, selectedby gibt an ob von bank oder spieler gezogen
Type Tkarte
Field farbe
Field wert
Field name$
Field Selectedby
End Type

;ne funktion um die karten zu erstellen
Function create_karte.Tkarte(farbe,wert,name$)
Vkarte.Tkarte=New Tkarte
Vkarte\farbe=farbe
Vkarte\wert=wert
Vkarte\name$=name$
Vkarte\Selectedby=0
Return Vkarte
End Function

;alle karten erstellen
create_karte(farbe_pik,7,\"Pik 7\")
create_karte(farbe_pik,8,\"Pik 8\")
create_karte(farbe_pik,9,\"Pik 9\")
create_karte(farbe_pik,10,\"Pik 10\")
create_karte(farbe_pik,2,\"Pik Bube\")
create_karte(farbe_pik,3,\"Pik Dame\")
create_karte(farbe_pik,4,\"Pik König\")
create_karte(farbe_pik,11,\"Pik Ass\")

create_karte(farbe_herz,7,\"Herz 7\")
create_karte(farbe_herz,8,\"Herz 8\")
create_karte(farbe_herz,9,\"Herz 9\")
create_karte(farbe_herz,10,\"Herz 10\")
create_karte(farbe_herz,2,\"Herz Bube\")
create_karte(farbe_herz,3,\"Herz Dame\")
create_karte(farbe_herz,4,\"Herz König\")
create_karte(farbe_herz,11,\"Herz Ass\")

create_karte(farbe_karo,7,\"Karo 7\")
create_karte(farbe_karo,8,\"Karo 8\")
create_karte(farbe_karo,9,\"Karo 9\")
create_karte(farbe_karo,10,\"Karo 10\")
create_karte(farbe_karo,2,\"Karo Bube\")
create_karte(farbe_karo,3,\"Karo Dame\")
create_karte(farbe_karo,4,\"Karo König\")
create_karte(farbe_karo,11,\"Karo Ass\")

create_karte(farbe_blatt,7,\"Blatt 7\")
create_karte(farbe_blatt,8,\"Blatt 8\")
create_karte(farbe_blatt,9,\"Blatt 9\")
create_karte(farbe_blatt,10,\"Blatt 10\")
create_karte(farbe_blatt,2,\"Blatt Bube\")
create_karte(farbe_blatt,3,\"Blatt Dame\")
create_karte(farbe_blatt,4,\"Blatt König\")
create_karte(farbe_blatt,11,\"Blatt Ass\")

;so, ab jetzt haben wir also nen riesen stapel mit karten

;get_karte holt irgendeine karte aus dem stapel raus, id muß zwischen 1 und 32 liegen, mehr karten gibts ja auch nicht
Function get_karte.Tkarte(id)
count=1
For Vkarte.Tkarte=Each Tkarte
If count=id Then Return Vkarte
count=count+1
Next
Return Null
End Function

;gibt eine karte für die bank
Function add_card_bank()
Repeat
x=Rand(1,32)
karte.Tkarte=get_karte(x)
Until karte\Selectedby=0
karte\Selectedby=bank
DebugLog \"Karte für die Bank\"
End Function

;gibt die karten welche die bank hat aus ...
Function Print_bank_cards()
Print \"Bank\"
For Vkarte.Tkarte=Each Tkarte
If Vkarte\Selectedby=bank Then Print Vkarte\name$
Next
Print
End Function

;gibt ne karte für den spieler
Function add_card_player()
Repeat
x=Rand(1,32)
karte.Tkarte=get_karte(x)
Until karte\Selectedby=0
karte\Selectedby=spieler
DebugLog \"Karte für den Spieler\"
End Function

;gibt die spielerkarten aus ...
Function Print_player_cards()
Print \"Spieler\"
For Vkarte.Tkarte=Each Tkarte
If Vkarte\Selectedby=spieler Then Print Vkarte\name$
Next
Print
End Function

;zählt die punkte vom spieler
Function count_points_player()
points=0
For Vkarte.Tkarte=Each Tkarte
If Vkarte\Selectedby=spieler Then points=points+Vkarte\wert
Next
Return points
End Function

;zählt die punkte der bank
Function count_points_bank()
points=0
For Vkarte.Tkarte=Each Tkarte
If Vkarte\Selectedby=bank Then points=points+Vkarte\wert
Next
Return points
End Function

;anfangszustand, 2 karten spieler, 2 karten für die bank
Function init()
add_card_player()
add_card_player()
add_card_bank()
add_card_bank()
End Function

;setzt alles auf den ausgangszustand zurück
Function clear()
For Vkarte.Tkarte=Each Tkarte
Vkarte\Selectedby=0
Next
End Function

init()

Endgame=False ;gibt an ob spiel zu ende
While Not KeyHit(1)

Cls
Locate 0,0
Print_bank_cards()
Print \"Punkte : \"+count_points_bank()
Print
Print_player_cards()
Print \"Punkte : \"+count_points_player()
Print
If Endgame=False Then
Print \"Space für noch ne Karte, Return wenn fertig\"
FlushKeys()
WaitKey()
If KeyHit(57) Then add_card_player() ;bei space geben wir dem player noch ne karte
If KeyHit(28) Then ;bei return gibt die bank sich solange karten bis sie verliert,
Endgame=True ;spiel wird auf ende gesetzt ...
If count_points_player()<=21 Then ;falls der spieler nich schon verloren hat
While count_points_bank()<count_points_player()
add_card_bank()
Wend
End If
End If
Else ;wenn spiel zu ende, dann abrechnung machen, schauen wer gewonnen hat, pi pa po
If count_points_player()>21 Then
Print \"Du hast leider verloren - Taste drücken, dann gehts wieder los \"
Else If count_points_player()<=count_points_bank() And count_points_bank()<=21 Then
Print \"Die Bank macht das Rennen- Taste drücken, dann gehts wieder los \"
Else
Print \"$$$ Yeah, you did it ... You win $$$ - Taste drücken, dann gehts wieder los \"
End If
WaitKey()
clear()
init()
endgame=False
End If

Wend

End
A Cray is the only computer that runs an endless loop in less than four hours.

Artemis

BeitragSa, Jul 09, 2005 16:09
Antworten mit Zitat
Benutzer-Profile anzeigen
ich wüd ma sage verry kool

Neue Antwort erstellen


Übersicht BlitzBasic Beginners-Corner

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group