Fragen zu Kartenspiele?

Übersicht BlitzBasic Beginners-Corner

Neue Antwort erstellen

 

blackmaster

Betreff: Fragen zu Kartenspiele?

BeitragDo, Feb 21, 2008 21:29
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragDo, Feb 21, 2008 21:39
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragDo, Feb 21, 2008 21:43
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragDo, Feb 21, 2008 23:00
Antworten mit Zitat
Benutzer-Profile anzeigen
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
Twitter
 

blackmaster

BeitragDi, Feb 26, 2008 1:36
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragDi, Feb 26, 2008 9:04
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragDi, Feb 26, 2008 21:30
Antworten mit Zitat
Benutzer-Profile anzeigen
mir fallt auch auf dass man Kreuz nicht mit TZ schreibt Rolling Eyes

kriD

BeitragDi, Feb 26, 2008 21:54
Antworten mit Zitat
Benutzer-Profile anzeigen
Und mir fällt auf, dass man fällt nicht mit a schreibt Rolling Eyes Very Happy

@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

BeitragDi, Feb 26, 2008 22:32
Antworten mit Zitat
Benutzer-Profile anzeigen
kriD hat Folgendes geschrieben:
Und mir fällt auf, dass man fällt nicht mit a schreibt Rolling Eyes Very Happy



jop das sind wir österreicher Smile

FireballFlame

BeitragMi, Feb 27, 2008 22:12
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragDo, Feb 28, 2008 12:46
Antworten mit Zitat
Benutzer-Profile anzeigen
@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 Rolling Eyes

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

BeitragMo, März 03, 2008 19:07
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragMo, März 03, 2008 19:29
Antworten mit Zitat
Benutzer-Profile anzeigen
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 Rolling Eyes

Ääh stimmt, hab nicht nachgedacht Wink
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.

Neue Antwort erstellen


Übersicht BlitzBasic Beginners-Corner

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group