BPS #24: Haselhörnchen - Auswertung

Übersicht BlitzMax, BlitzMax NG Beginners-Corner

Neue Antwort erstellen

Xeres

Moderator

Betreff: BPS #24: Haselhörnchen - Auswertung

BeitragMo, Sep 17, 2012 15:59
Antworten mit Zitat
Benutzer-Profile anzeigen
Wie schnell die Zeit vergeht... hat da jemand die Simulation vorgespult?

Das war die Aufgabe

Postet hier eure Ergebnisse, Codes, Gedanken. Lernt von den anderen, seht euch deren Quelltext an und versucht euren eigenen zu verbessern.

Diskussion
Postet zu euren Codes stets eine kurze Erklärung mit euren Gedanken in denen ihr simpel gesagt die Frage "Wieso habe ich XY auf diese Art gelöst?" beantwortet. Beiträge, die nur den Code enthalten werden wir aus dem Thread entfernen.

Nächste Aufgabe
In einer Woche wird die Musterlösung nach editiert und in 2 die nächste Aufgabe eingestellt.

Viel Spaß & viel Erfolg!

Musterlösung:
BlitzMax: [AUSKLAPPEN]
SuperStrict
SeedRnd(MilliSecs())

'* Generiere Startpopulation
For Local i:Int = 1 To 5
TBunny.Create(Null)
Next

Repeat
'* Warte auf Benutzer:
Select Input("> ")
Case "q", "quit", "exit"
End
End Select

Print("")
Print("New Year...")
TBunny.Update() '* Berechnungen durchführen
Print("Bunnys gestorben: " + TBunny.died + " (" + TBunny.Oldest + ")")
Print("Bunnys geboren: " + TBunny.Born)
Print("Bunnys: " + TBunny.Count)

Until TBunny.Count = 0 '* Falls alle Haselhörnchen gestorben sind, automatisch beenden.
End

Type TBunny
Field name:String
Field sex:Int '* True=Weiblich, False=Männlich
Field age:Int '* 0-10 : 8< 10%, 8=50%, 9=75%, 10>=99% Tode
Field fur:Int '* Fell : weiß, schwarz, braun

Global Count:Int = 0, Died:Int, Born:Int
Global MaxN:Int = 200, Oldest:Int = 0
Global List:TList = New TList '* Die Liste enthält alle Haselhörnchen

Function Create(mother:TBunny)
'* Neues Haselhörnchen wird geboren...
Local b:TBunny = New Tbunny
b.name = Randname()
b.sex = Rand(0, 1)
b.age = 0
'* Mit bekannter mutter Fell vererben:
If mother = Null Then
b.fur = Rand(0, 2)
Else
b.fur = mother.fur
EndIf
TBunny.Count:+1
TBunny.Born:+1
TBunny.List.AddLast(b) '* Nicht vergessen in der Liste zu speichern...
Print(b.name + " wurde geboren! (" + FurName(b.fur) + ")")
End Function

Method Die()
'* Traurig, aber nötig :(
Print(Self.name + " starb im alter von " + Self.age)
If Self.age > TBunny.Oldest Then TBunny.Oldest = Self.age
TBunny.Died:+1
TBunny.Count:-1
TBunny.List.Remove(Self)
'* Aus der Liste geworfen wird das Haselhörnchen bald vom
'* GC in den Haselhörnchenhimmel gebracht und womöglich
'* wiedergeboren.
End Method

Method Ageing()
'* Altern
Self.age:+1

'* Lebenserwartungen umsetzen:
If Self.age < 8 Then
If (10 > Rand(0, 100)) Then Self.Die()
ElseIf Self.age = 8 Then
If (50 > Rand(0, 100)) Then Self.Die()
ElseIf Self.age = 9 Then
If (75 > Rand(0, 100)) Then Self.Die()
Else
If (99 > Rand(0, 100)) Then Self.Die()
EndIf
End Method

Function Update()
'* Statistik für dieses Jahr nullen...
TBunny.Born = 0
TBunny.Died = 0

'* Altern...
For Local b:TBunny = EachIn TBunny.List
b.Ageing()
Next

'* Gibt es eine Futterknappheit?
If TBunny.Count > TBunny.MaxN Then

'* Hohe Wahrscheinlichkeit zu Sterben...
For Local b:TBunny = EachIn TBunny.List
If (75 > Rand(0, 100)) Then b.Die()
Next

Else
'* Genug Futter!
'* Gibt es ein Männchen mit Geschlechtsreife?
For Local b:TBunny = EachIn TBunny.List
If b.age >= 2 And b.sex = False Then 'Min. 1 Männl.Hase

'* Alle Frauen werden befruchtet!
'* Welches Männchen mit welchem Weibchen zusammen ist,
'* wird nicht genauer definiert.
For Local b2:TBunny = EachIn TBunny.List
If b2.age >= 2 And b2.sex = True Then 'Weibl, geschlechtsreif
Print(b2.name + " bekommt ein Kind!")
TBunny.Create(b2)
EndIf
Next

Exit
EndIf
Next

EndIf
End Function

End Type

Function Randname:String(_Min:Int = 3, _Max:Int = 8)
'* Zufälligen String generieren, nichts besonders kompliziertes.
Local name:String, i:Int, r:Int = Rand(_min, _max)
For i = 0 Until r
name:+Chr(65 + Rand(0, 24)) '* "A"=65, "B"=66 usw. siehe ASCII Zeichentabelle in der Hilfe
Next
Return name
End Function

Function FurName:String(nr:Int)
'* Gibt nur den Namen für eine Fell-nummer.
'* Ginge sicher als Array.
Select nr
Case 0
Return "weiss"
Case 1
Return "schwarz"
Case 2
Return "braun"
Default
Return "Rosa?!"
End Select
End Function
Win10 Prof.(x64)/Ubuntu 16.04|CPU 4x3Ghz (Intel i5-4590S)|RAM 8 GB|GeForce GTX 960
Wie man Fragen richtig stellt || "Es geht nicht" || Video-Tutorial: Sinus & Cosinus
T
HERE IS NO FAIR. THERE IS NO JUSTICE. THERE IS JUST ME. (Death, Discworld)

Neue Antwort erstellen


Übersicht BlitzMax, BlitzMax NG Beginners-Corner

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group