AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Projekte Programm zum Beobachten von Ameisen
Thema durchsuchen
Ansicht
Themen-Optionen

Programm zum Beobachten von Ameisen

Ein Thema von dino · begonnen am 15. Jul 2006 · letzter Beitrag vom 29. Okt 2007
Antwort Antwort
Seite 6 von 14   « Erste     456 78     Letzte »    
dino
Registriert seit: 15. Jul 2006
einfach per mausklick starten ist aber für 1600*1200 Bildschirmauflösung Programmiert

[Edit]
hier die neue Überarbeitete Version meines Programms
der Quelltext folgt, wenn ich mal Lust habe ihn zu struckturieren

ist für 1024*768 geschrieben, hat 4 Völker, man kann eine Statistik einblenden lassen(auf x)
starten und beenden per doppelklick
scrollen immer per AWSD

ansonsten nochmal fragen[/Edit]
Angehängte Dateien
Dateityp: exe ameisen_879.exe (320,0 KB, 594x aufgerufen)
Dateityp: rar ameisen_162.rar (151,0 KB, 301x aufgerufen)
 
Benutzerbild von himitsu
himitsu

 
Delphi 12 Athens
 
#51
  Alt 24. Jul 2006, 13:07
If round(realtime/2)=realtime/2 Then Hier im Forum wurde schon mehrmals gesagt, daß und warum man keinen direkten Vergleich mit RealWerten machen soll.
Delphi-Quellcode:
If time and 1 = 0 Then
//oder
If Odd(time) Then
Dann hab ich eine zusätzliche Variable eingeführt, so daß nicht mehr die Farben ausgelesen werden müssen.
Nicht nur, daß es schneller ist (nicht nur, weil die Multiplikation wegfällt und wegen dem INC, satt ADD ... Pixels ist ja bekannter Maßen nicht gerade eine schnelle Funktion),
vorher waren die Werte auch noch verloren, wenn der Bildschirm gelöscht wurde
und man kann jetzt Anfragen einfach zusammenfassen.
Delphi-Quellcode:
If canvas.pixels[Ameise[a].X*4, Ameise[a].Y*4+4] = clred Then
If Feld[Ameise[a].X, Ameise[a].Y + 1] = sAmeise Then

If canvas.pixels[Ameise[a].X*4, Ameise[a].Y*4+4] = clred Then w := 0;
If canvas.pixels[Ameise[a].X*4, Ameise[a].Y*4+4] = clgreen Then w := 0;
If Feld[Ameise[a].X, Ameise[a].Y + 1] in [sAmeise, sGras] Then w := 0;
ähhh, dazu sag ich mal nichts.
Code:
/////
If a Then If b Then
If a and b Then

/////
If a=b=false Then
If a<>b Then

/////
a*1000 + b=100100=false
a*1000 + b<>100100  // siehe drüber
(a <> 100) or (b<>100)

/////
If a Then ...
If a Then ...
If a Then ...

If a Then
Begin
  ...
  ...
  ...
end;
Warum ist test1 ein Integer und kein Boolean?


================================================== ========================


So, ich hab och mal ein bissl rumgespielt ._.
(siehe Anhang).

Es wird kein TImage verwendet (wie bei einem Vorgänger), sondern TPaintBox und intern (nur wenn das gesamte Bild neugemacht wird) ein TBitMap als Zwischenspeicher.

Die Pixels werden nicht mehr ausgelsen, dafür wirde eine neue Variable eingeführt,
wo die Zustände der Felder gespeichert sind.

Und dann durden noch die Variablen neu geordnet ... zusammengehöriges in einen Record

Ach ja, in QC gibt's so'n paar nette Constanten (ganz oben) ... damit könnte man es sich ein bissl anpassen (an Monitor und CPU).
Die PaintBoxen, Panels und der Rest wird dann beim Programmstart mit angepasst.

Die beiden Wege- und Strassenbilder werden jetzt auch mal mit bereinigt ... so werden z.B. verduftete Straßen entfernt und man sieht nur noch das "Aktuelle".
Mit NeuIntervall=0; NeuSchritte=MaxX; wird das bei jedem Durchgang gemacht (die Wege verschwinden dann so, wie man es von den ganzen Snake-Spielen kennt), aber wegen der CPU-Belastung wird das standardmäßig nur Schrittweise durchgeführt.

