Fragen zu Kartenspiele?
Übersicht

blackmasterBetreff: Fragen zu Kartenspiele? |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Hallo,
ich möchte gerne ein Kartenspiel schreiben und weiss jetzt nicht wie ich vorgehen muss. 1. Sollte ich die Karten lieber mit Types erstellen, wenn ja, welche Felder sollte ich definieren? 2. Muss ich vieleicht noch Dim Felder definieren um die Spielkarten bei den Spielern dort zu plazieren? Ich wäre euch sehr dankbar für Tips und lösungsvorschläge. MfG |
||
![]() |
mahe |
![]() Antworten mit Zitat ![]() |
---|---|---|
Es kommt ganz drauf an was für ein Kartenspiel es werden soll.
Jede andere Antwort wäre unseriös. |
||
ʇɹǝıdɯnɹɹoʞ ɹnʇɐuƃıs - ǝpoɥʇǝɯ-ɹoɹɹıɯ ɹǝp uı ,ɹoɹɹǝ, |
blackmaster |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Sry, ich wollte das Kartenspiel "Schnautz" versuchen, aber das ist zu komplex deshalb würde ich gerne mal ein MauMau Spiel versuchen.
Danke schonmal. MfG |
||
![]() |
skey-z |
![]() Antworten mit Zitat ![]() |
---|---|---|
für mau mau wären types für die hände am geeignetsten, da hier keine Begrenzung auf der Hand gegeben ist | ||
Awards:
Coffee's Monatswettbewerb Feb. 08: 1. Platz BAC#57: 2. Platz |
blackmaster |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Danke, ich versuche gerade ein ähnliches Spiel wie Schwimmen auch bekannt als "Schnautz" zu schreiben.
Ich habe noch eine kleine Frage und zwar, wie kann ich z.B. die Karten Mischen? Also ich habe eine .txt Datei erstellt in denen die Werte der Karten stehen: Karte=Ass Bezeichnung=Kreutz Frames=0 Wert=11 Karte=7 Bezeichnung=Kreutz Frames=1 Wert=7 Karte=8 Bezeichnung=Kreutz Frames=2 Wert=8 Karte=9 Bezeichnung=Kreutz Frames=3 Wert=9 u.s.w. und laden tuh ich es so: Code: [AUSKLAPPEN] Function KartenEinlesen()
Datei = ReadFile("karten.txt") While Not Eof(Datei) k.karten = New karten k\karte = ReadLine(Datei) pos = Instr(k\karte,"=") k\karte = Mid(k\karte,pos+1,Len(k\karte)) k\karte_typ$ = ReadLine(Datei) pos = Instr(k\karte_typ$,"=") k\karte_typ$ = Mid(k\karte_typ$,pos+1,Len(k\karte_typ$)) k\karte_frames = ReadLine(Datei) pos = Instr(k\karte_frames,"=") k\karte_frames = Mid(k\karte_frames,pos+1,Len(k\karte_frames)) k\karte_wert = ReadLine(Datei) pos = Instr(k\karte_wert,"=") k\karte_wert = Mid(k\karte_wert,pos+1,Len(k\karte_wert)) i=i+1 k\karte_nr% = i Wend CloseFile(Datei) End Function Die Karten werden alle in Types erstellt, aber wie kann ich die Karten in andere reihenfolge Mischen? Vielen Dank schonmal. MfG |
||
![]() |
The_Nici |
![]() Antworten mit Zitat ![]() |
---|---|---|
Also, speichere alle Types nochmals in ein Array
Code: [AUSKLAPPEN] Dim typearray.type(99) For i=0 to 99 typearray(i)=t Next So aus dem Kopf aufgeschrieben. Danach kannst du nämlich mit ql:Rand einen zufälligen Eintrag daraus nehmen. Dann nur noch mit before, after etc. herumspielen. |
||
![]() |
WüstLing |
![]() Antworten mit Zitat ![]() |
---|---|---|
mir fallt auch auf dass man Kreuz nicht mit TZ schreibt ![]() |
||
![]() |
kriD |
![]() Antworten mit Zitat ![]() |
---|---|---|
Und mir fällt auf, dass man fällt nicht mit a schreibt ![]() ![]() @The_Nici ich denke nicht, das es klappen wird einfach ein paar Karten per RAND aus dem Array zu picken, weil dann ja auch karten doppelt genommen werden können und ehe man sich versieht gibts 9 mal kreuZ As und dafür keine 7. Um das zu verhindern müsstest du jedes mal, wenn du eine karte mit RAND neu zugeordnet hast diese aus dem array entfernen. MfG kriD |
||
Wenn ich du wäre, wäre ich lieber ich! |
![]() |
WüstLing |
![]() Antworten mit Zitat ![]() |
---|---|---|
kriD hat Folgendes geschrieben: Und mir fällt auf, dass man fällt nicht mit a schreibt
![]() ![]() jop das sind wir österreicher ![]() |
||
![]() |
FireballFlame |
![]() Antworten mit Zitat ![]() |
---|---|---|
Als ich mal ein Kartenspiel geproggt habe, hatte ich die Karten in Types gespeichert. Der Kartenstapel war ein eigenes Type, die Hand jedes Spielers war eins usw.
Zum Karten mischen hab ich dann einfach alle Karten zusammen in irgendein Type (z.B. die Hand eines der Spieler) geschoben, durchgezählt und die Anzahl in einer Variable gespeichert. Anschließend hab ich eine Zufallszahl von 1 bis [Anzahl] erzeugt, mir die entsprechende Karte rausgepickt und oben auf den Kartenstapel gelegt (also den Typeeintrag in das Stapeltype kopiert und anschließend gelöscht). Dann die Variable [Anzahl] um eins verringert, wieder eine Zufallszahl erzeugt usw., solange bis die Hand leer war. €: huups, kleine Korrektur ^^ |
||
PC: Intel Core i7 @ 4x2.93GHz | 6 GB RAM | Nvidia GeForce GT 440 | Desktop 2x1280x1024px | Windows 7 Professional 64bit
Laptop: Intel Core i7 @ 4x2.00GHz | 8 GB RAM | Nvidia GeForce GT 540M | Desktop 1366x768px | Windows 7 Home Premium 64bit |
- Zuletzt bearbeitet von FireballFlame am Mo, März 03, 2008 19:33, insgesamt 3-mal bearbeitet
![]() |
SpionAtom |
![]() Antworten mit Zitat ![]() |
---|---|---|
@FireballFlame
Wieso immer neu durchzählen? Wenn du von einem Stapel bekannter Größe eine Karte abziehst, solltest du auch ohne zu zählen wissen, wieviele dann verbleiben ![]() Und nichts ist so einfach, wie ein Array durchzuschütteln. Ich zitiere da mal ungefähr mein Kartenspiel: Code: [AUSKLAPPEN] ;Karten mischen
For i = 1 To 1000 a = Rand(1, 13) b = Rand(1, 13) tmp = card(a) card(a) = card(b) card(b) = tmp Next Einfach immer zwei zufällige Einträge nehmen, und diese vertauschen. Man wiederhole diesen Vorgang oft genug, und tadaa: Fertig ist das durchgemischte Array. Bei mir ist das Kartenspiel auch in einem Array gespeichert, und zwar von 0 bis 51. Durch die coole Anordnung meiner Karten, bekomme ich recht einfach Farbe und Wert heraus. |
||
os: Windows 10 Home cpu: Intel Core i7 6700K 4.00Ghz gpu: NVIDIA GeForce GTX 1080 |
Pitje Puck |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Also ich finde Types in dem Fall auch eleganter. Erstmal ähneln Types irgendwie der Natur des Kartenstapels mehr, und das Löschen einzelner Karten die herausgezogen werden ist einfacher. Doch warum mischt ihr eure Stapel wirklich? Reicht es nicht, erst beim Austeilen der Karten zufällig eine zu wählen und diese dann aus dem Type zu löschen? Oder gibt es da irgendwelche stochastischen Spitzfindigkeiten? | ||
![]() |
FireballFlame |
![]() Antworten mit Zitat ![]() |
---|---|---|
SpionAtom hat Folgendes geschrieben: @FireballFlame
Wieso immer neu durchzählen? Wenn du von einem Stapel bekannter Größe eine Karte abziehst, solltest du auch ohne zu zählen wissen, wieviele dann verbleiben ![]() Ääh stimmt, hab nicht nachgedacht ![]() Sehe aber zum Glück grad im Quelltext, dass ich damals nicht so doof war ^^ So siehts in meinem Code aus: Code: [AUSKLAPPEN] Local Kartenanzahl=0
Local z.Handkarten1 For z=Each Handkarten1 : Kartenanzahl=Kartenanzahl+1 : Next Local knr,ks Local uKarte_vorher.Handkarten1,uKarte_nachher.Kartenstapel Repeat knr=Rand(1,Kartenanzahl)-1 uKarte_vorher=First Handkarten1 For ks=1 To knr : uKarte_vorher=After uKarte_vorher : Next uKarte_nachher=New Kartenstapel uKarte_nachher\Farbe=uKarte_vorher\Farbe uKarte_nachher\Wert=uKarte_vorher\Wert Delete uKarte_vorher Kartenanzahl=Kartenanzahl-1 Until Kartenanzahl=0 @Pitje Puck: So könnte man es auch machen, aber dann geht ja die gesamte "Natur des Kartenstapels" wieder verloren. Ich find es viel besser, wenn ich mir das Type dann wirklich wie einen echten Stapel vorstellen kann, mit den Karten in der richtigen Reihenfolge. |
||
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group