Zurück   Flashforum > Flash > ActionScript > Spielkonzepte und Spieleprogrammierung

Antwort
 
LinkBack Themen-Optionen Ansicht
Alt 23-10-2006, 11:57   #1 (permalink)
Neuer User
 
Registriert seit: Oct 2006
Beiträge: 13
Frage zu KartenSpiel mit ComputerGegnern

Hallo,
ich versuche ein KartenSpiel im Flash Mx zu programmieren, bei dem man drei Karten hat und jeweils eine davon mit drei offen liegenden Karten austauschen kann. Ziel ist es drei Karten von der gleichen Farbe(drei Herz), oder drei Karten mit dem gleiche Kartenwert (drei Könige) zu erhalten.

Das Problem ist die KI...
Kann mir jemand einen Tip geben wie man sinnvoll an diese Problematik herangehen kann...

Der Computer muss seine drei Karten vergleichen und
die drei offen liegenden Karten kontrollieren

1) ob in seinen Karten gleiche Kartenfarben, oder Kartenwerte vorhanden sind

2) welche Karten höher sind

3) welche Karte er mit welcher offenligenden austauschen soll

Hat jemand ne Ideee....
XChrisX ist offline   Mit Zitat antworten
Alt 23-10-2006, 18:59   #2 (permalink)
muh
 
Benutzerbild von Janoscharlipp
 
Registriert seit: Apr 2002
Ort: Freiburg / Stuttgart
Beiträge: 4.338
Willkommen im Forum!

Ich würde da so ran gehen:

Erstmal muss es dir möglich sein, die Karten nach Arten (gleiche Farbe, gleiche Zahl/Figur) zu gruppieren.
Dafür würde ich eine Gruppen-Klasse erstellen, die einen Typ (Farbe oder Zahl), eine ID (Herz oder Dame) und einen Wert (10 besser als 7, Kreuz besser als Karo, Typ Zahl immer mehr wert als Typ Farbe).

Jetzt gehst du einfach deine Karten durch, für jede Karte prüfst du für jede Eigenschaft (Farbe, Wert) ob es eine passende Gruppe gibt. Wenn es eine gibt, merkst du dir in einem Array zu dieser Gruppe die Karte, wenn es keine Gruppe gibt, erstellst du jeweils eine neue (für Farbe und Wert) und speicherst die Karte rein.

Wenn du alle Karten auf der Hand durch bist, kannst du die Gruppen nach Wert und Anzahl der zugehörigen Karten sortieren.

Jetzt gehst du alle offenen Karten durch, und machst das gleiche, dann prüfst du von oben nach unten, ob es für deine Gruppen passende offene Karten gibt.
Wenn es keine gibt setzt du aus, oder bemühst den Zufall.
__________________
»Carpe diem«, sagte der Graf. (Terry Pratchett: Ruhig Blut!)
Janoscharlipp ist offline   Mit Zitat antworten
Alt 24-10-2006, 12:03   #3 (permalink)
Neuer User
 
Registriert seit: Oct 2006
Beiträge: 13
Danke für den Tipp – aber leider bin ich bezüglich Klassen (und so) nicht so gut bewandert...

Kennt wer gute Tutorials (Klassen...) die mir bei meinem Problem mit dem Kartenspiel (mit Computergner) weiterhelfen können...
XChrisX ist offline   Mit Zitat antworten
Alt 24-10-2006, 12:46   #4 (permalink)
muh
 
Benutzerbild von Janoscharlipp
 
Registriert seit: Apr 2002
Ort: Freiburg / Stuttgart
Beiträge: 4.338
Du kannst das ganze auch ohne Klassen machen ... am besten du fängst einfach an, mit den Mitteln, die du beherrschst.
__________________
»Carpe diem«, sagte der Graf. (Terry Pratchett: Ruhig Blut!)
Janoscharlipp ist offline   Mit Zitat antworten
Alt 27-10-2006, 21:53   #5 (permalink)
Nagelneuer User
 
Benutzerbild von hazy fantazy
 
Registriert seit: Dec 2005
Beiträge: 924
Du musst für die verschiedenen Zugmöglichkeiten, die der Computer hat, ein Bewertungssystem finden. Den Zug mit dem höchsten Wert führst du aus.
Wenn du 3 Karten auf der Hand hast und drei Karten zum Austauschen auf dem Tisch liegen, gibt es 9 Möglichkeiten. Führ einfach jede Möglichkeit gedanklich aus und gib dem Blatt auf der Hand dann einen Wert. Der Zug, der zum Blatt mit dem höchsten Wert geführt hat, wird ausgeführt. Wenn es mehrere gleich bewertete Züge gibt, wählst du einen per Zufall aus. Wenn die KI weniger stark spielen soll, machst du einfach zwischendurch weniger hoch bewertete Züge.

mfg. h
__________________
The fact that you've got "Replica" written on the side of your gun and the fact that I've got "Desert Eagle written on the side of mine ... :D

Geändert von hazy fantazy (27-10-2006 um 21:56 Uhr)
hazy fantazy ist offline   Mit Zitat antworten
Alt 31-10-2006, 06:47   #6 (permalink)
Neuer User
 
Registriert seit: Oct 2006
Beiträge: 13
Hab mir schon nen Weg überlegt wie ich das ganze scripte:

Zuerst kontrolliert der Computer ob er gleiche Karten (Farbe oder Wert) in seiner Hand hat:

