Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Algorithmen, Datenstrukturen und Klassendesign (https://www.delphipraxis.net/78-algorithmen-datenstrukturen-und-klassendesign/)
-   -   Delphi PackMan-Futter-Algorithmus (https://www.delphipraxis.net/156037-packman-futter-algorithmus.html)

Johannes013 17. Nov 2010 18:15

PackMan-Futter-Algorithmus
 
Hey Leute! :-D

Ich programmiere PackMan und muss das Futter (Schwarze Punkte als TShape) mit dem PackMan überprüfen. Ich habe an Intersect gedacht, aber mit allen 80 Punkten? Das könnte sehr langsam werden...
Außerdem muss ich dann noch wissen, was für ein Shape das ist.

Was kann man da machen? Wie kann ich prüfen, ob er überschneidet und dann welches Shape möglichst schnell???

mfg Johannes

Medium 17. Nov 2010 18:21

AW: PackMan-Futter-Algorithmus
 
Der Ansatz über Shapes (bzw. Komponenten generell) ist schon extrem ungünstig. Vor allem, weil es dazu verleitet Logik und Darstellung zu sehr zu koppeln, und du merkst gerade, warum das blöd sein kann ;)

Nimm dir eine Klasse TFutter die Position und Radius beinhaltet, Instanzen davon in eine Liste, und du kommst sehr simpel mit einfacher Mathematik weiter. Für die Darstellung einfach selbst ein Bitmap bemalen, und das dann auf den Forumarcanvas blitten. Alles andere ist nur Gefuckel.

Johannes013 17. Nov 2010 18:24

AW: PackMan-Futter-Algorithmus
 
Danke. Ich versuch's! :-D

stahli 17. Nov 2010 18:25

AW: PackMan-Futter-Algorithmus
 
trotz rotem Kasten noch als Idee:
Vielleicht kannst Du Deine Shapes in einem Array (X/Y-Position) ablegen und dann zur Laufzeit prüfen, ob in dem Array "unter dem Packman" ein Shape liegt (oder nil ist).
Dann müsstest Du natürlich dein gesamtes Spielfeld mit einem Array abdecken.

Bummi 17. Nov 2010 18:41

AW: PackMan-Futter-Algorithmus
 
@stahli
kann man doch auch schon alles in der Futterklasse unterbringen...

stahli 17. Nov 2010 18:49

AW: PackMan-Futter-Algorithmus
 
Ja, aber dann muss man die Liste durchsuchen, ob man Futter an der aktuellen Position findet.
Ein Raster-Array bietet direkten Zugriff auf eine bestimmte Stelle.
Muss man halt überlegen, was für die aktuelle Anwendung zweckmäßiger ist.

Bummi 17. Nov 2010 18:53

AW: PackMan-Futter-Algorithmus
 
Mit TInfo für die allgemeinen Informationen dann:
Delphi-Quellcode:
TFutter=Class(TInfo);
..
..
TWorkArray=Array of Array of TInfo;


Alle Zeitangaben in WEZ +1. Es ist jetzt 02:06 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