AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Projekte Simulation kleiner "Dinger" (Achtung Sinnfrei)
Thema durchsuchen
Ansicht
Themen-Optionen

Simulation kleiner "Dinger" (Achtung Sinnfrei)

Ein Thema von furuha · begonnen am 10. Feb 2009 · letzter Beitrag vom 19. Feb 2009
Antwort Antwort
Seite 2 von 2     12   
furuha
Registriert seit: 21. Jan 2009
Hallo,


dieses Programm ist mehr aus langeweile herraus entstanden. Im Prinzip sollen dort n "Partikel" die ihn am nächste "Nahrung" aus n "Nahrung" auswählen und sich zu dieser hinbewegen und diese "fressen". Das Programm ist noch nicht ganz fertig, evtl. auch etwas unschön geschrieben UND es hat einen Bug.... und zwar bewegen sich die "Partikel" irgendwann nicht mehr weiter, und fressen auch nicht mehr.

Anleitung: Erstellen der Partikel mit rechtsklick. Neue Nahrung per Button.

Getestet: Auf 3 WinXP Rechnern.


EDIT1: Neue Version (siehe Partikel3.zip), Array's haben jetzt definitiv keine Indexfehler mehr(hoffentlich^^) und die Anzahl kann pr Eingabefeld bestimmt werden. (Achtung: BEi 0 oder nicht Integer werten kommt ein Error, hab noch keine Überprüfung drinne.)





Furuha
Angehängte Dateien
Dateityp: zip partikel2_717.zip (205,0 KB, 43x aufgerufen)
Dateityp: zip partikel3_804.zip (223,3 KB, 80x aufgerufen)
 
Benutzerbild von stoxx
stoxx
 
#11
  Alt 18. Feb 2009, 15:41
hier gibts noch mehr fressende Tierchen, mit sagen wir mal etwas "echteren" künstlichen Intelligenz


http://home.arcor.de/w.lorenz65/ki-schule/deutsch.htm
  Mit Zitat antworten Zitat
furuha

 
Delphi 2005 Personal
 
#12
  Alt 18. Feb 2009, 20:01
Eigentlich sollten die alle immer zum nahegelegensten Nahrungs"kästchen" pilgern.


"DoubleBuffered := true;"
müsste im Source stehen.



Zu den Units...an denen habe ich garnichts geändert...ich hatte halt irgendwann mit Delphi 2005 PE ne Form mit Code die ausführbar und hab erstmal alles so gelassen. Bin mit der 05er nicht ganz so vertraut.


Den Link werde ich mir auch noch genauer anschauen.


EDIT:

Die Teile kennen nur 8 Bewegungsrichtungen. Aber warum die Gruppen bilden ist mir schleierhaft...

Da war noch ein Fehler in der Richtungs bestimmung:

Delphi-Quellcode:
    if round(food[tp3, 0]) < partikel[index, 1] then begin
    partikel[index, 1] := (partikel[index, 1] - 1);
    end
    else if round(food[tp3, 0]) > partikel[index, 1] then begin
    partikel[index, 1] := (partikel[index, 1] + 1);
    end;

    if round(food[tp3, 1]) < partikel[index, 0] then begin
    partikel[index, 0] := (partikel[index, 0] - 1);
    end
    else if round(food[tp3, 1]) > partikel[index, 0] then begin
    partikel[index, 0] := (partikel[index, 0] + 1);
    end;
Vorher waren da keine Else-If Anweisungen, sondern ein einfaches if.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

 
Delphi 12 Athens
 
#13
  Alt 18. Feb 2009, 21:30
[edit]schwachsinn

[edit2]
for * := 1 to high ist dir die 1 schonmal aufgefallen?
(wo beginnt denn das Array? )

[add]
Delphi-Quellcode:
if round(food[tp3, 0]) < partikel[index, 1] then begin
...

if round(food[tp3, 1]) < partikel[index, 0] then begin
...
dann wollt ich erstmal hierrauf hinweisen ... speziell auf 0 und 1

hab mich dann aber immernoch gewundert, warum die nie zum nächsten Futter wollten

