PacMan , Ghost Pathfinfing
Übersicht

![]() |
ozzi789Betreff: PacMan , Ghost Pathfinfing |
![]() Antworten mit Zitat ![]() |
---|---|---|
Hii
Wie man durch den Titel erraten kann , hab ich ein Problem mit der "KI" der Geister. Ich hab schon einige Tuts über A* gelesen doch ich krieg das nicht hin ![]() Kann mir jemand das erklären ? (das pacman beruht auf Pixel to tile auf einer 20*20 map) thx ![]() |
||
0x2B || ! 0x2B
C# | C++13 | Java 7 | PHP 5 |
![]() |
DerHase |
![]() Antworten mit Zitat ![]() |
---|---|---|
Bei PacMan Geistern würde ich die Geister einfach in eine Richtung schicken, bei der Kollision mit der Wand würde ich zu 70% Wahrscheinlichkeit den Geist abbiegen lassen und mit 30% Wahrscheinlichkeit umdrehen lassen. Da kann man aber auch sicher noch Feintuning betreiben ![]() |
||
Play Satyr! |
![]() |
ozzi789 |
![]() Antworten mit Zitat ![]() |
---|---|---|
Also mit Rnd (1,4) ne zufalls zahl "berechnen"
Wenn s 1 ist soll er Links bis er Kolidiert , und dann ? Das gleiche mit 2-rechts,3-unten,4-oben ![]() Umdrehen tut sich der Geist so viel ich weis (faaast) nie ![]() |
||
0x2B || ! 0x2B
C# | C++13 | Java 7 | PHP 5 |
Tritium |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Ich würde dann aber Rand() nehmen, da Rnd() Floats zurückgibt. | ||
![]() |
ozzi789 |
![]() Antworten mit Zitat ![]() |
---|---|---|
naja ich werds mal probiern , wens nid geht , post ich halt nochmal ![]() |
||
0x2B || ! 0x2B
C# | C++13 | Java 7 | PHP 5 |
![]() |
ozzi789 |
![]() Antworten mit Zitat ![]() |
---|---|---|
ozzi789 hat Folgendes geschrieben: naja ich werds mal probiern , wens nid geht , post ich halt nochmal
![]() Ahh ich krieg das nicht hin, hab geschaft das der rumläuft und kolidiert , jedoch ändert er nur den pfad wen er irgendwo ankomt , d.h er läuft nur aussen rum ![]() Und meist geht er den selben weg zurück. Kan mir da jemand helfen ? danke 1000 mal ![]() |
||
0x2B || ! 0x2B
C# | C++13 | Java 7 | PHP 5 |
![]() |
TimBo |
![]() Antworten mit Zitat ![]() |
---|---|---|
Hi,
ich weiß nicht wie die beim "original Pacman" rumlaufen. Aber ich würde das so machen, dass wenn die Ki gegen eine Wand läuft, mit 33% nach links mit 33% nach rechts und mit 33% umdreht. Wenn die Ki an einer Kreuzung ist, muss sie wissen in welche richtung sie laufen kann und dann perzufall bestimmen wo es hingeht. Aber komplizierter wird es, wenn die Ki dir den weg abschneiden soll etc. da müsstest du es mit pathfinding machen. Das is ne Nummer schwerer als der Zufall. Viele Grüße TimBo |
||
mfg Tim Borowski // CPU: Ryzen 2700x GPU: Nvidia RTX 2070 OC (Gigabyte) Ram: 16GB DDR4 @ 3000MHz OS: Windows 10
Stolzer Gewinner des BCC 25 & BCC 31 hat einen ersten Preis in der 1. Runde beim BWInf 2010/2011 & 2011/12 mit BlitzBasic erreicht. |
![]() |
ozzi789 |
![]() Antworten mit Zitat ![]() |
---|---|---|
TimBo hat Folgendes geschrieben: Hi,
ich weiß nicht wie die beim "original Pacman" rumlaufen. Aber ich würde das so machen, dass wenn die Ki gegen eine Wand läuft, mit 33% nach links mit 33% nach rechts und mit 33% umdreht. Wenn die Ki an einer Kreuzung ist, muss sie wissen in welche richtung sie laufen kann und dann perzufall bestimmen wo es hingeht. Aber komplizierter wird es, wenn die Ki dir den weg abschneiden soll etc. da müsstest du es mit pathfinding machen. Das is ne Nummer schwerer als der Zufall. Viele Grüße TimBo Wie find ich raus ob er/sie an ner Kreuzung ist ? Wens oben unten links und rechts frei is , denk ich mal , dan muss man das irgendwo in die Bewegungs rountine binden .. hmm |
||
0x2B || ! 0x2B
C# | C++13 | Java 7 | PHP 5 |
![]() |
coolo |
![]() Antworten mit Zitat ![]() |
---|---|---|
Man überprüft einfach welche Felder um ihn herum frei sind und wenn es mehr als 1 freies Feld gibt, ist er an einer Kreuzung. | ||
http://programming-with-design.at/ <-- Der Preis ist heiß!
That's no bug, that's my project! "Eigenzitate sind nur was für Deppen" -Eigenzitat |
![]() |
ozzi789 |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ich werd das mal ausprobieren , muss einfach schauen das das nicht zu langsam wird bei 4 Geistern ![]() |
||
0x2B || ! 0x2B
C# | C++13 | Java 7 | PHP 5 |
![]() |
TimBo |
![]() Antworten mit Zitat ![]() |
---|---|---|
Nein eh nicht bei 4 Gegnern ? ![]() Du solltest die Tiles in einem Arry speichern. Dann kannst schnell nachschauen welches Tile um dir rum frei ist. zb. Dim map(9,9) eine 9 x 9 Map wird angelegt wenn der Geitst sich an pos. 4,3 befindet, kanns du die Felder um ihm herum sau schnell ermitteln. links = map(3,3) rechts = map(5,3) ueber = map(4,2) unter = map(4,4) ^^ Viele Grüße TimBo |
||
mfg Tim Borowski // CPU: Ryzen 2700x GPU: Nvidia RTX 2070 OC (Gigabyte) Ram: 16GB DDR4 @ 3000MHz OS: Windows 10
Stolzer Gewinner des BCC 25 & BCC 31 hat einen ersten Preis in der 1. Runde beim BWInf 2010/2011 & 2011/12 mit BlitzBasic erreicht. |
![]() |
ozzi789 |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ich hab die in nem Dim ![]() Ist erstaunlich schwer ne halbwegs gute KI zu erstellen ![]() |
||
0x2B || ! 0x2B
C# | C++13 | Java 7 | PHP 5 |
![]() |
BladeRunnerModerator |
![]() Antworten mit Zitat ![]() |
---|---|---|
Das Ur-Pacman ging da sehr simpel vor: es merkt sich aus welcher Richtung der Geist kommt - die ist tabu. Die anderen drei Richtungen werden geprüft ob sie Mauer oder Weg enthalten. Ein Weg -> klar, den muss der Geist gehen. Mehr als ein Weg: Der Geist prüft die Distanz vom potentiellen Zielfeld zum Spieler (simpler Pythagoras). In 50-70% der Fälle biegt der Geist in die Richtung ab die am nächsten beim Spieler liegt, in den anderen Fällen wird aus den verbliebenen Möglichkeiten zufällig eine ausgewählt, mit gleichen Chancen für alle.
Der Schwierigkeitsgrad des Spieles wird MASSIV durch den Prozentsatz bestimmt in den der Geist sich für den kürzesten Weg entscheidet. Bei 100% ist der Spieler nahezu chancenlos. Das Urpacman macht auch nichts weiter als diesen Prozentsatz langsam aber sicher anzuheben, die Spielgeschwindigkeit bleibt im wesentlichen immer gleich. |
||
Zu Diensten, Bürger.
Intel T2300, 2.5GB DDR 533, Mobility Radeon X1600 Win XP Home SP3 Intel T8400, 4GB DDR3, Nvidia GF9700M GTS Win 7/64 B3D BMax MaxGUI Stolzer Gewinner des BAC#48, #52 & #92 |
![]() |
ozzi789 |
![]() Antworten mit Zitat ![]() |
---|---|---|
@ Dremora
Thx das hat geholfen ![]() So weit ich weis is der Rote Aggressiv , der eine versucht abschneiden , die andern 2 zufall. Naja wen ich einen Aggressiven mach und 3 zufällige is das au gut ![]() |
||
0x2B || ! 0x2B
C# | C++13 | Java 7 | PHP 5 |
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group