Wofür die beiden ScrollBars da unten sind, werdet ihr schon rausfinden

Ähh ... ja ... also die Futterplätze und der Bau sind och nicht mehr fest positioniert ... im Grunde ist fast alles recht dynamisch ausgelegt.
Dann können sich auf den Feldern des Baus mehrere Ameisen zugleich aufhalten, ist och logischm weil der ja eigentlich ganz tief in die Erde reicht.
Außerdem auch wegen des größeren Baus gibt es jetzt kein gedrängel mehr, wenn mehrere zugleich reinwollen.

Dann hab ich noch die transportierbare Futtermenge etwas gedroßelt ... die Kleinen hatten sich ja explosionsartig vermehrt.

Und da ich ja jetzt mal den tatsächlichen Zustand der Geruchsspuren sah, verringerte ich auch noch deren Verfall, die waren ja och viel zu schnell verschwunden -.-''

So ... ich hoffe damit wäre erstmal alles gesagt ^^


Na OK, ein/zwei Fehler sind noch drin, aber mal sehn wann nich Lust bekomm die zu suchen :engel:

[size=1]ach, was man nicht alles macht, wenn man ma kurz von seinen Dingen Abstand braucht ._.[/size]


[add]
So, Samstag war ma und Heute hatte ich doch nochma ä bissl Lust bekommen.
('s macht irgendwie Spaß und Haustiere hatte ich och lange keine mehr)
-Vorschau siehe AmeisenEx.exe
-Geburtenkonntrolle eingeführt
-Wegefenster erweitert
-transprotierende Ameisen haben auch noch ein paar Prozente an Zufall bekommen
(die haben sich sonst zu schnell irgendwo festsetzten können, wenn der Weg mal versperrt war)
-will 'ne Ameise die schon was trägt an 'nem anderem Häppchen vorbei, dann läßt sie das Aktuelle liegen und nimmt sich's Neue
(die Variante mit dem Drumrumlaufen war nicht so schön, vorallem da die Kleinen so auch mal mitten im Futterplatz eingesperrt werden konnten und jämmerlich "verhungerten" ._.)
...
-ups, hatte es wohl mit'm Futter über(unter)trieben ... na ja, jetzt isses nichmehr möglich ein Volk/Folk aussterben zulassen
-'nen Fehler behoben (blöd, wenn man oben mit unter / + mit - verwechselt -.-'')
-nein, Blut wird nicht vergossen, die sin also noch dodal lieb

Also beim "Benchmark" ... wenn die Zeit für einen Durchlauf übe der des Timers liegt, dann sollte man sich wohl langsam mal Gedanken machen, falls man selber auch noch etwas CPU-Leisung benötigt

an Einstellungen gibt's dann sowas
Code:
// 800x600:   MaxX=198, MaxY=169, FutterPlaetze=5
// 1280x1024*: MaxX=237, MaxY=200, FutterPlaetze=13
// 1600x1200*: MaxX=305, MaxY=260, FutterPlaetze=20

Const MaxX     = 198;
  MaxY         = 169;
  FutterPlaetze = 10;
  Voelker      = 2;
  AmeisenStart = 50;
  AmeisenMin   = 3;
  AmeisenMax   = 4096;
  MaxLeben     = MaxX * MaxY div 16;
  NeuIntervall = 16;
  NeuSchritte  = 16;

  VolkFarbe: Array[-1..Voelker-1] of TColor = (clSkyBlue,
    clRed, clOlive);
Jetzt noch eine Kleinigkeit beheben und dann muß ich mir noch überlegen, ob ich den QC offenleg




Nun noch 'ne Frage an den Herrn der Schöpfung: was war'n eigentlich mit dem Holz angedacht?
Angehängte Dateien
Dateityp: 7z ameisen_904.7z (22,3 KB, 22x aufgerufen)
Dateityp: exe ameisen_576.exe (502,0 KB, 37x aufgerufen)
Dateityp: exe ameisenex_213.exe (505,0 KB, 48x aufgerufen)
  Mit Zitat antworten Zitat
Benutzerbild von gordon freeman
gordon freeman

 
Delphi 2005 Personal
 
#52
  Alt 24. Jul 2006, 21:19
Hi Himitsu,
sieht echt nett aus, allerdings kam bei mir erst die 9. (!!!) Ameise mit ihrem Futter an, weil alle anderen hängen blieben. Die Struktur war so (g ^= Gras, a ^= Ameise):

Delphi-Quellcode:
.
    [g]
  [a][g]
     [g]
Das war bei einigen der Fall, wobei der oberste Graspunkt nicht unbedingt da war, sie sind teilweise auch an 2 übereinanderliegenden Graspunkten hängen geblieben.
Ansonsten

mfg, Martin
Martin
  Mit Zitat antworten Zitat
Benutzerbild von Stefan Hueg
Stefan Hueg

 
Delphi 2006 Professional
 
#53
  Alt 25. Jul 2006, 01:52
Offenbar ist das eine gepimpte Version von einem schon einmal vorgestelltem Ameisenstaatsimulator (AstaS).

Offenbar sind deine Ameisen auch nicht viel schlauer als die alten, sie rennen auch an schnurstracks am Fressen vorbei obwohl es sich nur einen Pixel neben ihnen befindet ^^ Habe die Population mal auf das Maximum anwachsen lassen, etwa 1500 denn dann wird die Nahrung knapp. Dann hab ich mal den Nahrungswert auf Null heruntergesetzt und die Pop. auf 14 reduziert. Nun mit meinem Suchauge das Bild abgegrast, real waren aber nur 4 auf dem Bildschirm, gleiches Problem wie bei dem alten Code
Stefan Hueg
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

 
Delphi 12 Athens
 
#54
  Alt 25. Jul 2006, 14:57
inzwischen bleiben die zwar nicht mehr ganz so stark zu hängen ... hab halt noch etwas zufall mit din die Bewegung eingebaut, aber perfekt ist es noch lange nicht.

normaler weise laufen die Ameisen ja vorwigend über zufall und de Geruchsspuren, welche ja von irgendwo herkommen, also "Hindernisfrei" sind.

Aber zurück laufen die halt vorwiegend direkt (in 45°- und 90°-Winkeln) und können Hindernissen nur bedingt ausweichen.

Idealer wäre es halt, wenn die erstmal direkt laufen und bei 'nem Hindernis versuchen Bogenförmig und immer Bogenförmiger zu laufen ... aber dafür 'ne Berechnungsformel zu erstellen °_°
also bisher war mir das noch etwas zu hoch (abgesehn davon hab ich das hier nur nebenbei mal geschrieben ... so aus Spaß.

ach ja, die Version hier hatte noch 'nen Fehler drin ... die Ameisen durften im original Programm nur ab 'ner bestimmten Stärke "Lebensenergie" ins Freie und wenn sie nichts zu futern hatten, waren sie halt zu schwach und durften nicht raus.

Aber Zählfehler kann ich dennoch nicht ausschließen.
siehe Bild.

Population 2 hat 4 Ameisen (ich konnte aber bisher nur eine entdecken) ... aber schlimmer ist, selbst wenn es wiklich 4 sind ... schaut euch mal an wievile davon was tragen ._.

(war leider zu sehr mit WMI beschäftigt, daß ich doch glat vergessen hab die neue Programmdatei und eventuell noch die QCs mitzunehmen -.-'' )


PS: das mit dem gepimpt ... eigentlich hatte ich zuerst nur mal das Original umstrukturiert und einige Sachen etwas anders ... als ich dann fastvertig war, dachte ich mir.. och, den einen _Record da noch mit reinpacken und davor dann ein "Array of" und man hätte 2, 3, oder Völker.
Na OK ganz s enfach war's ann doch nicht, weil dann plötzlich einige Ameisen die Nahrung im falschen Hügelablieferten ... und solche Sachen

geplant ist (für die nächsten Wochen)
- nahrung bleibt liegen und kann von 'ner anderen Ameise mitgenommen werden, wenn ein Ameise stirbt
- die ameisen können sich gegenseitig das futter klauen
also entweder aus dem gegnerischem hügel,
oder oder sie (kämpfen) die stärkere krigt halt die Beute, wenn sie sich treffen
- wenn sie sich treffen und beide mal kein futter bei haben, dann evenuell ein "machtkampf" ... der schwächere wird zu futter
...
na ja, die sollen halt auch mal miteinander agieren.
bisher ignorieren sie sich ja nur


OK, auf dm Bild war es halt so, das die obere Population einfach zuweit vom Futter weg war und die in der Mitte denen alles so schnell wegfraß (weil sie sich halt schneller vermehren konnten), daß die Obere fast einging ._.


[add2]
ohh, hab doch noch die fehlenden Ameisen entdeckt (denk ich mal) ... eine s so links oben und die anderen mehr in der mitte, bis leicht rechts unten ^^
Miniaturansicht angehängter Grafiken
ameisen_206.png  
  Mit Zitat antworten Zitat
Benutzerbild von xZise
xZise

 
Delphi 2009 Professional
 
#55
  Alt 25. Jul 2006, 15:19
Hehe... Also mir ist was lustiuges passiert (siehe Anhang)
Miniaturansicht angehängter Grafiken
fehler_892.jpg  
Fabian
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

 
Delphi 12 Athens
 
#56
  Alt 25. Jul 2006, 15:27
Nöö, dat is Absicht ... ich kann ja keine Ameisen aus dem Nichts erzeugen, also holen die sich einen "Kedit".

Solange es also "normal" läuft, dann fressen die nur bis auf 0 (Vorratskammer leer) runter und verhungern dann jämerlich (hier könnte man es ja noch mit Sounds/Klagelauten untermauern).
Aber wenn die Ameisen am aussterben sind, dann wird immer dafür gesorgt, daß (mit den aktuellen Einstellungen) immer mindestens 3 Ameisen vorhanden sind .. tja und die Aeisen müssen ja aus irgendwas gemacht werden (also der Kredit)
  Mit Zitat antworten Zitat
Benutzerbild von xZise
xZise

 
Delphi 2009 Professional
 
#57
  Alt 25. Jul 2006, 15:57
Schade ^^ Ich wollte schon meine Kolonien ausrotten! ^^
Fabian
  Mit Zitat antworten Zitat
dino

 
Delphi 5 Professional
 
#58
  Alt 25. Jul 2006, 16:06
seit wann nimmt ne Ameise nen Kredit auf?
nur wenn sehr viel Futter da ist, wird aus nem Teil des Futtervorrats ne Ameise erschaffen...
und das ist auch ganz richtig so denke ich
ausserdem gibts keine Geburtkontrolle!
wenn genug Futter da ist vermehren die sich und das pendelt sich schon ein

ich hab mir den source code noch nicht angeguckt(wegen Delphi 3: Delphi 2005 hab ich uf nem anderen Windows), aber sieht ja schon mal sehr hübsch aus und darauf, dass sich Ameidenvölker bekriegen freu ich mich schon!

Aber was fürn Holz?
wenns das ist was ich meine, sollten die Ameisen unter viel Aufwand und vllt auch durch tote Grashalme absägen, die nennen wr dann Holz und damit bauen die sich nen neuen Bau...

Wenns so weiter geht, dann haben wir ne Intelligente Ameisenkolonie erschaffen und dann Programmieren wir mal die möglichkeit, dass menschliche Spieler auch ne Menschen(winzlinge) Klonie bauen können und dann haben wir ein Spiel aller Age of Empires!

ich glaub, dass gehört langsam alles in Open-Source
  Mit Zitat antworten Zitat
25. Jul 2006, 16:17
Dieses Thema wurde von "Dax" von "Freeware" nach "Open-Source" verschoben.
Passt hier wirklich besser
jokerfacehro
 
#60
  Alt 25. Jul 2006, 16:21
hi, bau doch einfach eine kollisionsabfrage auf alle 8 felder die eine ameise umgibt,
wenn eines davon gras ist, wird das feld schon mal ausgelassen, einfach mit ner while schleife durchlaufen lassen bis ein betretbares feld erreichbar ist

bei mir haben sich 20 - 30 ameisen direkt zwischen dem futter verbarrikadiert und kamen
erst raus als ein paar andere sie befreit haben
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 6 von 14   « Erste     456 78     Letzte »    


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 12:40 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