Deutsch
Stammtisch & Café

Ameisensimulation

 
Ferenc Züllich
Die Idee ist wirklich cool!  [...] 
WEr nix zutun hat könnte das ja in Angriff nehmen


Eine Klasse für eine Ameise könnte wie aussehen?

(hab im Moment nicht wirklich Interesse, aber wollte das Thema auffangen)
KompilierenMarkierenSeparieren
class ant=...
typ%
aliveState%//0=im Eimer; 1=am Leben; 2=pennt grade
damaged%//z.B. Beschädigungslevel und Müdigkeit reinpacken
walkState%//0=still; 1=läuft ;2=rennt;3=...
walkDirection!//Laufrichtung in °
x!,y!,z!//Position im Raum
energy!//Kraft

Bitte ergänzen, oder auch nicht...

Ich würde es aber schön finden nur mit den Augen beim Orginal abzuschauen.
 
13.06.2008  
 




Nico
Madysa
Da Ameisen in der Regel nur am Boden herumkriechen, reichen - meiner Meinungs nach - zwei Raumkoordinaten völlig aus.
Und was meinst du mit Energy/Kraft? Wieso ist das eine Gleitkommazahl?
KompilierenMarkierenSeparieren
class ant=...
typ%
aliveState%//0=im Eimer; 1=am Leben; 2=pennt grade
damaged%//z.B. Beschädigungslevel und Müdigkeit reinpacken
walkState%//0=still; 1=läuft ;2=rennt;3=...
walkDirection!//Laufrichtung in °
x!,y!//Position im Raum
energy!//Kraft
 
Nico Madysa
13.06.2008  
 



Durch weglassen der Y-Info würdest Du Dir das Herunterfallenkönnen rauben, wäre dank OGL vielleicht später schade.

energy! (Kraft) für Nahrung/Gesättigt/Arbeitsfähig und - desto weniger energy! schneller ansteigendes damaged%. damaged% reduzieren wenn/solange aliveState% auf 2 (pennt grad) steht, pennen bringt Gesundheit, und Nahrungfinden bringt energy! damaged% sollte dann wohl kein int sondern eher ein float sein, also damaged!

Nur ne Idee
KompilierenMarkierenSeparieren
class ant=
typ%
aliveState%//0=im Eimer; 1=am Leben; 2=pennt grade
damaged!//z.B. Beschädigungslevel und Müdigkeit reinpacken
walkState%//0=still; 1=läuft ;2=rennt;3=...
walkDirection!//Laufrichtung in °
x!,y!,z!//Position im Raum
g!//Größe
energy!//Kraft
triebmodi%//Bauen/Kriegen/Nahrungssuche/Vermehren/Winterschlaf/Helfersuche
geburtsZeit&
durchschnittsAlter&//wie alt die XMeise im Durchschnitt werden darf

Bloß nicht überlegen was so eine Ameise den ganzen Tag treibt...
 
13.06.2008  
 




Jac
de
Lad
Eine normale Ameise vermehrt sich nicht -> staatenbildendes Insekt ala Biene und Termite. Mensch iF, was hast du in der Schule gelernt?
 
Profan² 2.6 bis XProfan 11.1+XPSE+XPIA+XPRR (und irgendwann XIDE)
Core2Duo E8500/T2250, 8192/1024 MB, Radeon HD4850/Radeon XPress 1250, Vista64/XP
13.06.2008  
 



Ich habe doch nur den Triebmodi% so genannt...
 
13.06.2008  
 




Frank
Abbing
Und je nach Art der Fütterung entsteht eine unterschiedliche Ameise. Arbeiter, Königin usw. Oder war das nur bei den Bienen so?
 
14.06.2008  
 




Frank Abbing: Und je nach Art der Fütterung entsteht eine unterschiedliche Ameise. Arbeiter, Königin usw. Oder war das nur bei den Bienen so?


Siehe hier mein lieber Frank
[web]https://de.wikipedia.org/wiki/Ameisen[/web]
 
14.06.2008  
 



Siehe mal einer an - die besitzen tatsächlich komplexeres Sozialverhalten als ich...
 
14.06.2008  
 




