Ja also da kann man noch nicht wirklich helfen. Am besten geht man bei Problemen so vor:
Was brauch ich eigentlich?
-Jeder Spieler hat 7 Karten, d.h. ich brauche min.7 Variablen pro Spieler damit ich denen die Kartenwerte (König, Bube, 7...) zuweisen kann.
-Etwas, dass abfragt welche Wert meine Karte besitzt und diese dann korrekt am Bildschirm anzeigt. Nebenbei muss sie auch bemerken, dass eine Karte weg ist (ich denke mal da ist es am besten so: Die Variable nimmt dann die 0 an wenn sie aus der Hand ist).
-Grenzen festlegen: Wieviele Spieler? Wieviele maximale Karten auf der Hand?
-KI festlegen. Wie und wann will der Computer ausspielen und vor allem "Mau Mau" sagen. Wann versucht er den umgedrehten Jungen zu Spielen? Welche andere KI will diese Karte dann umdrehen? usw.
Im Prinzip sind Techniksachen immer genaues planen und dannruntertippen und stellenweise abtesten um Fehler zu finden.
Zitat
Nur weil er neu im forum ist,heist das nicht,dass er ein Noob ist
Du könntest auch 52 Variablen machen (für jede Karte eine).
Der Wert einer dieser Variablen gibt dann den Spieler (1 bis Spieleranzahl) an, der die jeweilige Karte besitzt.
0 würde sich für eine bereits gelegte (oder -vor dem Spiel- noch nicht verteilte) Karte anbieten
und dann könnte man noch einen Wert dafür einführen den eine Karte erhält wenn sie gerade oben liegt (Spieler-Anzahl+1) was aber vielleicht simpler durch eine separate Variable geklärt wird.
Alternativ könntest du auch kennzeichnen an welcher Stelle die Karte gelegt wurde (indem du einfach nach jeder gelegten Karte von [Spieleranzahl+1] bis [Spieleranzahl+52] immer 1 nach oben zählst und das jeweilige Ergebnis der gelegten Karte zuordnest.... eine sehr saubere Methode die auch eine "Rückgängig-machen"-Funktion erlauben würde)
Aber fangen wir mal vorne an: Bei der Verteilung der Karten.
Mir fallen grade zwei Möglichkeiten ein wie man das umsetzen könnte (wobei Methode1 unsauber ist und vermutlich sehr lange braucht bis sie die Karten an den Mann gebracht hat aber das ändert nichts daran dass sie das erste war was mir eingefallen ist ^^):
Kartenverteilungs-Methode 1:
Die Kartenverteilung könntest du bewerkstelligen indem du eine Variable von 1 bis Spieleranzahl hochzählen lässt (die dann immer wieder auf 1 gesetzt wird) und diesen Wert jeweils einer zufällig ermittelten Karte (var1-52) zuteilst SOFERN der ermittelte Wert nicht bereits einen Wert hat. Falls dies der Fall ist (var>0) wird eine andere Karte ausgewählt...
Das Spielchen wird solange betrieben bis alle Karten verteilt sind.
Könnte allerdings sein dass der Maker gegen Ende ziemlich lange rumrechnet bis er die letzten Karten verteilt hat (weil mit großer wahrscheinlichkeit ja karten ermittelt werden die schon verteilt wurden...).
Kartenverteilungs-Methode 2:
Besser wäre vermutlich folgendes:
Mach eine Variable die der noch unverteilten Kartenanzahl entspricht.
Dann ermittelst du einen Zufallswert zwischen 1 und dieser Variable und nun folgt ein Abzählmechanismus der die einzelnen Variablen durchgeht und der den Zufallswert immer -1 macht wenn er an einer noch unverteilten Karte (var=0) ist. Wenn der den Zufallswert 0 erreicht hat, wird diese Karte dem Spieler zugeteilt der gerade an der Reihe ist eine Karte zu erhalten (wie du ermittelst welcher Spieler eine Karte kriegt hab ich in Methode1 angesprochen).
Die Anzahl noch unverteilter Karten muss natürlich um 1 reduziert werden und dann kann das ganze für den nächsten Spieler durchgeführt werden bis die Anzahl noch zu verteilender Karten 0 ist.
Methode 2 sollte ohne große zufallsbedingte Verzögerungen auskommen weil sie immer die gesamte Reihe der Karten durchgeht und nicht darauf wartet dass der Zufall mal eine Karte erwischt die noch zu verteilen ist
Also ein Noob bin ich nicht mehr, ich kann schon ziemlich viel, aber eben noch nicht alles!
Meine Probleme liegen da eher bei den Computergegnern (Computer-Ki), wie ich diese selber denken lassen kann...
Und dann hab ich ein Problem mit den Handkarten, mit dem Ablegestapel und dem Ziehstapel. Da muss ich jede Karte nur einmal vorkommen lassen, aber jede devinieren, welche darauf spielbar möglich ist und welche nicht. Dazu muss ich ja noch sagen, welche Karten auf welcher Hand sind und welche im Kartenstapel bzw. Ablegestapel. Wie kann ich das dem Maker sagen, dass man z.B.: keine Karte doppelt zieht... Den Rest würde ich so ziemlich hinbekommen, ausser das mit den Runden, dass wenn ich fertig bin, dass dann der nächste oder gegebenenfalls der vorherige dran kommt!
Aber ich hoffe, dass mir jemand helfen kann!
Danke jetzt schonmal, dass man mir immerhin geantwortet hat!
PS: Ich möchte in diesem Spiel keine (Regeln) auslassen! Und am besten wäre es, dass ich ihn mit dem Maker-XP mache! (Bessere Grafik, die wichtigsten Sachen sind ja beinhaltet: Schalter und Variablen)
Ich glaube du musst die Karten lediglich etwas abstrakter sehen dann lösen sich deine Probleme wie von selbst: Es ist möglich 52 Variablen zu nehmen und jede dieser Variablen steht für eine ganz spezifische Karte....
Darstellen musst du sie natürlich anschaulich aber die Regeln an sich sind reine Mathematik...
Zitat
PS: Ich möchte in diesem Spiel keine (Regeln) auslassen! Und am besten wäre es, dass ich ihn mit dem Maker-XP mache! (Bessere Grafik, die wichtigsten Sachen sind ja beinhaltet: Schalter und Variablen)
...
Die Spielregeln sind eigentlich kein größeres Problem die würde ich aber eher nach hinten auf der Planungsliste verschieben und einfügen wenn das Grundgerüst steht (Lediglich das Einwerfen würde ich von anfang an mit einplanen weil das nachträglich einzufügen zu tiefgreifende Änderungen im Gameplay mit sich bringen würde).
Zitat
Meine Probleme liegen da eher bei den Computergegnern (Computer-Ki), wie ich diese selber denken lassen kann...
...
Das mit dem "Denken" ist auch halb so wild.
Setzt sich zusammen aus zwei Komponenten: Verhaltensregeln (weitestgehend bestimmt durch Wahrscheinlichkeitstheorie und deine Willkür) und Zufall.
Da es nur eine sehr begrenzte Anzahl an Karten gibt die man regelkonform legen kann könnte deine erste KI so aussehen: Lege zufällig eine der Karten die möglich sind.
(Technisch könntest du für jede Karte auf der hand abfragen ob man sie legen kann, falls ja Counter+=1. Wenn du jede karte gecheckt hast, setze Counter auf rand(1,Counter) und lege die resultierende Karte...).
Nach dieser Zufallsauswahl -und bevor die Karte wirklich gelegt wird- sollte die KI natürlich noch checken ob eine zwei, ein Bube oder sonstwas in der Mitte liegt, das gewisse Handlungen zwingend macht (z.B. ist es sehr sinnvoll eine zwei zu legen wenn schon eine liegt).
Hier kommen dann alls Regeln ins Spiel.
Sofern du irgendetwas in Wahrscheinlichkeiten mathematisch ausdrücken kannst solltest du dem Comutergegner dieses Wissen an die Hand geben (wenn jemand einen buben legt sinkt die wahrscheinlichkeit dass es auch wirklich ein Bube ist mit jedem Buben der schon gefallen ist... ganz extrem natürlich wenn schon 4 Buben da waren ^^)
Aber das fällt dann schon wieder in die regeln die umzusetzen du einfach bestimmen musst welche Karte unter welchen gegebenheiten gelegt werden dürfen/müssen.
Zitat
Und dann hab ich ein Problem mit den Handkarten, mit dem Ablegestapel und dem Ziehstapel. Da muss ich jede Karte nur einmal vorkommen lassen, aber jede devinieren, welche darauf spielbar möglich ist und welche nicht. Dazu muss ich ja noch sagen, welche Karten auf welcher Hand sind und welche im Kartenstapel bzw. Ablegestapel.
...
Alle Karten sind in jeweils einer Variable komplett beschrieben. Je nachdem welchen Wert diese Variable hat bedeutet das dass die Karte auf dem Ziehstapel (=0) in der Hand eines Spielers (=1 bis Spieleranzahl) oder auf dem Ablegestapel (>Spieleranzahl) liegt.
Damit wäre doch alles in die Variablen gepackt was es über die Karten zu wissen gäbe.
Zitat
Wie kann ich das dem Maker sagen, dass man z.B.: keine Karte doppelt zieht...
...
Wie man Karten verteilt habe ich doch schon erklärt.
Genauso funktioniert das im Prinzip wenn man eine Karte ziehen soll: Der Maker muss ermitteln wie viele Karten noch zu verteilen sind (indem er sie alle 52 durchgeht und checkt ob ihr Wert 0 ist) und dann eine von den verfügbaren zufällig auswählen die dann natürlich dem spieler gegeben wird (d.h. einen anderen Wert erhält) und damit nicht mehr verfügbar ist...
Zitat
Den Rest würde ich so ziemlich hinbekommen, ausser das mit den Runden, dass wenn ich fertig bin, dass dann der nächste oder gegebenenfalls der vorherige dran kommt!
...
Welcher Spieler an der Reihe ist kannst du mit einer Variable bestimmen. Je nachdem in welche Richtung das Spiel momentan geht (was du über einen Switch klarstellen könntest) muss diese Variable halt nach jedem Zug +1 oder -1 gesetzt werden (wenn sie 1 unterschritten hat muss sie natürlich auf die maximale Spieleranzahl gesetzt werden und umgekehrt beim überschreiten der Spielerzahl auf 1)
Ja, schon, das hab ich mir ja auch alles so gedacht, aber wie kann ich dem Kartenstapel sagen, dass diese Karte bereits weg ist? Ich meine, man zieht ja auch eine Karte vom Stapel, die ja dann weg ist und auf der Hand ist!
Zudem brauche ich ja auch noch, dass man nach dem ziehen noch legen kann, falls man kann! Ohh, das ist mir gerade eingefallen...
Und wenn der Ziehstapel einmal leer ist, dann ist es auch schwer, die Karten vom Ablegestapel wieder in den Ziehstapel zu hauen, bis auf eben die letzte. Und das sollten wirklich die sein, die... Nein! HALT! ICH HABS! ICH GLAUBE, ICH KANN ALLES!!!
Naja, fast... Das mit den Handkarten wird noch ein bisschen schwer... Obwohl, muss ich ja eigentlich auch nur so machen, wie den Ablegestapel und den Kartenziehstapel!
@Phantom of Kami:
Du scheinst dich ja mal besonders gut mit dem Maker auszukennen. Ich werde wahrscheinlich das Spiel bald mal beginnen. Und wenn ich dann mal nicht weiter komme, könnte ich es evtl. zu dir schicken, damit du mir weiterhilfst? Das wäre cool... Danke jetzt schonmal!
Zitat von Bauzi
Ja also da kann man noch nicht wirklich helfen. Am besten geht man bei Problemen so vor:
Was brauch ich eigentlich?
-Jeder Spieler hat 7 Karten, d.h. ich brauche min.7 Variablen pro Spieler damit ich denen die Kartenwerte (König, Bube, 7...) zuweisen kann.
-Etwas, dass abfragt welche Wert meine Karte besitzt und diese dann korrekt am Bildschirm anzeigt. Nebenbei muss sie auch bemerken, dass eine Karte weg ist (ich denke mal da ist es am besten so: Die Variable nimmt dann die 0 an wenn sie aus der Hand ist).
-Grenzen festlegen: Wieviele Spieler? Wieviele maximale Karten auf der Hand?
-KI festlegen. Wie und wann will der Computer ausspielen und vor allem "Mau Mau" sagen. Wann versucht er den umgedrehten Jungen zu Spielen? Welche andere KI will diese Karte dann umdrehen? usw.
Im Prinzip sind Techniksachen immer genaues planen und dannruntertippen und stellenweise abtesten um Fehler zu finden.
Dito
...
Mit den 7 Variablen für jeden Spieler ist ein bisschen doof, da ein Spieler bei uns sogar manchmal bis zu mehr als 20 Karten auf der Hand hat...
Aber das mit dem Jungen umgedreht, dass ihn der Gegner so spielt...???
Und was sollte sich der Gegner dann eigentlich wünschen?
Das mit dem Winken dürfte ziemlich leicht sein: Du schreibst eine Message "Ich wünsche mir..." message aus. Als nächstes stellst du eine Variable ein, die mit einem Random per Computer bestimmt, welche Art von Karte gegeben wird. Danach fragt eine Fork Condition die größe der neuen Variable ab, aber ein Else Case lassen!! (sehr wichtig! Ausser wenn es den Wert 4 abfragt!). Und pro größe der Variable nutzt du entweder Kreuz, Herz, Pik oder Karo! Fertig.
Im Maker
Zitat
<>Message: Ich wünsche mir...
<>Change Variable:Var[xxxx: Karte - Art]=Random (1 to 4)
<>If Var(xxxx: Karte - Art) 1:
<>Message:...Pik!
<>
:Else Case
<>If Var(xxxx: Karte - Art) 2
<>Message:...Karo!
<>
:Else Case
<>If Var(xxxx: Karte - Art) 3:
<>Message:...Herz!
<>
:Else Case
<>If Var(xxxx: Karte - Art) 4:
<>Message: ...Kreuz!
Ja, schon, das hab ich mir ja auch alles so gedacht, aber wie kann ich dem Kartenstapel sagen, dass diese Karte bereits weg ist? Ich meine, man zieht ja auch eine Karte vom Stapel, die ja dann weg ist und auf der Hand ist!
...
Eine Karte ist weg, d.h. in der Hand eines Spielers oder auf dem Ablagestapel, wenn der Wert ihrer Variable >0 ist.
Zitat
Und wenn der Ziehstapel einmal leer ist, dann ist es auch schwer, die Karten vom Ablegestapel wieder in den Ziehstapel zu hauen, bis auf eben die letzte. Und das sollten wirklich die sein, die... Nein! HALT! ICH HABS! ICH GLAUBE, ICH KANN ALLES!!!
...
Einfach alle Variablen die größer als [Spieleranzahl+1] sind auf 0 setzen bis auf die größte (die ja die oberste ist und deshalb liegen bleiben muss...)
Zitat
Naja, fast... Das mit den Handkarten wird noch ein bisschen schwer... Obwohl, muss ich ja eigentlich auch nur so machen, wie den Ablegestapel und den Kartenziehstapel!
...
Handkarten sind die Variablen die den Wert 1 bis Spielerzahl haben. Der Wert gibt den Spieler an dem sie gehören... wenn wir mal annehmen dass der menschliche Spieler der Spieler1 ist, dann müsstest du alle Variablen die den Wert 1 haben auf dem Bildschirm zeigen.
(das können bis zu [52-Spieleranzahl] sein also ordne sie Platzsparend an )
Zitat
Und was sollte sich der Gegner dann eigentlich wünschen?
...
Ich würde da keineswegs den reinen Zufall entscheiden lassen sondern die Farbe wünschen die man am häufigsten auf der Hand hat. (die übliche Methode, also: alle karten durchgehen und für jede Farbe einen entsprechenen score+=1... wenn du dann die vier werte vergleichst weißt du welche farbe am meisten auf der Hand ist und zwischen welchen -falls man mehrere Farben gleich oft hat- eine Zufallsvariable entscheiden muss)
Wann ein Gegner einen umgedrehten Buben sehen will würde ich abhängig vom Zufall machen wobei ich die Wahrscheinlichkeit ziemlich klein halten würde.
Außerdem sollte sie abhängig von der Spieleranzahl sein (denn je mehr spieler desto wahrscheinlicher dreht ein anderer die Karte um...)
Zitat
Du scheinst dich ja mal besonders gut mit dem Maker auszukennen. Ich werde wahrscheinlich das Spiel bald mal beginnen. Und wenn ich dann mal nicht weiter komme, könnte ich es evtl. zu dir schicken, damit du mir weiterhilfst? Das wäre cool... Danke jetzt schonmal!
...
Hab auch noch nie ein Kartenspiel gemacht aber ich helfe wo ich kann ^^
(Bei Bedarf kannst du mcih via icq kontaktieren: 241740406
Ohh, mann, das wird zu schwer. Alleine, bis ich die Karten mal gefunden hab! (Alleine will ich die nicht zeichnen, da sie sonst besch***** aussehen!) Ich glaube, das Projekt geb ich jetzt schon auf.
PS: Die anderen Karten muss man ja auch umgedreht legen können.
Da kommen jetzt einfach zu viele Faktoren auf einmal zusammen. Und da ich mir kaum bei etwas Zeit lasse (genauso mit dem Buch, muss immer nach ca. 20 Min. aufhören zu schreiben, bevor ich Müll schreibe), wird das Spiel sowieso nichts!
Oder mag mir nicht jemand helfen...
Das Zauberwort heißt Platzhalter: Nimm einfach schlecht gezeichnete Karten die lediglich die jeweilige Zahl oder den Buchstaben enthalten.... um die Optik der Karten kann man sich hinterher immer noch kümmern.
Da würde ich dir dann auch helfen... (womit ich allerdings verständlicherweise erst warten will ob du überhaupt mit dem Spiel fertig wirst)
Ich glaube, das mit dem Spiel wird nichts mehr, da ich ja bei jeder Karte eintippen muss, dass man sie verdeckt Spielen kann. Das mit dem Einwerfen... Die ganzen Sachen! Alles! Das ist mir zu viel! Kann ich noch nicht, vorallem nicht mit dem MakerXP, den ich eigentlich auch benutzen wollte, da er bessere Grafik hat!
Das hat dir Cloud der Ex-Soldat schon im zweiten Post dieses Threats geraten:
Zitat
An deiner Stelle würde ich mich noch nicht an sowas rantrauen,
warte lieber noch eine Zeit ab...ist wirklich besser.
Mach erstmal normale Spiele damit du mit dem RPGMaker Ehrfahrung
sammelst. Ist ohnehin schwierig umzusetzen, und für einen Newbie
äußerst schwierig...
...
Naja, falls du dich mal wieder an so ein Projekt ranwagen solltest wär ich froh davon zu hören ^^
Soa zur KI: Ich rate dir, dich mit deinen Kumpels zusammenzuhocken und zu spielen und dabei aufzuschreiben, wie eure Taktik aussieht. Wann blufft ihr, wann wünscht ihr euch Farben, die ihr so überhaupt nicht auf der Hand habt etc
Mit der Kartenverteilung, die elegente Lösung wären Zeiger, über die der Maker ja zum Glück verfügt.
Du brauchst für meine Vorgehensweise 52 Variablen. Jede Variable steht für eine Karte und ihr Inhalt ist ein Zeiger auf die nächste Karte des Stapels oder der jweiligen Hand, weiterhin brauchst du nochmal soviel Variablen, wie es Spieler gibt + 1 die dann auf die erste Karte der jeweiligen Hand bzw des Stapels zeigt.
So, was ist denn ein Zeiger? Ein Zeiger speichert die Nummer einer anderen Variable. So simpel ist das. Da du direkt nach Variable No. fragen kannst, d.h. nach der Variable mit der Nummer, die in der angegebenen Variable gespeichert ist, ist das auch kein Problem.
Für das Mischen des Stapels, joa, erste Methode, nimm 52 Variablen dazu, die du wie Switche behandelst, die besagen, ob die jeweilige Karte schon vergeben wurde, mach dann für jeden Spieler nen Durchlauf, der ihm 7 Karten zuweist:
(Anmerkung: Ich gehe davon aus, dass die Merkvariablen jene von 101 bis 152 sind, die Variablen für die einzelnen Karten die von 1 bis 52)
(du musst anschließend in die Variable, die auf die erste Karte der Hand des jeweiligen Spielers zeigen soll, den Wert, der Tail jetzt hat, schreiben)
Wenn du nicht genau verstehst, was ich mit Zeiger meine, kann ichs dir nochmal ausführlich erklären. Auf jeden Fall isses so ne Methode, die man auch als Programmierer benutzen würde evtl
--
class Dog { //(...)
boolean getBuddha() { throw NullPointerException; } }
Spielt Hero-Chan!