dann fand ich hier den weiteren Fehler (ebenfalls 0 und 1), wodurch diese nicht da gezeichnet wurden, wo sie waren
Delphi-Quellcode:
for index2 := 0 to high(food) do
begin
  canvas.rectangle(Round(food[index2, 1])-10, Round(food[index2, 0])-10, Round(food[index2, 1])+10, Round(food[index2, 0])+10);
  canvas.TextOut(Round(food[index2, 1])+10, Round(food[index2, 0])+10, IntToStr(index2) + ':' + FloatToStr(food[index2, 2]));
end;
- füg einfach mal diesen Code wieder ein und schau auf die Entfernungen und Futternummern ... da stimmt nicht grad viel
- läßt sich in Ruhe ansehn, wenndu den Timer natürlich stoppst
(Rechtsklick, solange bis du genügend "nicht überschriebene" Zahlen siehst)



der Fehler lag also die ganze Zeit in deinen "unübersichtlichen" Arrays versteckt.

ach ja...
- code etwas formatiert
- einiges "unnötiges/sinnloses" gelöscht [edit3] seh grad, in Partikel3 wars schon weg
- einiges verschoben (vorallem das Zeichnen)
- fehler korrigiert

- futter > futternummer : inhalt
- partikel > futternummer, wo es hin will : entfernung
Angehängte Dateien
Dateityp: 7z partikel2_192.7z (526,7 KB, 9x aufgerufen)
  Mit Zitat antworten Zitat
Custom

 
Delphi 7 Enterprise
 
#14
  Alt 19. Feb 2009, 13:19
also ich kann bei allen drei Versionen nichts als ein leeres graues feld und ein-zwei buttons sehen.. Vielleicht hängt das damit zusammen das ich Vista benutze - keine Ahnung
  Mit Zitat antworten Zitat
Benutzerbild von freak4fun
freak4fun

 
Delphi 10.2 Tokyo Starter
 
#15
  Alt 19. Feb 2009, 13:24
Ist bei mir genau so! Mit XP. Alles was ich auf der Form seh ist mein schmutziger Monitor.
  Mit Zitat antworten Zitat
Benutzerbild von Mithrandir
Mithrandir
 
#16
  Alt 19. Feb 2009, 13:43
Auch nach'm Rechtsklick?
米斯蘭迪爾
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

 
Delphi 12 Athens
 
#17
  Alt 19. Feb 2009, 14:13
hab mal schnell noch 'nen [Start]-Button (damit man nicht erst wo hinklicken muß, was man womöglich nicht weiß) und ein paar Edits und Co. eingefügt

Edits werden nur beim Drücken auf [Start] übernommen und entsprechen dem der Tasten darüber und die Checkboxen reagieren gleich
Angehängte Dateien
Dateityp: 7z partikel2_820.7z (155,8 KB, 7x aufgerufen)
  Mit Zitat antworten Zitat
furuha

 
Delphi 2005 Personal
 
#18
  Alt 19. Feb 2009, 20:16
Vielen Dank himitsu. werde mir dein "werk" gleich mal ansehen...

ich muss aber auch zugeben das (außer ich zwinge mich dazu - gaaanz selten xD) mein Source nieee so ganz leicht durschaubar und gut strukturiert ist.


EDIT: Ja ich sehe deutliche Vorteile in deiner Version gegenüber meiner^^ ICh werde hier jetzt auch garnicht versuchen meine oder mich groß zu verteidigen - das würde eh nach hinten losgehen....
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

 
Delphi 12 Athens
 
#19
  Alt 19. Feb 2009, 20:47
Wie schonmal gesagt (#5), am einfachsten wäre es noch, wenn du zukünftig statt Array-of-Array lieber ein Array-of-Record nutzt.

Dort hätte man dann anstatt var[index,0] und var[index,1] ein var[index].x und var[index].y und bei X und Y erkennt man doch viel eher, wofür diese da sind.

PS: ich muß zugeben, daß ich auch nicht sonderlich "ordentlich" bin ... mehrere Befehle in einer Zeile (manchma sogar gleich ganze Prozeduren, aber ich find's oftmals so übersichtlicher) und vorallem Kommentare sucht man meistens vergebens, aber bei der Bennung und Strukturierung von Variablen, Typen und Co. kann man sich dennoch viel Arbeit (später) ersparen.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 2     12   


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 06:54 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