1) bei keinen gleichen Karten vergleicht er jede seiner Karten mit den offen auf dem Tisch liegenden – bei gleichen Farben addiert er die Kartenwerte und speichert diese Summe gemeinsam mit der Kartenbezeichnung (also Karte: 1,2,3...) in ein Array. Die 9 Array´s (3eigene x 3offene Karten) werden dann wieder in ein Array abgelegt und dann mit der "Function sort" nach den Kartensummen sortiert. An der Position "8" des Arrays hat man dann die eigene Karte sowie die offen liegende Karte die zusammen den höchsten Wert ergeben.

2) bei zwei gleichen Farben oder Kartenwerten auf der Hand brauche ich nur eine Karten mit der gleichen Farbe oder Kartenwert in den offenen Karten suchen...

3) bei drei gleichen Farben auf der Hand suche ich einfach die höchste (gleiche Farbe) in den offenliegenden Karten

müsste sich eigentlich realisieren lassen...
XChrisX ist offline   Mit Zitat antworten
Alt 02-11-2006, 08:06   #7 (permalink)
new user
 
Benutzerbild von PinkDragon
 
Registriert seit: Oct 2005
Beiträge: 140
Ja müsste gehen. (einfach ein paar if...)
Aber wenn du trotzdem Probleme haben solltest, such mal nach "Rekursion". Damit werden z.B. Schach-KIs oder auch Kartenspiel-KIs gelöst.
Es ist genau das, was "hazy fantazy" beschrieben hat
PinkDragon ist offline   Mit Zitat antworten
Alt 03-11-2006, 17:46   #8 (permalink)
Neuer User
 
Registriert seit: Oct 2006
Beiträge: 13
Unhappy

Danke für den Tipp: PinkDragon – Hab mich im Forum mal – bezüglich Rekursion umgesehen...


Entweder kapier ich die Scripts nicht – oder ich weiss nicht wie
mir so ein rekursives Script bezüglich meinem Karten-Spiel helfen kann

Hat jemand vielleicht einen kleinen Ansatz (Script) wie man so was bezüglich meinem Spielvorhaben scriptet, oder in welchen Bereich des Spiels man es sinnvoll einsetzt...
XChrisX ist offline   Mit Zitat antworten
Alt 03-11-2006, 19:45   #9 (permalink)
new user
 
Benutzerbild von PinkDragon
 
Registriert seit: Oct 2005
Beiträge: 140
Es hilft dir eine KI zu programmieren
Eine Rekursion grundsätzlich ist eine Funktion die sich immer wieder selber aufruft. (bis zu einem gewissen Punkt) Und was bringt das? Ich muss zugeben, in deinem Fall nicht viel :P Ausser du willst eine besonders schwere KI, die auch die Karten der anderen kennt und diese miteinbezieht. Das würde in etwa so aussehen (eine indirekte Rekursion):
PHP-Code:
function KIgut(depth){  //für jede Karte aufrufen, gibt einen Number 
  //Mache jeden Zug Zug der mit der Karte möglich ist und bewerte ihn mit
//einer Zahl. (je höher desto besser also 3 Asse sind besser als 3 Verschiedene)
//Diesen wert nenne ich hier: value.
if(depth 0)
  
value += Kiboese(depth-1sonsitge Variablen wie z.B. die neu liegenden Karten
//mit denen weitergerechnet werden muss
Jetzt vergleiche alle value Werte und gib den größten zurückzusätzlich dazu auch
welcher Zug es war. (am einfachsten mit einem Array)
}
function 
KIboese(depth){
Das komplett gleiche wie bei KIgutnur dass hier die Karten des Gegners ausgewerted 
werden und je besser der Zug ist
desto weniger Punkte bringt er (bzw sogar Minuspunkte)
if(
depth 0)
  
value += Kigut(depth-1sonsitge Variablen)

Danach musst du noch Rückgaben vergleichen, die Größte auswehlen und den Zug machen.

Hmmm irgendwie ist das verdammt unverständlich... aber ich habs probiert
Hier ist aber auch noch das Tutorial an das ich mich gehalten habe. (alles bis zum alpha-Beta-Cutoff sollte für dich interessant und anwendbar sein)

mfg
PD
PinkDragon ist offline   Mit Zitat antworten
Alt 03-11-2006, 21:23   #10 (permalink)
muh
 
Benutzerbild von Janoscharlipp
 
Registriert seit: Apr 2002
Ort: Freiburg / Stuttgart
Beiträge: 4.338
Wo genau liegt denn dein Problem?

In meinem ersten Beitrag habe ich doch eine recht präzise Beschreibung von einem Algorithmus gegeben, der immer die beste Karte für einen gewissen Zustand finden dürfte.

Wenn es dir ganz allgemein an Erfahrung mit Programmierung mangelt, solltest du dir vielleicht erstmal einige sehr einfache Sachen vornehmen, um etwas Erfahrung zu sammeln, danach wird dir das ganze wie von allein aus den Fingern fließen.
__________________
»Carpe diem«, sagte der Graf. (Terry Pratchett: Ruhig Blut!)
Janoscharlipp ist offline   Mit Zitat antworten
Antwort

Lesezeichen

Themen-Optionen
Ansicht

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks sind an
Pingbacks sind an
Refbacks sind an



Alle Zeitangaben in WEZ +1. Es ist jetzt 18:16 Uhr.

Domains, Webhosting & Vserver von Host Europe
Unterstützt das Flashforum!
Adobe User Group


Copyright ©1999 – 2012 Marc Thiele