Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Einfachste KI für Gegner (https://www.delphipraxis.net/12525-einfachste-ki-fuer-gegner.html)

Dagon 29. Nov 2003 11:21


Einfachste KI für Gegner
 
Hallo Leute

Ich bin daran, ein kleines Spiel zu proggen (2D). Ich habe da so Gegner, die ich per Zufall in eine Richtung laufen lassen will (links, rechts, oben, unten).
Ich habe mir gedacht, ich könnte dies mit Hilfe von Random lösen. Leider weiss ich nicht genau wie implementieren, damit die Laufrichtung wirklich (oder zumindest ziemlich) zufällig ist.

Kann mir da jemand helfen?

devnull 29. Nov 2003 11:25

Re: Einfachste KI für Gegner
 
Wie lang soll den dein Gegner in eine Richtung laufen ???
Ansonsten fängst du mit einer belieb. Richtung an, und entscheidest dann, wenn er gegen ein Hindernis läuft, eine neue Richtung.

Deine SpielerKoordinaten sind in PIXEL angegeben.

Du könntest dazu Variablen einführen.
X_Abzug und Y_Abzug.

Delphi-Quellcode:
  X_Neu := X_Alt + X_Abzug;
  Y_Neu := Y_Alt + Y_Abzug;
Soll er nun hoch laufen, definierst du:
Y_Abzug := - 10; (Läuft jetzt 10 Pixel nach oben)
X_Abzug := 0; (Bleibt an der gleichen Stelle X)

Dann sieht das so aus (Rechnung):
Delphi-Quellcode:
  X_Neu := X_Alt + 0;
  Y_Neu := Y_Alt - 10;


Hoffe das hilgt

devnull

Dagon 29. Nov 2003 11:29

Re: Einfachste KI für Gegner
 
Zitat:

Zitat von devnull
Wie lang soll den dein Gegner in eine Richtung laufen ???

Das sollte auch per Zufall bestimmt werden.

Mein Problem ist ja, wie kann ich die neue Richtung per Zufall bestimmen?

devnull 29. Nov 2003 11:34

Re: Einfachste KI für Gegner
 
Ich weis ja nich, wie dein Spielfeld aussieht, aber du nimmst einfach Zufallszahlen:
1.) timetomove (für Zeit, die es in eine Richtung läuft)
2.) rnd_richtung := Random (100);
Delphi-Quellcode:
      if (rnd_richtung <= 25) then begin
         X_Abzug := 10; Y_Abzug := 0;  (läuft nach rechts)
      end;

      if (rnd_richtung <= 50) and (rnd_richtung > 25) then begin
         X_Abzug := -10; Y_Abzug := 0;  (läuft nach links)
      end;
usw.
Du kannst ja per Timer, die verstrichene Zeit messen und die mit timetomove abgleichen. Wenn gleich neue Zeit und neue Richtung ermitteln.


devnull :)

Alexander 29. Nov 2003 11:37

Re: Einfachste KI für Gegner
 
Man kann doch Bereiche angeben, in denen man die Zufallszahl habenn will, dann kannst du doch einfach sagen, wenn 1, dann gerade aus, wenn 2 dann nach unten usw.
Nur mal so einen kleine Idee.


Alle Zeitangaben in WEZ +1. Es ist jetzt 17:44 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz