Autor Beitrag
Prophet-
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 29

Win 7
Delphi 7
BeitragVerfasst: Di 02.06.09 19:44 
Hi Community,
mein Pacman Projekt ist schon bald fertig, das einzige was mir noch fehlt ist die KI. Könnt ihr mir Tipps geben wie man eine KI am besten programmiert, was man beachten muss und wie man es auf keinen Fall tun sollte. Hab mir überlegt, dass der Geist so lange in eine Richtung geht, bis er nicht mehr weiter kann und dann seine Richtung ändert. Da ich noch Anfänger bin, bitte die leichten Vorschläge zuerst, wenn ich die hinbekomme, dann versuch ich die schweren. Wäre euch dankbar für viele Vorschläge.

LG LB

€dit: Hier mal mein Projekt wie es bisher aussieht:
€dit2: Bisher hab ich mit der SuFu wenig hilfreiches gefunden.
Einloggen, um Attachments anzusehen!
Dude566
ontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic starofftopic star
Beiträge: 1592
Erhaltene Danke: 79

W8, W7 (Chrome, FF, IE)
Delphi XE2 Pro, Eclipse Juno, VS2012
BeitragVerfasst: Di 02.06.09 21:51 
Ich habe mir dein Projekt noch nicht angeschaut aber wenn du sagst dein Projekt wäre so gut wie fertig, wie kann es dann sein das keinerlei KI vorhanden ist?
Also ich meine so ein Programm funktioniert ja zum Beispiel nur durch Kollisionsabfragen.

Wenn du eine konkrete Frage hast kann ich dir vielleicht helfen. ;)

_________________
Es gibt 10 Gruppen von Menschen: diejenigen, die das Binärsystem verstehen, und die anderen.
Waldkauz
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 102



BeitragVerfasst: Di 02.06.09 22:10 
weiß nicht, aber ich würds einfach so probieren:
leg dir zunächst eine globale Variable
ausblenden Delphi-Quelltext
1:
bewegung:integer=1;					

an.


ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
Geist.Left:=Geist.Left+bewegung;
if Geist.Left >= (Spielfeld.Width-Pacman.Width) then
bewegung:=bewegung*(-1);
if Geist.Left = Spielfeld1.Left then
bewegung:=bewegung*(-1); //weil sie ja wieder positiv werden muss


so müsste es meiner Meinung nach am einfachsten sein, vorausgesetzt dein Geist ist ein Shape oder TImage
Prophet- Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 29

Win 7
Delphi 7
BeitragVerfasst: Mi 03.06.09 17:17 
@ Dude566
Ich hab geschrieben, dass es bald fertig ist, nicht fast! Das ist ein Unterschied. Meine Frage sollte allgemein formuliert sein, da ich ein paar Tipps haben will bevor ich die KI programmiere.

@Waldkauz
Ich hab nicht umsonst mein Projekt hochgeladen. Mein Pacman wird zuerst in einem zweidimensionalen Array bewegt und danach wird erst gezeichnet. Deshalb ist dein Quellcode hier fehl am Platz, außerdem bewegen kann ich den Pacman bzw Geist auch manuell nur das will ich ja durch die KI lösen.
arj
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 378

Win XP/Vista, Debian, (K)Ubuntu
Delphi 5 Prof, Delphi 7 Prof, C# (#Develop, VS 2005), Java (Eclipse), C++, QT, PHP, Python
BeitragVerfasst: Mi 03.06.09 18:31 
user profile iconProphet- hat folgendes geschrieben Zum zitierten Posting springen:
Deshalb ist dein Quellcode hier fehl am Platz

Das war aber nicth sehr freundlich, immerhin hat er versucht Dir zu helfen ...

Da die Geister ja immer in Richtung Spieler laufen sollen, würde ich versuchen
genau diese Bewegung auszuführen - außer es ist eine Wand da.
Wenn Du einen zweidimensionalen diskreten Vektor erstellst, der von der Position des Geistes ausgeht
und zu der Spielerposition zeigt, gibt es 3 Fälle (und die Symmetrischen):
  1. (0,1) Versuchen einen Schritt nach rechts zu gehen mit dem Geist. Sollte eine Wand da sein,
    dann einfach beliebig nach oben, unten, oder links gehen (je nach Möglichkeit)
  2. (1,1) Versuchen nach oben/rechts zu laufen, falls Wand, entsprechend nach rechts/oben. Oder andere Richtung (je nach Möglichkeit)
  3. (1,0) Versuchen, nach oben zu laufen. Wiederrum, falls Wand entsprechend nach links/rechts.


Wichtig ist, dass die Geister nicht "zappeln", d.h. in einem Zeitschritt nach links und im anderen
nach rechts laufen (außer du läufst mit dem Spieler laufend von links nach rechts ;-) )

Viel Erfolg!
Prophet- Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 29

Win 7
Delphi 7
BeitragVerfasst: Mi 03.06.09 19:47 
user profile iconarj hat folgendes geschrieben Zum zitierten Posting springen:
user profile iconProphet- hat folgendes geschrieben Zum zitierten Posting springen:
Deshalb ist dein Quellcode hier fehl am Platz

Das war aber nicth sehr freundlich, immerhin hat er versucht Dir zu helfen ...


Sorry wenn ich ein bisschen schroff vorkomme, war nich so gemeint.
@ arj ich werds versuchen, danke

Gibt es noch weitere Vorschläge?
alzaimar
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 2889
Erhaltene Danke: 13

W2000, XP
D6E, BDS2006A, DevExpress
BeitragVerfasst: Mi 03.06.09 21:15 
Die Geister wollen ja den Spieler 'fressen' (oder berühren, scheint ja auszureichen und ist auch politisch korrekt). Also werden Sie sich auf den Spieler zu bewegen: Von den 4 Bewegungsmöglichkeiten werden die gestrichen, die aufgrund einer Wand nicht möglich sind. Dann wird die Bewegung genommen, die die Entfernung zum Spieler *verkürzt*. Wenn der Spieler im Supermodus ist (bzw., um wieder politisch korrekt zu sein, mit den Geistern Tee trinken will) rennen diese ja vor ihm weg. Dann wird der Schritt genommen, der die Entfernung zum Spieler *verlängert*.

Sollte kein Problem sein.

_________________
Na denn, dann. Bis dann, denn.
Dude566
ontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic starofftopic star
Beiträge: 1592
Erhaltene Danke: 79

W8, W7 (Chrome, FF, IE)
Delphi XE2 Pro, Eclipse Juno, VS2012
BeitragVerfasst: Mi 03.06.09 21:31 
user profile iconProphet- hat folgendes geschrieben Zum zitierten Posting springen:
@ Dude566
Ich hab geschrieben, dass es bald fertig ist, nicht fast! Das ist ein Unterschied. Meine Frage sollte allgemein formuliert sein, da ich ein paar Tipps haben will bevor ich die KI programmiere.


Ich wollte dich damit nicht angreifen, klang nur für mich so als ob du nur eine Oberfläche hättest und jetzt nach dem Code dazu suchst. ;)

_________________
Es gibt 10 Gruppen von Menschen: diejenigen, die das Binärsystem verstehen, und die anderen.
Prophet- Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 29

Win 7
Delphi 7
BeitragVerfasst: Do 04.06.09 15:50 
Deshalb hab ich ja mein Projekt hochgeladen.