AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

KI für Spiel

Ein Thema von Yheeky · begonnen am 25. Jan 2003 · letzter Beitrag vom 25. Jan 2003
Antwort Antwort
Yheeky

Registriert seit: 7. Jun 2002
1.339 Beiträge
 
#1

KI für Spiel

  Alt 25. Jan 2003, 13:02
Hi,

ich programmiere gerade ein Logikspiel. Das Design und sowas in der Art habe ich schon größtenteils fertiggestellt und bin jetzt seit gestern an der KI. Soweit klappt auch alles, nur habe ich da mal eine Frage:
Bei meinem Spiel werden Karten auf den Tisch gelegt. Jeder Spieler hat 5 Karten und - ich habe es ausgerechnet - es gibt 3^5 Möglichkeiten für den Computer, wie er die Karten legen kann bzw. soll. Nun die Frage: Muss ich diese 243 Möglichkeiten alle mit einer if-Abfrage abfragen oder wie kann ich das vielleicht besser machen. Ich weiss ja nicht, ob´s da noch ne andere Möglichkeit gibt, deswegen frage ich ja, aber so wie ich das überblicken kann, wird der KI-Code dann sehr sehr lang (was ich mir auch durchaus vorstellen kann, dass das normal ist). Einfach nur eine Frage aus Interesse...Hier kann mir bestimmt jemand was dazu sagen, oder?

Gruß Yheeky
  Mit Zitat antworten Zitat
chrys

Registriert seit: 21. Jan 2003
Ort: Italien
34 Beiträge
 
Delphi 6 Personal
 
#2
  Alt 25. Jan 2003, 13:16
such mal im internet was ueber A* algorithmen oder auch ASTAR geschrieben.
Ansonsten kann ich dir nur empfehlen ueberhaupt mal was ueber KI oder wenn du englisch kannst halt AI zu suchen.
Es gibt auf jeden fall schon algorithmen die dein relativ einfaches problem loesen sollten.

ansonsten kannst auch noch mal heir vorbei gucken ist aber reht fortgeschrittenes AI.

http://www.gameai.com/ai.html

oder hier

http://www.gameai.com/software.html

hoffe du findest was.
kannst dich ja melden fuer fragen

PS: wenn das spiel fertig ist laesst du es mich wissen.
  Mit Zitat antworten Zitat
Benutzerbild von phlux
phlux

Registriert seit: 4. Nov 2002
Ort: Witten
1.335 Beiträge
 
Delphi 6 Personal
 
#3
  Alt 25. Jan 2003, 14:15
Ich glaub nicht das der A* algo da was nützt, der dient doch nur zur Wegfindung, wenn ich mich nicht irre.
Christian "phlux" Arndt
  Mit Zitat antworten Zitat
Yheeky

Registriert seit: 7. Jun 2002
1.339 Beiträge
 
#4
  Alt 25. Jan 2003, 14:17
K, danke für die Infos Chrys. Werde mich mal umsehen. Die englische Sprache sollte kein Problem darstellen 8)

Hier mal einen Auszug aus der Logik von dem Spiel. Vielleicht habt ihr ja auf Anhieb eine Idee, wie man das "besser" machen könnte:

Hier also die Tabelle mit den 3^3 Möglichkeiten. 14 Möglichkeiten fallen weg, weil sie doppelt vorkommen. Diese 13 bleiben übrig:

Code:
1.   000   a=b; a=c; b=c   1
2.   001   a=b; a<c; b<c   1
3.   010   a<b; a=c; b>c   1
4.   011   a<b; a<c; b=c   1
5.   012   a<b; a<c; b<c   1
6.   021   a<b; a<c; b>c   1
7.   100   a>b; a>c; b=c   2
8.   101   a>b; a=c; b<c   2
9.   102   a>b; a<c: b<c   2
10.   201   a>b; a>c; b<c   2
11.   110   a=b; a>c; b>c   3
12.   120   a<b; a>c; b>c   3
13.   210   a>b; a>c; b>c   3
Die 3 Zahlenkombinationen sind die Möglichkeiten. Danach kommt die Abfrage, die ich brauche, um sie in Delphi reinzubekommen und die letzte Zahl sagt mir, die wievielte Stelle ich auslesen muss.
So habe ich es in Delphi umgesetzt:

