Jäger Pflanzenfresser Fleischfresser Simulation
Übersicht BlitzBasic Codearchiv
HahninatorBetreff: Jäger Pflanzenfresser Fleischfresser Simulation |
Mo, Apr 09, 2007 21:38 Antworten mit Zitat |
|
---|---|---|
Also hier ist mein erstes Programm.... ich bitte um Kritik was ich noch verbessern muss (auch am Prog stil)
Zur erklärung: Grün = Pflanzen Weiß = Pflanzenfresser Blau = Fleischfresser Code: [AUSKLAPPEN] Graphics 800, 600, 24, 2 SetBuffer BackBuffer() SeedRnd MilliSecs() Dim Feld(200,150,11) Global X = 0 Global Y = 0 Global Schritte = 0 ; Eingabe der Pflanzenanzahl Repeat A = GetKey() If A > 47 And A < 58 Then Anzahl_Pflanze = Anzahl_Pflanze + Chr$(A) If Anzahl_Pflanze > 10000 Then Anzahl_Pflanze = 9999 EndIf If A = 8 Then Anzahl_Pflanze = Anzahl_Pflanze / 10 Text 0,0,"Wie viele Pflanzen: " + Anzahl_Pflanze Flip Cls Until KeyHit(28) ; Eingabe der Sammleranzahl Repeat A = GetKey() If A > 47 And A < 58 Then Anzahl_Sammler = Anzahl_Sammler + Chr$(A) If Anzahl_Sammler > 1000 Then Anzahl_Sammler = 999 EndIf If A = 8 Then Anzahl_Sammler = Anzahl_Sammler / 10 Text 0,0,"Wie viele Pflanzenfresser: " + Anzahl_Sammler Flip Cls Until KeyHit(28) ; Eingabe der Jägeranzahl Repeat A = GetKey() If A > 47 And A < 58 Then Anzahl_Jaeger = Anzahl_Jaeger + Chr$(A) If Anzahl_Jaeger > 1000 Then Anzahl_Jaeger = 999 EndIf If A = 8 Then Anzahl_Jaeger = Anzahl_Jaeger / 10 Text 0,0,"Wie viele Fleischfresser: " + Anzahl_Jaeger Flip Cls Until KeyHit(28) ; Pflanze ihren Platz geben For I = 1 To Anzahl_Pflanze .marke X = Rand(200) Y = Rand(150) If Feld(X,Y,0) > 0 Then Goto Marke If Feld(X,Y,0) = 0 Then Feld(X,Y,0) = 1 ; Art (1 = Pflanze; 2 = Sammler; 3 = Jaeger) Feld(X,Y,5) = Rand(5000,10000) ;Lebensdauer (Genetisch) Feld(X,Y,7) = Rand(1000,2500) ; Teilungsdauer ( nach wielanger Zeit teilt es sich Feld(X,Y,1) = Feld(X,Y,5) - Rand(1,Feld(X,Y,5) / 2) ; Lebensdauer Feld(X,Y,3) = Feld(X,Y,7) - Rand(1,Feld(X,Y,7) / 2) ; Teilungsdauer EndIf Next ; den Sammlern ihren Platz geben For I = 1 To Anzahl_Sammler .Marke2 X = Rand(200) Y = Rand(150) If Feld(X,Y,0) > 0 Then Goto Marke2 If Feld(X,Y,0) = 0 Then ; Art (1 = Pflanze; 2 = Sammler; 3 = Jaeger) Feld(X,Y,0) = 2 ; Art (1 = Pflanze; 2 = Sammler; 3 = Jaeger) Feld(X,Y,5) = Rand(2500,5000); Lebensdauer (Genetisch) Feld(X,Y,6) = Rand(750,1500) ; Bis sie verhungert sind (Genetisch Feld(X,Y,7) = Rand(500,1000) ; Teilungsdauer (Genetisch) Feld(X,Y,8) = Rand(200,300) ; bis sie kacken (genetisch) ´kacken = neue Pflanze im letzten schritt Feld(X,Y,1) = Feld(X,Y,1) - Rand(1,Feld(X,Y,5) / 2) ; Lebensdauer Feld(X,Y,2) = 400 ; Hunger Feld(X,Y,3) = Feld(X,Y,3) - Rand(1,Feld(X,Y,7) / 2) ; Teilungsdauer Feld(X,Y,4) = Feld(X,Y,4) - Rand(1,Feld(X,Y,8) / 2) ; Kacken EndIf Next For I = 1 To Anzahl_Jaeger .Marke3 X = Rand(200) Y = Rand(150) If Feld(X,Y,0) > 0 Then Goto Marke3 If Feld(X,Y,0) = 0 Then ; Art (1 = Pflanze; 2 = Sammler; 3 = Jaeger) Feld(X,Y,0) = 3 ; Art (1 = Pflanze; 2 = Sammler; 3 = Jaeger) Feld(X,Y,5) = Rand(2500,4000) ; Lebensdauer (Genetisch) Feld(X,Y,6) = Rand(1000,2000) ; Bis sie verhungert sind (Genetisch Feld(X,Y,7) = Rand(1000,2000) ; Teilungsdauer (Genetisch) Feld(X,Y,8) = Rand(200,300) ; bis sie kacken (genetisch) ´kacken = neue Pflanze im letzten schritt Feld(X,Y,1) = Feld(X,Y,1) - Rand(1,Feld(X,Y,5) / 2) ; Lebensdauer Feld(X,Y,2) = 600; Hunger Feld(X,Y,3) = Feld(X,Y,3) - Rand(1,Feld(X,Y,7) / 2) ; Teilungsdauer Feld(X,Y,4) = Feld(X,Y,4) - Rand(1,Feld(X,Y,8) / 2) ; Kacken EndIf Next Function bewegen(I,J) If Feld(I,J,2) < Feld(I,J,6)/2 And I + 1 < 200 And I - 1 > 0 And J + 1 < 150 And J - 1 > 0 Then ; Erste Abfrage nach links oben If Feld(I - 1,J - 1,0) = Feld(I,J,0) - 1 Then Bew = 1 Feld(I,J,2) = Feld(I,J,2) + Rand(150,250) If Feld(I,J,2) > Feld(I,J,6) Then Feld(I,J,2) = Feld(I,J,6) Feld(I - 1, J - 1,0) = 0 EndIf ; Abfrage nach mitte oben If Feld(I,J - 1,0) = Feld(I,J,0) - 1 Then Bew = 2 Feld(I,J,2) = Feld(I,J,2) + Rand(150,250) If Feld(I,J,2) > Feld(I,J,6) Then Feld(I,J,2) = Feld(I,J,6) Feld(I, J - 1,0) = 0 EndIf ; Abfrage nach rechts oben If Feld(I + 1,J - 1,0) = Feld(I,J,0) - 1 Then Bew = 3 Feld(I,J,2) = Feld(I,J,2) + Rand(150,250) If Feld(I,J,2) > Feld(I,J,6) Then Feld(I,J,2) = Feld(I,J,6) Feld(I + 1, J - 1,0) = 0 EndIf ; Abfrage nach Links Mitte If Feld(I - 1,J,0) = Feld(I,J,0) - 1 Then Bew = 4 Feld(I,J,2) = Feld(I,J,2) + Rand(150,250) If Feld(I,J,2) > Feld(I,J,6) Then Feld(I,J,2) = Feld(I,J,6) Feld(I - 1, J + 1,0) = 0 EndIf ; Abfrage nach Rechts Mitte If Feld(I,J + 1,0) = Feld(I,J,0) - 1 Then Bew = 5 Feld(I,J,2) = Feld(I,J,2) + Rand(150,250) If Feld(I,J,2) > Feld(I,J,6) Then Feld(I,J,2) = Feld(I,J,6) Feld(I, J + 1,0) = 0 EndIf ; Abfrage nach Links unten If Feld(I + 1,J - 1,0) = Feld(I,J,0) - 1 Then Bew = 6 Feld(I,J,2) = Feld(I,J,2) + Rand(150,250) If Feld(I,J,2) > Feld(I,J,6) Then Feld(I,J,2) = Feld(I,J,6) Feld(I + 1, J - 1,0) = 0 EndIf ; Abfrage nach mitte unten If Feld(I + 1,J, 0) = Feld(I,J,0) - 1 Then Bew = 7 Feld(I,J,2) = Feld(I,J,2) + Rand(150,250) If Feld(I,J,2) > Feld(I,J,6) Then Feld(I,J,2) = Feld(I,J,6) Feld(I + 1, J, 0) = 0 EndIf ; Abfrage nach Rechts unten If Feld(I + 1,J + 1,0) = Feld(I,J,0) - 1 Then Bew = 8 Feld(I,J,2) = Feld(I,J,2) + Rand(150,250) If Feld(I,J,2) > Feld(I,J,6) Then Feld(I,J,2) = Feld(I,J,6) Feld(I + 1, J + 1,0) = 0 EndIf EndIf If Feld(I,J,2) => Feld(I,J,6)/2 Or Bew = 0 Then Bew = Rand(1,8) EndIf If Bew = 1 Then X = -1 : Y = -1 If Bew = 2 Then X = 0 : Y = -1 If Bew = 3 Then X = 1 : Y = -1 If Bew = 4 Then X = -1 : Y = 0 If Bew = 5 Then X = 1 : Y = 0 If Bew = 6 Then X = -1 : Y = 1 If Bew = 7 Then X = 0 : Y = 1 If Bew = 8 Then X = 1 : Y = 1 If I + X < 200 And I + X > 0 And J + Y < 150 And J + Y > 0 Then If Feld(I + X,J + Y,0) = 0 And Schritte > Feld(I,J,11) Then Feld(I + X, J + Y, 0) = Feld(I,J,0) Feld(I + X, J + Y, 1) = Feld(I,J,1) Feld(I + X, J + Y, 2) = Feld(I,J,2) Feld(I + X, J + Y, 3) = Feld(I,J,3) Feld(I + X, J + Y, 4) = Feld(I,J,4) Feld(I + X, J + Y, 5) = Feld(I,J,5) Feld(I + X, J + Y, 6) = Feld(I,J,6) Feld(I + X, J + Y, 7) = Feld(I,J,7) Feld(I + X, J + Y, 8) = Feld(I,J,8) Feld(I + X, J + Y, 9) = Feld(I,J,9) Feld(I + X, J + Y,10) = Feld(I,J,10) Feld(I + X, J + Y,11) = feld(I,J,11) + 4 Feld(I,J,0) = 0 EndIf EndIf Bew = 0 End Function Function Teilung(I,J) Feld(I,J,3) = Feld(I,J,3) - 1 If Feld(I,J,3) = 0 Then Richtung = Rand(1,8) If Richtung = 1 Then X = -1 : Y = -1 If Richtung = 2 Then X = -1 : Y = 0 If Richtung = 3 Then X = -1 : Y = 1 If Richtung = 4 Then X = 0 : Y = -1 If Richtung = 5 Then X = 0 : Y = 1 If Richtung = 6 Then X = 1 : Y = -1 If Richtung = 7 Then X = 1 : Y = 0 If Richtung = 8 Then X = 1 : Y = 1 If X + I > 0 And X + I < 200 And Y + J > 0 And Y + J < 150 Then If Feld(I + X, J + Y,0) = 0 Then FEld(I + X, J + Y,0) = Feld(I,J,0) FEld(I + X, J + Y,1) = Feld(I,J,5) FEld(I + X, J + Y,2) = Feld(I,J,6) FEld(I + X, J + Y,3) = Feld(I,J,7) FEld(I + X, J + Y,4) = Feld(I,J,8) FEld(I + X, J + Y,5) = Feld(I,J,5) + Rand(-5, 5) FEld(I + X, J + Y,6) = Feld(I,J,6) + Rand(-5, 5) FEld(I + X, J + Y,7) = Feld(I,J,7) + Rand(-5, 5) FEld(I + X, J + Y,8) = Feld(I,J,8) + Rand(-5, 5) Feld(I,J,3) = Feld(I,J,7) EndIf EndIf EndIf End Function Function Leben(I,J); Auch Hunger gleich mit rein Feld(I,J,1) = Feld(I,J,1) - 1 If Feld(I,J,1) = 0 Then Feld(I,J,0) = 0 If Feld(I,J,0) > 1 Then Feld(I,J,2) = Feld(I,J,2) - 1 If Feld(I,J,2) < 1 Then Feld(I,J,0) = 0 EndIf End Function Repeat Schritte = Schritte + 1 For I = 1 To 200 For J = 1 To 150 If Feld(I,J,0) = 1 Then Teilung(I,J) Leben(I,J) Color 0,255,0 Rect I * 4, J * 4, 3, 3 EndIf If Feld(I,J,0) = 2 Then Teilung(I,J) Leben(I,J) Bewegen(I,J) Color 255,255,255 Rect I * 4, J * 4, 3, 3 EndIf If Feld(I,J,0) = 3 Then Teilung(I,J) Leben(I,J) Bewegen(I,J) Color 0,0,255 Rect I * 4, J * 4, 3, 3 EndIf Next Next Flip Cls Until KeyHit(1) |
||
Christoph |
Mo, Apr 09, 2007 21:48 Antworten mit Zitat |
|
---|---|---|
Hmmm, bedarf wie ich finde noch einiges an Verbesserungen.
Die Pflanzenfresser irren wie wild umher, selbst wenn eine Pflanze in ihrer Nähe ist. Nach kurzer Zeit sind sie ausgestorben. Sag mal ehrlich: Wenn du hungrig bist, rennst du dann auch wie wild im Kreis rum? Nee, dann schlägst du (wenn du intelligent bist ) irgendeine X-beliebige Route ein und hoffst auf Nahrung. Für die Fleischfresser gilt das gleiche. Zu den Planzen: Wäre nett, wenn sie ab und zu wachsen würden. |
||
gigiBetreff: naja |
Mo, Apr 09, 2007 21:52 Antworten mit Zitat |
|
---|---|---|
jop so naja....du brauchst unbedingt eine KI ansonten läuft das Ganze nur so 30 Sekunden,dann sind die Pflanzen in der Übermacht(und alleine).
du könntest denen ja sagen das wenn in der Nähe ein Bush ist sie sich dahin bewegen sollen und aufpassen das sie nicht gefressen werden. genauso für die fleischfresser. p.s.:bist du vegitarier? edit:schreibfehler(ich meine mit bush nicht bush sondern Busch:-D |
||
Anfänger Tut von mir:
http://www.blitzforum.de/forum...hp?t=26185 |
- Zuletzt bearbeitet von gigi am Mo, Apr 09, 2007 21:53, insgesamt einmal bearbeitet
StepTiger |
Mo, Apr 09, 2007 21:53 Antworten mit Zitat |
|
---|---|---|
Also für eins deiner ersten Programme ist das schonmal nicht schlecht!
Zum Codingstil: Es eignet sich sehr, mit dem Tabulator einzurücken. Ich finde es übersichtlicher und die Standard IDE erkennt es auch so Das ganze ist noch ziemlich langsam, vielleicht kannst du da noch was machen |
||
Noch gestern standen wir am Abgrund, doch heute sind wir schon einen Schritt weiter.
Computer: AMD Sempron 3000+; ATI Radeon 9800 Pro; 512 MB DDR RAM 400Mhz; Asus E7N8X-E Deluxe; Samsung 200GB HD 5.4ns acces t Gewinner: BP Code Compo #2 Π=3.141592653589793238...<--- und das aus dem kopf Seit der Earthlings-Diskussion überzeugter Fleisch(fr)esser. |
ErbinBetreff: Weiter so ! |
Do, Apr 12, 2007 9:00 Antworten mit Zitat |
|
---|---|---|
Ich find's für den Anfang nicht so schlecht.... | ||
KabelbinderSieger des WM-Contest 2006 |
Sa, Apr 14, 2007 12:45 Antworten mit Zitat |
|
---|---|---|
Jo, gar nicht so schlecht. Ich find so Simulationen irgendwie immer ganz interessant.
Sowas ähnliches hab ich auch mal gemacht, als ich meine Facharbeit schreiben musste. Das war in Erdkunde über den Viktoriasee und ich hab ein Programm geschrieben, dass die Fischbestände darin simuliert . Ist vielleicht eher pseudo-wissenschaftlich aber mein Betreuungs fand das gut. Vielleicht wird mir das ja als besonderer Einsatz angerechnet . Ich postes einfach mal Code: [AUSKLAPPEN] AppTitle "Jäger-Beute"
Graphics 840,370,16,2 SeedRnd MilliSecs() Const max = 2000 Const pseudospeed = 200 Const b = 34 Const h = 36 Global bnum,nnum,mult,uml,mon,bru,bor,nils,stag#,arten Dim bunt#(max,4) Dim nil#(max,5) Function create(x#,y#,a) Select a Case 1 bunt(bnum,0)=Rnd(0,360) bunt(bnum,1)=x bunt(bnum,2)=y bunt(bnum,3)=1 bunt(bnum,4)=40000 If bnum = max Then bnum = 0 Else bnum = bnum + 1 EndIf Case 2 nil(nnum,0)=Rnd(0,360) nil(nnum,1)=x nil(nnum,2)=y nil(nnum,3)=1 nil(nnum,4)=60000 nil(nnum,5)=2000 If nnum = max Then nnum = 0 Else nnum = nnum + 1 EndIf End Select End Function Function swim() mult = 0 nils = 0 For i = 0 To max If bunt(i,3)=1 Then bunt(i,1)=bunt(i,1)+Cos(bunt(i,0))*0.001 bunt(i,2)=bunt(i,2)+Sin(bunt(i,0))*0.001 bunt(i,0)=bunt(i,0)+Rnd(-0.1,0.1) bunt(i,4)=bunt(i,4)-0.01 If bunt(i,4)<0 Then bunt(i,3)=0 If Not RectsOverlap(bunt(i,1),bunt(i,2),1,1,0,0,b,h) Then bunt(i,0)=(ATan2(bunt(i,2)-100,bunt(i,1)-100)+180) Mod 360 EndIf ;Menge der Buntbarsche mult = mult + 1 EndIf If nil(i,3)=1 Then ;Menge der Nilbarsche nils = nils + 1 nil(i,1)=nil(i,1)+Cos(nil(i,0))*0.04*pseudospeed nil(i,2)=nil(i,2)+Sin(nil(i,0))*0.04*pseudospeed nil(i,0)=nil(i,0)+Rnd(-0.1,0.1)*pseudospeed If Not RectsOverlap(nil(i,1),nil(i,2),1,1,0,0,b,h) Then nil(i,0)=ATan2(nil(i,2)-100,nil(i,1)-100) EndIf ;Lebensdauer nil(i,4)=nil(i,4)-0.01*pseudospeed If nil(i,4)<0 Then nil(i,3)=0 ;Hunger nil(i,5)=nil(i,5)-1*pseudospeed If nil(i,5)<Rnd(-20,0) Then nil(i,3)=0 ;fressen For j = 0 To max If bunt(j,3)=1 And nil(i,3)=1 Then If Int(bunt(j,1))=Int(nil(i,1)) And Int(bunt(j,2))=Int(nil(i,2)) Then bunt(j,3)=0 nil(i,5)=nil(i,5)+80*pseudospeed EndIf EndIf Next EndIf Next End Function mon = 0 bur = 0 uml = 0 For i = 0 To max create(Rnd(0,b),Rnd(0,h),1) Next For i = 0 To 1 create(Rnd(0,3),Rnd(0,3),2) Next Color 255,255,255 Rect 20,350,800,1 For f# = 1 To 21 Rect f*3.6*10+20,348,1,7 Text f*3.6*10+20,360,Int(f)*10,1,1 Next For f# = 1 To 21 Rect (f-0.5)*3.6*10+20,349,1,3 Next Text 820,364,"Jahr",1,1 Repeat ft = MilliSecs() swim() uml = uml + 1*pseudospeed If uml >= 1000 Then mon = mon + 1 bru = bru + 1 uml = 0 WritePixel stag+20,mult/-10+350,255*$100 WritePixel stag+20,nils/-10+350,255*$10000 stag = stag + 0.3 EndIf If bru=2 Then For m = 1 To mult Step 8 create(Rnd(0,b),Rnd(0,h),1) Next For m = 1 To nils Step 10 create(Rnd(0,b),Rnd(0,h),2) Next bru = 0 EndIf Color 0,0,0 Rect 0,0,300,52 Color 255,255,255 Text 0,0,Str$(mon/12)+". Jahr" ;Text 0,10,Str$(Float(uml)*0.03)+". Tag" Color 0,255,0 Text 0,30,"Buntbarsche : "+Str$(mult) Color 255,0,0 Text 0,40,"Nilbarsche : "+Str$(nils) Color 255,255,255 If KeyHit(57) Then FlushKeys() WaitKey() EndIf Until KeyHit(1) End Die Facharbeit bekomm ich warscheinlich gleich nach den Ostrferien zurück |
||
<Wing Avenger Download> ◊◊◊ <Macrophage Download> |
Rongo Matane |
So, Mai 20, 2007 0:16 Antworten mit Zitat |
|
---|---|---|
Christoph hat Folgendes geschrieben: Zu den Planzen: Wäre nett, wenn sie ab und zu wachsen würden.
machen sie doch ^^ Feld(X,Y,8) = Rand(200,300) ; bis sie kacken (genetisch) ´kacken = neue Pflanze im letzten schritt Stellt einfach mal viele pflanzen (1000) ein, dann leben die auch länger. Natürlich wirds dann ziemlich langsam^^ Ansonsten find ich das fürs erste Programm ziemlich gut. Aufgefallen ist mir besonders die Eingabe der Anzahl der Pflanzen usw. per Getkey und dann String addieren, anstatt per Input. Hast du vorher schon mit was anderem programmiert? |
||
Übersicht BlitzBasic Codearchiv
Powered by phpBB © 2001 - 2006, phpBB Group