| |
|
|
- Seite 1 - |
|
| |
|
| |
|
|
|
| |
|
- Seite 1 - |
|
| 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 KompilierenMarkierenSeparierenclass 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... |
|
|
| |
|
|
|
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... |
|
|
| |
|
|
|
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? |
|
|
| |
|
|
|
|
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] |
|
|
| |
|
|
|
| Siehe mal einer an - die besitzen tatsächlich komplexeres Sozialverhalten als ich... |
|
|
| |
|
|
|
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? KompilierenMarkierenSeparierenDeclare 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... |
|
|
| |
|
|
|
| @Thomas: So weit sind wir noch garnicht, bitte erstmal die Klasse diskutieren. |
|
|
| |
|
|
| |
|
- Seite 2 - |
|
|
Thomas Zielinski | iF
Ferenc ZüllichDie Idee ist wirklich cool! [...] WEr nix zutun hat könnte das ja in Angriff nehmen (hab im Moment nicht wirklich Interesse, aber wollte das Thema auffangen)
Ich hab das als Aufforderung gesehen, es doch gleich mal auszuprobieren.
iF
So weit sind wir noch garnicht, bitte erstmal die Klasse diskutieren.
Ich find die sind gut so wie sie sind.
Na egal. nach ein paar Stunden Schlaf, is mir wenigstens der Fehler eingefallen. Aus: KompilierenMarkierenSeparieren
If xp! = xz! AND yp! = yz! AND zp! = zz!
Wird: KompilierenMarkierenSeparieren
If (xp! = xz!) AND (yp! = yz!) AND (zp! = zz!)
Man beachte die Klammern! Hab das noch nie falsch gemacht. Möcht wissen was mich da geritten hat. Jetz muss ich bloß noch das laufen richtig hinbekommen.
Gruß Thomas |
|
|
| XProfan X4; Win10 x64 Der Kuchen ist eine lüge! | 15.06.2008 ▲ |
|
|
|
|
Sebastian König | Ferenc Züllich
Stimm schon Frank! Aber wenn der Autor des Programms bei sich im Quellcode einfach ein paar Zeilen ändert und für uns das konvertiert.... Aber das ist wahrscheinlich doch nicht so leicht.
Allerdings nicht - komplett Neuschreiben trifft es eher. Und dazu erscheint mir die Idee ehrlich gesagt nicht sinnvoll genug...
MfG
Sebastian |
|
|
| |
|
|