Thomas
Zielinski
Hab heut mal spaßeshalber versucht die viecher zum laufen zu kriegen in OGLBasic(die frei version).
Hab da nur einige Probleme:
in dem markiertem abschnitt unter Ant.kriechen: wenn ich dort alles auskommentiere bis auf die eine zeile laufen die dinger zwar(sonst nicht), aber nur in eine richtung: nach oben rechts.
Hat da jemand ne idee?
KompilierenMarkierenSeparieren
Declare AMEISE#[150], homeX!, homeY!, homeZ!, nahrung!, lager!, i!, e!
Declare zeit$, zeitanfang&, zeitende&, zeith&, zeitm&, zeits&, zeit&
homeX!=0
homeY!=0
homeZ!=-30
nahrung! = 0
lager! = 0
Class Ant =	Nummer!, 	Nummer der Ant
Leben!, 	max 100
PositionX!,
PositionY!,
PositionZ!,
ZielKoordX!,
ZielKoordY!,
ZielKoordZ!,
richtung!, 	Richtung in die, die Ant schaut in °
Alter!, 	wie alt ist die Ant
Typ!, 		0=sammler 1=kaempfer
Aktion!, 	0=steht 1=sammelt 2=läuft 3=trägt 4=kämpft 5=umschauen 6=nach hause mit last
Last!, 	Wiviel trägt die Ameise
kriechen@, 	bewegen
suchen@		Gibt Zielrichtung an

Proc Ant.kriechen

    parameters xp!, yp!, zp!, rp!, xz!, yz!, zz!, num!
    Declare xp!, yp!, zp!, rp!, xz!, yz!, zz!
    AMEISE#[num!].Alter! = AMEISE#[num!].Alter! + 0.1

    IfNot AMEISE#[num!].Leben! = 0 OR AMEISE#[num!].Alter! >= 1000

        If AMEISE#[num!].Last! = 10

            xz! = homeX!
            yz! = homeY!
            zz! = homeZ!

        EndIf

        MessageBox(Str$(xp!) + - +  Str$(xz!) +
        + Str$(yp!) + - +  Str$(yz!) +
        + Str$(zp!) + - +  Str$(zz!),,4096)
        ####################################################################################################################
        ####################################################################################################################
        ####################################################################################################################
        ####################################################################################################################

        If xp! = xz! AND yp! = yz! AND zp! = zz!

            AMEISE#[num!].Aktion! = 0
            MessageBox(Str$(xp!) + - +  Str$(xz!) +
            + Str$(yp!) + - +  Str$(yz!) +
            + Str$(zp!) + - +  Str$(zz!),,4096)

            If AMEISE#[num!].Last! = 10 AND xp! = homeX! AND yp! = homeY! AND xp! = homeZ!

                lager! = lager! + 10
                AMEISE#[num!].Last! = 0

            EndIf

            AMEISE#[num!].suchen(num!)	<-- Wenn nur das steht klappt es

        EndIf

        ####################################################################################################################
        ####################################################################################################################
        ####################################################################################################################
        ####################################################################################################################

        If xp! < xz!

            xp! = xp! + 0.1

        ElseIf xp! > xz!

            xp! = xp! - 0.1

        EndIf

        If yp! < yz!

            yp! = yp! + 0.1

        ElseIf yp! > yz!

            yp! = yp! - 0.1

        EndIf

        If zp! < zz!

            zp! = zp! + 0.1

        ElseIf zp! > zz!

            zp! = zp! - 0.1

        EndIf

        If AMEISE#[num!].Last! = 10

            AMEISE#[num!].Aktion! = 6

        ElseIf AMEISE#[num!].Last! < 10 AND AMEISE#[num!].Last! > 0

            AMEISE#[num!].Aktion! = 3

        ElseIf AMEISE#[num!].Last! = 0

            AMEISE#[num!].Aktion! = 2

        EndIf

        AMEISE#[num!].PositionX! = xp!
        AMEISE#[num!].PositionY! = yp!
        AMEISE#[num!].PositionZ! = zp!

    Else

        AMEISE#[num!].PositionX! = homeX!
        AMEISE#[num!].PositionY! = homeY!
        AMEISE#[num!].PositionZ! = homeZ!

    EndIF

EndProc

Proc Ant.suchen

    parameters num!
    AMEISE#[num!].Alter! = AMEISE#[num!].Alter! + 0.1

    If AMEISE#[num!].Leben! = 0 OR AMEISE#[num!].Alter! >= 1000

        Randomize
        AMEISE#[num!].ZielKoordX! = Rnd(10 + 10) - 10
        AMEISE#[num!].ZielKoordY! = Rnd(10 + 10) - 10
        AMEISE#[num!].ZielKoordZ! = homeZ!################################################## weil flach bleibt

    EndIf

EndProc

-------------------------------------------------
Dim AMEISE#[], Ant
i!=0
Randomize

WhileNot i! = 150

    With AMEISE#[i!]

        .Nummer!=i!
        .Alter! = Rnd(500)
        .Typ! = Rnd(2)
        .Leben! = 100
        .PositionX! = homeX!
        .PositionY! = homeY!
        .PositionZ! = homeZ!
        .ZielKoordX! = homeX!
        .ZielKoordY! = homeY!
        .ZielKoordZ! = homeZ!
        .richtung! = 0
        .Aktion! = 0
        .Last! = 0

    EndWith

    i!=i!+1

EndWhile

i!=0
------------------------------------------------------
CLS 0
oGL(Init, %hWnd, 0, 0, 0, 0)
oGL(PosMode,1)
zeitanfang& = &GetTickCount
SetTimer 20

While e!=0

    WaitInput

    If IsKey(27)

        BEENDEN

    EndIf

    WERTE
    OGLSZENEZEICHNEN

EndWhile

KillTimer
Dispose AMEISE#[]
End

Proc BEENDEN

    e!=1
    zeitende& = &GetTickCount
    zeit& = zeitende&-zeitanfang&
    zeith& = ((zeit&/1000)/60)/60
    zeitm& = (zeith& - Round(zeith&,0))*60
    zeits& = ((zeitm& - Round(zeitm&,0))*60)
    zeit$ = Str$(Round(zeith&,0)) + : + Str$(Round(zeitm&,0)) + : + Str$(Round(zeits&,0))
    MessageBox( erreichte Nahrung:  + Str$(nahrung!) +
    vergangene Zeit:  + zeit$,ENDE,4096)

EndProc

Proc WERTE

    i!=0

    WhileNot i! = 150

        TraceOn
        AMEISE#[i!].kriechen(AMEISE#[i!].PositionX!, AMEISE#[i!].PositionY!, AMEISE#[i!].PositionZ!, AMEISE#[i!].richtung!, AMEISE#[i!].ZielKoordX!, AMEISE#[i!].ZielKoordY!, AMEISE#[i!].ZielKoordZ!, i!)
        TraceOff
        i! = i! + 1
        MessageBox(str$(i!),,4096)

    EndWhile

EndProc

Proc OGLSZENEZEICHNEN

    oGL(Clear)
    oGL(Origin, 0, 0, homeZ!)
    oGL(Color, 0.0, 0.0, 1.0, 1.0)
    oGL(Quad, 2, 2)
    i!=0

    WhileNot i! = 150

        oGL(Origin, AMEISE#[i!].PositionX!,AMEISE#[i!].PositionY!,homeZ!)

        If AMEISE#[i!].Typ! = 0

            oGL(Color, 1.0, 0.0, 0.0, 1.0)

        ElseIf AMEISE#[i!].Typ! = 1

            oGL(Color, 0.0, 1.0, 0.0, 1.0)

        EndIf

        oGL(Triangle, 0.3, 0.3)
        i!=i!+1

    EndWhile

    oGL(Show)

EndProc


Aber langsam versteh ich den nutzen von oop. Da ich die Quelltexte auf der seite eh nicht versteh hab ich mir nur das video angeguckt was da passieren soll.
Gruß Thomas
 
XProfan X4; Win10 x64
Der Kuchen ist eine lüge!
14.06.2008  
 




Thomas
Zielinski
Dann geht doch der ganze Spaß verloren. Selber machen is viel besser. Zumal das, nach deren Beschreibung, zum lernen von sowas sein soll.
 
XProfan X4; Win10 x64
Der Kuchen ist eine lüge!
14.06.2008  
 




Frank
Abbing
Du irrst. Wie du schon gesagt hast ist es ein Profan-nach-Cpp Übersetzer. Der funktioniert aber nicht umgekehrt...
 
14.06.2008  
 



@Thomas: So weit sind wir noch garnicht, bitte erstmal die Klasse diskutieren.
 
14.06.2008  
 




Antworten


Thementitel, max. 100 Zeichen.
 

Systemprofile:

Kein Systemprofil angelegt. [anlegen]

XProfan:

 Beitrag  Schrift  Smilies  ▼ 

Bitte anmelden um einen Beitrag zu verfassen.
 

Themenoptionen

3.973 Betrachtungen

Unbenanntvor 0 min.
RudiB.31.01.2016
iF20.08.2011

Themeninformationen



Admins  |  AGB  |  Anwendungen  |  Autoren  |  Chat  |  Datenschutz  |  Download  |  Eingangshalle  |  Hilfe  |  Händlerportal  |  Impressum  |  Mart  |  Schnittstellen  |  SDK  |  Services  |  Spiele  |  Suche  |  Support

Ein Projekt aller XProfaner, die es gibt!


Mein XProfan
Private Nachrichten
Eigenes Ablageforum
Themen-Merkliste
Eigene Beiträge
Eigene Themen
Zwischenablage
Abmelden
 Deutsch English Français Español Italia
Übersetzungen

Datenschutz


Wir verwenden Cookies nur als Session-Cookies wegen der technischen Notwendigkeit und bei uns gibt es keine Cookies von Drittanbietern.

Wenn du hier auf unsere Webseite klickst oder navigierst, stimmst du unserer Erfassung von Informationen in unseren Cookies auf XProfan.Net zu.

Weitere Informationen zu unseren Cookies und dazu, wie du die Kontrolle darüber behältst, findest du in unserer nachfolgenden Datenschutzerklärung.


einverstandenDatenschutzerklärung
Ich möchte keinen Cookie