Code:
if ((StrToInt(KartenZurAuswahlSpieler2.Strings[0]) = StrToInt(KartenZurAuswahlSpieler2.Strings[1])) and
    (StrToInt(KartenZurAuswahlSpieler2.Strings[0]) = StrToInt(KartenZurAuswahlSpieler2.Strings[2])) and
    (StrToInt(KartenZurAuswahlSpieler2.Strings[1]) = StrToInt(KartenZurAuswahlSpieler2.Strings[2]))) or

   ((StrToInt(KartenZurAuswahlSpieler2.Strings[0]) = StrToInt(KartenZurAuswahlSpieler2.Strings[1])) and
    (StrToInt(KartenZurAuswahlSpieler2.Strings[0]) < StrToInt(KartenZurAuswahlSpieler2.Strings[2])) and
    (StrToInt(KartenZurAuswahlSpieler2.Strings[1]) < StrToInt(KartenZurAuswahlSpieler2.Strings[2]))) or

   ((StrToInt(KartenZurAuswahlSpieler2.Strings[0]) < StrToInt(KartenZurAuswahlSpieler2.Strings[1])) and
    (StrToInt(KartenZurAuswahlSpieler2.Strings[0]) = StrToInt(KartenZurAuswahlSpieler2.Strings[2])) and
    (StrToInt(KartenZurAuswahlSpieler2.Strings[1]) > StrToInt(KartenZurAuswahlSpieler2.Strings[2]))) or

   ((StrToInt(KartenZurAuswahlSpieler2.Strings[0]) < StrToInt(KartenZurAuswahlSpieler2.Strings[1])) and
    (StrToInt(KartenZurAuswahlSpieler2.Strings[0]) < StrToInt(KartenZurAuswahlSpieler2.Strings[2])) and
    (StrToInt(KartenZurAuswahlSpieler2.Strings[1]) = StrToInt(KartenZurAuswahlSpieler2.Strings[2]))) or

   ((StrToInt(KartenZurAuswahlSpieler2.Strings[0]) < StrToInt(KartenZurAuswahlSpieler2.Strings[1])) and
    (StrToInt(KartenZurAuswahlSpieler2.Strings[0]) < StrToInt(KartenZurAuswahlSpieler2.Strings[2])) and
    (StrToInt(KartenZurAuswahlSpieler2.Strings[1]) < StrToInt(KartenZurAuswahlSpieler2.Strings[2]))) or

   ((StrToInt(KartenZurAuswahlSpieler2.Strings[0]) < StrToInt(KartenZurAuswahlSpieler2.Strings[1])) and
    (StrToInt(KartenZurAuswahlSpieler2.Strings[0]) < StrToInt(KartenZurAuswahlSpieler2.Strings[2])) and
    (StrToInt(KartenZurAuswahlSpieler2.Strings[1]) > StrToInt(KartenZurAuswahlSpieler2.Strings[2]))) then
Vielleicht fällt euch ja was auf. Wenn ihr sonst Vorschläge oder etwas auszusetzen habt , schreibt einfach...

Gruß Yheeky
  Mit Zitat antworten Zitat
Benutzerbild von nailor
nailor

Registriert seit: 12. Dez 2002
Ort: Karlsruhe
1.989 Beiträge
 
#5
  Alt 25. Jan 2003, 15:35
Mach drei lokale Variablen, in die du die Kartenwerte vorher einspeicherst, und dann mach die Abfragen!
Michael N.
http://nailor.devzero.de/code/sharpmath/testing/ --- Tests, Feedback, Anregungen, ... aller Art sehr willkommen!
::: don't try so hard - it'll happen for a reason :::
  Mit Zitat antworten Zitat
Yheeky

Registriert seit: 7. Jun 2002
1.339 Beiträge
 
#6
  Alt 25. Jan 2003, 16:42
Warum? Wo liegt da der Unterschied?
  Mit Zitat antworten Zitat
Benutzerbild von Robert
Robert

Registriert seit: 4. Jan 2003
36 Beiträge
 
#7
  Alt 25. Jan 2003, 16:54
Übersicht.

Je übersichtlicher, desto einfacher zu lesen. Außerdem stimme ich zu - die StrToInt-s kosten mit jedem Vergleich kostbare Rechenzeit - vorher in ein paar kurzzeichen-Variablen (a,b,c) einlesen und DANN vergleichen...
Wer hat gesagt, dass Borland NUR ein Begriff für ein Ölfeld sei!?

Ban Visual BASIC 4ever
  Mit Zitat antworten Zitat
Yheeky

Registriert seit: 7. Jun 2002
1.339 Beiträge
 
#8
  Alt 25. Jan 2003, 17:00
Okay, wenn ihr meint - habe ja gesagt, dass ich für jeden Hinweis dankbar bin . Werde das dann gleich mal einbauen, bin ja noch am Anfang...Hat sonst noch jemand Vorschläge, wie man das besser lösen könnte?

Gruß Yheeky
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

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

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:56 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz