Das Große Krabbeln
Übersicht

![]() |
SmilyBetreff: Das Große Krabbeln |
![]() Antworten mit Zitat ![]() |
---|---|---|
Heyho,
ich hatte mal wieder etwas Lange weile, und wiedermal ist dabei etwas entstanden ^^ Diesmal ist es eine Ameisen Simulation, in der zwei Ameisenstaaten Wachsen und sich bekäpfen. Kurze Infos: Es gibt 3 Ameisen-Klassen: Die Königen (Q), sie legt Eier Die Arbeiter (W), sie suchen Futter, verarbeiten es zu für andere Fressbares Futter und bringen es ins lager (Bildschirmrand) Die Kämpfer (X), sie Patrolieren an der Grenze zum anderen Ameisenstaat entlang und greifen feindliche Ameisen in der nähe an. Alles fängt mit 1 königin und eine Pflanze pro seite an. Die königin kann eier Legen. Die Pflanze verbreitet sich in der Zeit. Arbeiter-ameisen Suchen die Pflanzen und verarbeiten sie zu Ameisen-Futter, welches sie dann ins Lager bringen. Jede Ameise braucht futter. Dabei gibt es für die Ameisen einen Hunger-wert. Wenn dieser Wert eine bestimmte Grenze überschreitet, sucht die Ameise Was zu Futtern. Wenn sie nicht Rechtzeitig was findet verliert sie Energie. Natürlich kann sie auch Während dem Kämpfen energie verlieren. Wobei allerdings nur die Kämpfer-Ameisen sich wirklich auf den Gegner Stürzen. Die Anderen Ameisen wehren sich zwar, aber sie Machen mit ihrer Arbeit weiter. Wenn die Ameise Satt ist, regeneriert sie ihre Energie wieder. Update: Man kann jetzt direkt in den Spielverlauf eingreifen. Mit linksklick kann man eine Ameise erstellen (Unten den Typ auswählen) mit Rechtsklick ein Futterstück. Mit Druck auf die Leertaste kann man einen Krieg starten Update2: Kleine geschwindigkeits-optimierung ![]() Hier der Code: [AUSKLAPPEN] Type ant
Field x Field y Field energy Field team Field class Field var1 Field zx Field zy Field hungry Field searchfood End Type Type egg field x Field y Field team Field e End type Type food Field x Field y Field t End type ;classes: ;0=queen ;1=worker ;2=warrior sx = 800 sy = 500 Graphics 800,600,16,2 Dim maxenergy(2) ; Energie der einzelnen Klassen: maxenergy(0) = 1000 maxenergy(1) = 100 maxenergy(2) = 500 ant.ant = New ant ant\x = 100 ant\y = sy/2 ant\zx = 100 ant\zy = sy/2 ant\energy = 1000 ant\team = 0 ant\class = 0 ant.ant = New ant ant\x = sx-100 ant\y = sy/2 ant\zx = sx-100 ant\zy = sy/2 ant\energy = 1000 ant\team = 1 ant\class = 0 food.food = New food food\x = 200 food\y = sy/2 food.food = New food food\x = sx-200 food\y = sy/2 SeedRnd(millisecs()) Dim image(1,2) AutoMidHandle(1) For t = 0 To 1 For c = 0 To 2 image(t,c) = CreateImage(16,16) SetBuffer ImageBuffer(image(t,c)) Select t Case 0: Color 255,0,0 Case 1: Color 0,255,0 End Select Rect 1,1,15,15,0 Select c Case 0 Text 8,8,"Q",1,1 Case 1 Text 8,8,"W",1,1 Case 2 Text 8,8,"X",1,1 End select next Next SetBuffer BackBuffer() ftimer = CreateTimer(60) Repeat klick = MouseHit(1) If KeyHit(57) invasion = 1-invasion ; If invasion ; For ant.ant = Each ant ; If ant\team = 1 ; ant\zx = sx/4 ; ant\zy = sy/2 ; End if ; next ; End if ; For food.food = Each food If (Not Rand(0,100)) And food\t = 0 makefood(rand(food\x-5,food\x+5),rand(food\y-5,food\y+5)) End If Next For ant.ant = Each ant nextant = getnextant(handle(ant),1-ant\team,10) ant2.ant = Object.ant(nextant) If Handle(ant2) Select ant\class Case 0: ant2\energy = ant2\energy-15 Case 1: If Not Rand(0,2) ant2\energy = ant2\energy-3 Case 2: If Rand(0,2) ant2\energy = ant2\energy-7 End select End if If ant\hungry > 2000 Then ant\searchfood=1 If ant\hungry > 2200 Then ant\energy = ant\energy-1 If ant\searchfood id = getnextfood(handle(ant),1,1000) If id > 1 food.food = Object.food(id) ant\zx = food\x ant\zy = food\y If Sqr((food\x-ant\x)^2 + (food\y-ant\y)^2) < 10 Delete food.food ant\hungry = ant\hungry - 1000 If ant\hungry < 0 Then ant\searchfood = 0 End if End if Else Select Ant\class Case 0 ant\var1 = ant\var1 + 1 If ant\var1 > 100 If makeegg(ant\x,ant\y, ant\team) ant\var1=0 End If If ant\x = ant\zx And ant\y = ant\zy ant\zx = Rand(0,sx/2) If ant\team=1 Then ant\zx = ant\zx + sx/2 ant\zy = Rand(0,sy) End if Case 1 If Not ant\var1 id = getnextfood(handle(ant),0) food.food = Object.food(id) If Handle(food.food) ant\zx = food\x ant\zy = food\y ant\var1 = id End If Else food.food = Object.food(ant\var1) If Handle(food) If ant\x = ant\zx And ant\y = ant\zy If food\t = 0 food\t = 1 If ant\team=0 ant\zx = Rand(0,50) Else ant\zx = Rand(sx-50,sx) ant\zy = Rand(0,sy) Else ant\var1=0 End If End If If food\t = 1 If Sqr((food\x-ant\x)^2 + (food\y-ant\y)^2) > 10 ant\var1=0 Else food\x = ant\x food\y = ant\y End if Else ant\var1=0 End if End if Case 2 nextant = getnextant(handle(ant),1-ant\team,30+invasion*50) ant2.ant = Object.ant(nextant) If Handle(ant2) ant\zx = ant2\x ant\zy = ant2\y If ant\zx = ant\x And ant\zy = ant\y ant\x = ant\x + Rand(-3,3) ant\y = ant\Y + Rand(-3,3) End if Else If ant\x =ant\zx And ant\y = ant\zy ant\zy = Rand(0,sy) If invasion If ant\team=0 ant\zx = Rand(sx/2,sx) Else ant\zx = Rand(0,sx/2) Else If ant\team=0 ant\zx = sx/2-rand(0,50) Else ant\zx = sx/2+rand(0,50) End if End if End If End Select End if If ant\zx < 0 Then ant\zx = 0 If ant\zy < 0 Then ant\zy = 0 If ant\zx > sx Then ant\zx = sx If ant\zy > sy Then ant\zy = sy If (ant\zx <> ant\x) Or (ant\zy <> ant\y) ri = ATan2(ant\zy-ant\y,ant\zx-ant\x) ant\x = ant\x + Cos(ri) ant\y = ant\y + Sin(ri) End if ant\hungry = ant\hungry + 1 If ant\hungry < 1000 And ant\energy < maxenergy(ant\class) ant\energy = ant\energy + 1 If ant\energy <= 0 Then Delete ant.ant Next For egg.egg = Each egg egg\e = egg\e - 1 If egg\e = 0 Then ant.ant = New ant ant\team = egg\team ant\class = Rand(1,2) ant\x = egg\x ant\y = egg\y ant\zx = egg\x ant\zy = egg\y ant\energy=maxenergy(ant\class) Delete egg.egg End if Next If klick If MouseX() < sx And MouseY() < sy ant.ant = New ant ant\team = selx ant\class = sely ant\zx = MouseX() ant\zy = MouseY() ant\x = MouseX() ant\y = MouseY() ant\energy = maxenergy(sely) End if End if If MouseHit(2) food.food = New food food\x = MouseX() food\y = MouseY() End if Cls Rect 0,0,sx,sy,0 Line sx/2,0,sx/2,sy For ant.ant = Each ant DrawBlock image(ant\team, ant\class), ant\x,ant\y Text ant\x+5,ant\y, ant\energy,0,1 Next Color 255,255,0 LockBuffer BackBuffer() For food.food = Each food If food\t = 0 Then C = $FFFFFF00 Else c = $FF7070FF For xdif = -1 To 1 For ydif = -1 To 1 WritePixelFast food\x+xdif,food\y+ydif, c next next Next UnlockBuffer BackBuffer() Color 255,255,255 For egg.egg = Each egg Oval egg\x-4,egg\y-6,8,12,1 Next For y = 0 To 2 For x = 0 To 1 If selx = x And sely = y Oval 20+x*23,510+y*23,20,20 End if DrawBlock image(x,y),30 + x*23,520 + y*23 If ImageRectOverlap(image(x,y),30+x*23,520+y*23,mousex(),mousey(),1,1) And klick selx = x sely = y End if Next Next Text 0,0, WaitTimer(ftimer) Flip Until KeyHit(1) Function makeegg(x,y,t) For egg.egg = Each egg If RectsOverlap(egg\x-4, egg\y-6, 8, 12,x-4,y-4,8,12) Return 0 Next egg.egg = New egg egg\x = x egg\y = y egg\team = t egg\e = 500 Return 1 End Function Function makefood(x,y) For food.food = Each food If RectsOverlap(food\x-2,food\y-2,4,4,x-2,y-2,4,4) Return 0 Next food.food = New food food\x = x food\y = y Return 1 End Function Function getnextfood(id,t,mine=400) ant.ant = Object.ant(id) For food.food = Each food If food\t = t e = sqr((food\x-ant\x)^2 + (food\y-ant\y)^2) If e < mine Then id = Handle(food): mine = e: ret=1 End if Next If ret Return id Else Return 0 End Function Function getnextant(id, t, mine=20) ant.ant = Object.ant(id) For ant2.ant = Each ant If ant2\team = t And (Handle(ant2) <> id) e = sqr((ant2\x-ant\x)^2 + (ant2\y-ant\y)^2) If e < mine Then id = Handle(ant2): mine = e: ret=1 End if Next If ret Return id Else Return 0 End Function Gruß, Smily0412 |
||
![]() |
Smily |
![]() Antworten mit Zitat ![]() |
---|---|---|
Keine Ressonanz? oO
ist es so schlecht oder seid ihr Sprachlos? ^^ |
||
Lesestoff:
gegen Softwarepatente | Netzzensur | brain.exe | Unabhängigkeitserklärung des Internets "Wir müssen die Rechte der Andersdenkenden selbst dann beachten, wenn sie Idioten oder schädlich sind. Wir müssen aufpassen. Wachsamkeit ist der Preis der Freiheit --- Keine Zensur!" stummi.org |
![]() |
aMulSieger des Minimalist Compo 01/13 |
![]() Antworten mit Zitat ![]() |
---|---|---|
Schon ganz nett, bedarf aber imho noch einiger Überarbeitung. Es wird einfach zu schnell langweilig.
Oh, gerade als ich das hier schreib ist es mir mit einem MAV abgeschmiert(nach ca. 3 Minuten) ![]() Mach mal weiter damit, ist immer interessant wie sich sowas entwickelt ![]() |
||
Panic Pong - ultimate action mashup of Pong and Breakout <= aktives Spiele-Projekt, Downloads mit vielen bunten Farben!
advASCIIdraw - the advanced ASCII art program <= aktives nicht-Spiele-Projekt, must-have für ASCII/roguelike/dungeon-crawler fans! Alter BB-Kram: ThroughTheAsteroidBelt - mit Quelltext! | RGB-Palette in 32²-Textur / Farbige Beleuchtung mit Dot3 | Stereoskopie in Blitz3D | Teleport-Animation Screensaver |
Stevenehemals "Steven04" |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Sieht echt ganz nett aus, aber wie schon gesagt, es wird schnell langweilig und es frisst zu viel Leistung.
Aber ein interessantes Code Beispiel! |
||
![]() |
Smily |
![]() Antworten mit Zitat ![]() |
---|---|---|
Hmm hättet ihr eine idee, was ich der Simulation noch hinzufügen könnte? | ||
Lesestoff:
gegen Softwarepatente | Netzzensur | brain.exe | Unabhängigkeitserklärung des Internets "Wir müssen die Rechte der Andersdenkenden selbst dann beachten, wenn sie Idioten oder schädlich sind. Wir müssen aufpassen. Wachsamkeit ist der Preis der Freiheit --- Keine Zensur!" stummi.org |
![]() |
ToeB |
![]() Antworten mit Zitat ![]() |
---|---|---|
Nö, aba das kann man sicher prima zu einem Strategiespiel entwikeln ( Jeder spieler ha ein AmeisenVolk, man setzt abwechelnt, oda halt per Lan oda Interne ![]() |
||
Religiöse Kriege sind Streitigkeiten erwachsener Männer darum, wer den besten imaginären Freund hat.
Race-Project - Das Rennspiel der etwas anderen Art SimpleUDP3.0 - Neuste Version der Netzwerk-Bibliothek Vielen Dank an dieser Stelle nochmal an Pummelie, welcher mir einen Teil seines VServers für das Betreiben meines Masterservers zur verfügung stellt! |
![]() |
Smily |
![]() Antworten mit Zitat ![]() |
---|---|---|
joa wär eine Idee ^^
mir ist auch gerade dei Idee gekommen, dass es vlt sowas wie Faulenzer-Ameisen gibt, welche nihts tun und nur Futter holen ^^ Aber an eine Multiplayer-Version könnt ich mich ja mal wirklich versuchen ^^ Gruß, Smily0412 |
||
Lesestoff:
gegen Softwarepatente | Netzzensur | brain.exe | Unabhängigkeitserklärung des Internets "Wir müssen die Rechte der Andersdenkenden selbst dann beachten, wenn sie Idioten oder schädlich sind. Wir müssen aufpassen. Wachsamkeit ist der Preis der Freiheit --- Keine Zensur!" stummi.org |
![]() |
Thorsten |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ich finds sehr geil, beschäftige mich schon eine Zeit damit.
Allerdings kommt bei mir regelmäßig ne MAV reingeschossen ![]() Achja : Ich finds sehr witzig dass die Sammler auch gerne mal zur anderen Seite gehen um da Futter zu kriegen; stattdessen holen sie sich den Tod ![]() mfG |
||
![]() |
Smily |
![]() Antworten mit Zitat ![]() |
---|---|---|
Zur anderen Seite gehen sie eigentlich nur, wenn sie bei sich kein Futter mehr haben.
Ich vermute mal, das MAV kommt, wenn ein Futterstück ausserhalb des Bildschirmes gezeichnet werden soll, da werd ich mich mal bei gelegenheit wieder ransetzen |
||
Lesestoff:
gegen Softwarepatente | Netzzensur | brain.exe | Unabhängigkeitserklärung des Internets "Wir müssen die Rechte der Andersdenkenden selbst dann beachten, wenn sie Idioten oder schädlich sind. Wir müssen aufpassen. Wachsamkeit ist der Preis der Freiheit --- Keine Zensur!" stummi.org |
![]() |
Thorsten |
![]() Antworten mit Zitat ![]() |
---|---|---|
Meine etwas veränderte und (schnellere) Version ohne Mav.
Allerdings werden aus einem mir ungekannten Grund keine Eier gezeichnet. Wie auch immer, ich habe einige Werte nach meine Wünschen abgeändert, werde vielleicht auch noch mal einfach oben Variablen reinschmeißen damit es jeder ändern kann... Code: [AUSKLAPPEN] Type ant
Field x Field y Field energy Field team Field class Field var1 Field zx Field zy Field hungry Field searchfood End Type Type egg Field x Field y Field team Field e End Type Type food Field x Field y Field t End Type ;classes: ;0=queen ;1=worker ;2=warrior Global sx = 800 Global sy = 500 Graphics 800,600,16,2 Dim maxenergy(2) ; Energie der einzelnen Klassen: maxenergy(0) = 1000 maxenergy(1) = 100 maxenergy(2) = 500 ant.ant = New ant ant\x = 100 ant\y = sy/2 ant\zx = 100 ant\zy = sy/2 ant\energy = 1000 ant\team = 0 ant\class = 0 ant.ant = New ant ant\x = sx-100 ant\y = sy/2 ant\zx = sx-100 ant\zy = sy/2 ant\energy = 1000 ant\team = 1 ant\class = 0 food.food = New food food\x = 200 food\y = sy/2 food.food = New food food\x = sx-200 food\y = sy/2 SeedRnd MilliSecs() font=LoadFont("Arial",11) SetFont Font Dim image(1,2) AutoMidHandle(1) For t = 0 To 1 For c = 0 To 2 image(t,c) = CreateImage(8,8) SetBuffer ImageBuffer(image(t,c)) Select t Case 0: Color 255,0,0 Case 1: Color 0,255,0 End Select ;Rect 1,1,15,15,0 Select c Case 0 Text 4,4,"Q",1,1 Case 1 Text 4,4,"W",1,1 Case 2 Text 4,4,"X",1,1 End Select Next Next SetBuffer BackBuffer() ftimer = CreateTimer(60) start_time=MilliSecs() Repeat klick = MouseHit(1) If KeyHit(57) invasion = 1-invasion ; If invasion ; For ant.ant = Each ant ; If ant\team = 1 ; ant\zx = sx/4 ; ant\zy = sy/2 ; End if ; next ; End if ; For food.food = Each food If (Not Rand(0,((MilliSecs()-start_time)/1000)*150)) And food\t = 0 makefood(Rand(food\x-5,food\x+5),Rand(food\y-5,food\y+5)) End If Next For ant.ant = Each ant nextant = getnextant(Handle(ant),1-ant\team,10) ant2.ant = Object.ant(nextant) If Handle(ant2) Select ant\class Case 0: ant2\energy = ant2\energy-15 Case 1: If Not Rand(0,2) ant2\energy = ant2\energy-3 Case 2: If Rand(0,2) ant2\energy = ant2\energy-7 End Select End If If ant\hungry > 2000 Then ant\searchfood=1 If ant\hungry > 2200 Then ant\energy = ant\energy-1 If ant\searchfood id = getnextfood(Handle(ant),1,1000) If id > 1 food.food = Object.food(id) ant\zx = food\x ant\zy = food\y If Sqr((food\x-ant\x)^2 + (food\y-ant\y)^2) < 10 Delete food.food ant\hungry = ant\hungry - 1000 If ant\hungry < 0 Then ant\searchfood = 0 End If End If Else Select Ant\class Case 0 ant\var1 = ant\var1 + 1 If ant\var1 > 100 If makeegg(ant\x,ant\y, ant\team) ant\var1=0 End If If ant\x = ant\zx And ant\y = ant\zy ant\zx = Rand(0,sx/2) If ant\team=1 Then ant\zx = ant\zx + sx/2 ant\zy = Rand(0,sy) End If Case 1 If Not ant\var1 id = getnextfood(Handle(ant),0) food.food = Object.food(id) If Handle(food.food) ant\zx = food\x ant\zy = food\y ant\var1 = id End If Else food.food = Object.food(ant\var1) If Handle(food) If ant\x = ant\zx And ant\y = ant\zy If food\t = 0 food\t = 1 If ant\team=0 ant\zx = Rand(0,50) Else ant\zx = Rand(sx-50,sx) ant\zy = Rand(0,sy) Else ant\var1=0 End If End If If food\t = 1 If Sqr((food\x-ant\x)^2 + (food\y-ant\y)^2) > 10 ant\var1=0 Else food\x = ant\x food\y = ant\y End If Else ant\var1=0 End If End If Case 2 nextant = getnextant(Handle(ant),1-ant\team,30+invasion*50) ant2.ant = Object.ant(nextant) If Handle(ant2) ant\zx = ant2\x ant\zy = ant2\y If ant\zx = ant\x And ant\zy = ant\y ant\x = ant\x + Rand(-3,3) ant\y = ant\Y + Rand(-3,3) End If Else If ant\x =ant\zx And ant\y = ant\zy ant\zy = Rand(0,sy) If invasion If ant\team=0 ant\zx = Rand(sx/2,sx) Else ant\zx = Rand(0,sx/2) Else If ant\team=0 ant\zx = sx/2-Rand(0,50) Else ant\zx = sx/2+Rand(0,50) End If End If End If End Select End If If ant\zx < 0 Then ant\zx = 0 If ant\zy < 0 Then ant\zy = 0 If ant\zx > sx Then ant\zx = sx If ant\zy > sy Then ant\zy = sy If (ant\zx <> ant\x) Or (ant\zy <> ant\y) ri = ATan2(ant\zy-ant\y,ant\zx-ant\x) ant\x = ant\x + Cos(ri) ant\y = ant\y + Sin(ri) End If ant\hungry = ant\hungry + 1 If ant\hungry < 1000 And ant\energy < maxenergy(ant\class) ant\energy = ant\energy + 1 If ant\energy <= 0 Then Delete ant.ant Next For egg.egg = Each egg egg\e = egg\e - 1 If egg\e = 0 Then ant.ant = New ant ant\team = egg\team ant\class = Rand(1,2) ant\x = egg\x ant\y = egg\y ant\zx = egg\x ant\zy = egg\y ant\energy=maxenergy(ant\class) Delete egg.egg End If Next If klick If MouseX() < sx And MouseY() < sy ant.ant = New ant ant\team = selx ant\class = sely ant\zx = MouseX() ant\zy = MouseY() ant\x = MouseX() ant\y = MouseY() ant\energy = maxenergy(sely) End If End If If MouseHit(2) food.food = New food food\x = MouseX() food\y = MouseY() End If Cls LockBuffer BackBuffer() For food.food = Each food If food\t = 0 Then C = $FFFFFF00 Else c = $FF7070FF If food\x>0 And food\y>0 And food\x<sx And food\y<sy Then WritePixelFast food\x,food\y, c Next For egg.egg = Each egg If egg\x>0 And egg\y>0 And egg\x<sx And egg\y<sy Then WritePixelFast egg\x,egg\y,$FFFFFF Next UnlockBuffer BackBuffer() Rect 0,0,sx,sy,0 Line sx/2,0,sx/2,sy For ant.ant = Each ant DrawImage image(ant\team, ant\class), ant\x,ant\y ;Text ant\x+5,ant\y, ant\energy,0,1 Next For y = 0 To 2 For x = 0 To 1 If selx = x And sely = y Oval 20+x*23,510+y*23,20,20 End If DrawBlock image(x,y),30 + x*23,520 + y*23 If ImageRectOverlap(image(x,y),30+x*23,520+y*23,MouseX(),MouseY(),1,1) And klick selx = x sely = y End If Next Next Text 0,0, WaitTimer(ftimer) Flip 0 Until KeyHit(1) Function makeegg(x,y,t) For egg.egg = Each egg egg\x=x And egg\y=y Return 0 Next egg.egg = New egg egg\x = x egg\y = y egg\team = t egg\e = 500 Return 1 End Function Function makefood(x,y) For food.food = Each food If food\x=x And food\y=y Return 0 Next food.food = New food food\x = x food\y = y Return 1 End Function Function getnextfood(id,t,mine=400) ant.ant = Object.ant(id) For food.food = Each food If food\t = t e = Sqr((food\x-ant\x)^2 + (food\y-ant\y)^2) If e < mine Then id = Handle(food): mine = e: ret=1 End If Next If ret Return id Else Return 0 End Function Function getnextant(id, t, mine=20) ant.ant = Object.ant(id) For ant2.ant = Each ant If ant2\team = t And (Handle(ant2) <> id) e = Sqr((ant2\x-ant\x)^2 + (ant2\y-ant\y)^2) If e < mine Then id = Handle(ant2): mine = e: ret=1 End If Next If ret Return id Else Return 0 End Function mfG Thorsten |
||
![]() |
Smily |
![]() Antworten mit Zitat ![]() |
---|---|---|
hmm auch nicht schlecht
Ich arbeite auch gerade selber an eine neue verbesserte Version, werde sie aber erst hochladen, wenn sie sich auch sehen lassen kann ^^ Eine Frage: Wie genau hast du das gemacht? also dass es so viele futterstücke so schnell verwaltet werden können? Bei deinem Beispiel würde für allerdings in den späteren Versionen ein kleines Problem Aufkommen: Durch die große Menge ist das Futter nahezu unbegrenzt. Ich habe mir das so vorgestellt, dass der spieler später einfluss auf die Entwicklung seiner Kolonie hat, und auch Sparsam mit dem "abbau" von futter umgehen muss. |
||
Lesestoff:
gegen Softwarepatente | Netzzensur | brain.exe | Unabhängigkeitserklärung des Internets "Wir müssen die Rechte der Andersdenkenden selbst dann beachten, wenn sie Idioten oder schädlich sind. Wir müssen aufpassen. Wachsamkeit ist der Preis der Freiheit --- Keine Zensur!" stummi.org |
![]() |
Thorsten |
![]() Antworten mit Zitat ![]() |
---|---|---|
WritePixelFast hattest du ja schon drin. Das Futter wird dann abhängig von der Zeit erstellt, ganz am Anfang eben sehr viel, dann immer weniger.
Außerdem RectsOverlap rausgenommen und nur die Positionen verglichen, da ja ein Futter Teil nur noch ein Pixel belegt. Eine große Speedbremse ist außerdem "Text" gewesen. Das wars eigentlich schon im groben und ganzen. Hier und da noch ein paar Kleinigkeiten. Was mir allerdings auffällt ist, dass die Version sehr seltsam reagiert ^^ Manchmal legt die Queen keine Eier. Allerdings hab ich in dem Bereich gar nichts geändert. mfG Thorsten |
||
![]() |
Smily |
![]() Antworten mit Zitat ![]() |
---|---|---|
Die eier werden nur nicht gezeichnet, existieren tun sie.
Irgendwie Ulkig oO Edit: die Eier scheinen sich ausserhalb vom Spielfeld zu befinden (warum auch immer) |
||
Lesestoff:
gegen Softwarepatente | Netzzensur | brain.exe | Unabhängigkeitserklärung des Internets "Wir müssen die Rechte der Andersdenkenden selbst dann beachten, wenn sie Idioten oder schädlich sind. Wir müssen aufpassen. Wachsamkeit ist der Preis der Freiheit --- Keine Zensur!" stummi.org |
- Zuletzt bearbeitet von Smily am Mo, Apr 09, 2007 17:38, insgesamt einmal bearbeitet
![]() |
The_Nici |
![]() Antworten mit Zitat ![]() |
---|---|---|
@BlindGuy: Joa, hab ich auch schon bemerkt mit den Eiern, aber Arbeiter, Kämpfer etc. kommen einfach vonnen Seiten raus... 0o
Toll wäre es, wenn es richtige Grafiken wären. Aber die Simulation ist ziemlich gelungen^^ Toll wäre es auch noch, wenn man einen bau sehen würde, den sie stetig verbessern. Kann mich mal an grafiken versuchen, wenn ihr wollt. =D |
||
![]() |
Smily |
![]() Antworten mit Zitat ![]() |
---|---|---|
Die Grafiken kommen ganz zum Schluss, wenn der Rest fertig ist ![]() |
||
Lesestoff:
gegen Softwarepatente | Netzzensur | brain.exe | Unabhängigkeitserklärung des Internets "Wir müssen die Rechte der Andersdenkenden selbst dann beachten, wenn sie Idioten oder schädlich sind. Wir müssen aufpassen. Wachsamkeit ist der Preis der Freiheit --- Keine Zensur!" stummi.org |
![]() |
Smily |
![]() Antworten mit Zitat ![]() |
---|---|---|
soo. Ein neues Update. Allerdings hab ich einige Verbesserungen von BG hier noch nicht beachtet. (ganz einfach, weil mir die größeren Futter-Brocken besser gefallen ^^)
Einen gegner gibt es diesmal nicht, da ich plane, dass seine Daten von einem anderen Rechner geschickt werden... (und fertig ist mein erstes Muliplayer-Spiel ![]() Das Interface ist dazugekommen: Wenn man eine Ameise anklickt wird unten ein Datenblatt von ihr angezeigt. Mit dem Button "UC" (= "User Controll") Kann man eine Ameise selber Kontrollieren. Mit rechtsklick bewegt man sie über das Feld. mit dem Button "E" kann eine Ameise Essen. mit "X" wird sie getötet Jee Klasse hat auch noch ihre eigene Kommandos: die Königin kann mit "L" eier Legen Ein Arbeiter kann mit "C" ein in der nähe liegendes Futterstück unwandeln. Mit "T" bzw "P" kann die Ameise das Futterstück aufheben bzw Hinlegen. Code: [AUSKLAPPEN] Type ant
Field x Field y Field energy Field team Field class Field var1 Field zx Field zy Field hungry Field searchfood Field UC End Type Type egg field x Field y Field team Field e End type Type food Field x Field y Field t End type ;classes: ;0=queen ;1=worker ;2=warrior Global sx = 800 Global sy = 500 Graphics 800,600,16,2 Global klick worker_val = 50 Dim classname$(2) Dim Teamname$(1) Dim maxenergy(2) Dim maxhunger(2) Dim at_val(2) Dim at_str(2) Dim Search_food_by_hungry(2) Dim Dec_en_by_hungry(2) Dim dec_hungry_by_food(2) Dim inc_en_to_hung(2) ; Diverse Daten der einzelnen Klassen: Classname$(0) = "Queen" Classname$(1) = "Worker" Classname$(2) = "Warrior" Teamname$(0) = "Red" Teamname$(1) = "Green" maxenergy(0) = 100 maxenergy(1) = 150 maxenergy(2) = 500 maxhunger(0) = 1300 maxhunger(1) = 2100 maxhunger(2) = 2100 at_val(0) = 5 at_val(1) = 3 at_val(2) = 1 at_str(0) = 2 at_str(1) = 1 at_str(2) = 5 Search_food_by_hungry(0) = 750 Search_food_by_hungry(1) = 1500 Search_food_by_hungry(2) = 1500 Dec_en_by_hungry(0) = 1250 Dec_en_by_hungry(1) = 2000 Dec_en_by_hungry(2) = 2000 dec_hungry_by_food(0) = 200 dec_hungry_by_food(1) = 1000 dec_hungry_by_food(2) = 1000 inc_en_to_hung(0) = 500 inc_en_to_hung(1) = 1000 inc_en_to_hung(2) = 1000 food_gen_val = 200 ant.ant = New ant ant\x = 100 ant\y = sy/2 ant\zx = 100 ant\zy = sy/2 ant\energy = 1 ant\team = 0 ant\class = 0 ant\hungry = 0 For x = 0 To 2 ant.ant = New ant ant\x = 100 ant\y = sy/2 ant\zx = 100 ant\zy = sy/2 ant\energy = 1 ant\team = 0 ant\class = 1 Next For x = sx/4-10 To sx/4+10 Step 1 For y = sy/2-10 To sy/2+10 Step 1 makefood(x,y) Next Next SeedRnd(millisecs()) Dim image(1,2) AutoMidHandle(1) For t = 0 To 1 For c = 0 To 2 image(t,c) = CreateImage(16,16) SetBuffer ImageBuffer(image(t,c)) Select t Case 0: Color 255,0,0 Case 1: Color 0,255,0 End Select Rect 1,1,15,15,0 Select c Case 0 Text 8,8,"Q",1,1 Case 1 Text 8,8,"W",1,1 Case 2 Text 8,8,"X",1,1 End select next Next SetBuffer BackBuffer() ftimer = CreateTimer(60) Repeat klick = MouseHit(1) If KeyHit(57) invasion = 1-invasion For food.food = Each food If (Not Rand(0,food_gen_val)) And food\t = 0 makefood(rand(food\x-5,food\x+5),rand(food\y-5,food\y+5)) End If Next For ant.ant = Each ant nextant = getnextant(handle(ant),1-ant\team,10) ant2.ant = Object.ant(nextant) If Handle(ant2) If Not Rand(0,at_val(ant\class)) ant2\energy = ant2\energy-at_str(ant\class) End if If ant\hungry > Search_food_by_hungry(ant\class) Then ant\searchfood=1 If ant\hungry > Dec_en_by_hungry(ant\class) Then ant\energy = ant\energy-1 Select ant\class Case 0: ant\var1 = ant\var1 + 1 Case 1 food.food = Object.food(ant\var1) If Handle(food) If food\t = 1 If Sqr((food\x-ant\x)^2 + (food\y-ant\y)^2) > 10 ant\var1=0 Else food\x = ant\x food\y = ant\y End If End If Case 2 End select If ant\uc If MouseHit(2) ant.ant = Object.ant(sel) If Handle(ant) ant\zx = MouseX() ant\zy = MouseY() End If End If Else If ant\searchfood id = getnextfood(handle(ant),1,1000) If id > 1 food.food = Object.food(id) ant\zx = food\x ant\zy = food\y If Sqr((food\x-ant\x)^2 + (food\y-ant\y)^2) < 10 Delete food.food ant\hungry = ant\hungry - dec_hungry_by_food(ant\class) If ant\hungry <= 0 Then ant\searchfood = 0 End if End if Else Select Ant\class Case 0 ;ant\var1 = ant\var1 + 1 If ant\var1 > 100 makeegg(ant\x,ant\y, ant\team): ant\var1=0 If ant\x = ant\zx And ant\y = ant\zy ant\zx = Rand(0,sx/2) If ant\team=1 Then ant\zx = ant\zx + sx/2 ant\zy = Rand(0,sy) End if Case 1 If Not ant\var1 id = getnextfood(Handle(ant),0) food.food = Object.food(id) If Handle(food.food) ant\zx = food\x ant\zy = food\y ant\var1 = id End If Else food.food = Object.food(ant\var1) If Handle(food) If ant\x = ant\zx And ant\y = ant\zy If food\t = 0 food\t = 1 If ant\team=0 ant\zx = Rand(0,50) Else ant\zx = Rand(sx-50,sx) ant\zy = Rand(0,sy) Else ant\var1=0 End If End If Else ant\var1=0 End If End If Case 2 nextant = getnextant(handle(ant),1-ant\team,30+invasion*50) ant2.ant = Object.ant(nextant) If Handle(ant2) ant\zx = ant2\x ant\zy = ant2\y If ant\zx = ant\x And ant\zy = ant\y ant\x = ant\x + Rand(-3,3) ant\y = ant\Y + Rand(-3,3) End if Else If ant\x =ant\zx And ant\y = ant\zy ant\zy = Rand(0,sy) If invasion ant\zx = Rand(0,sx) Else If ant\team=0 ant\zx = sx/2-rand(0,50) Else ant\zx = sx/2+rand(0,50) End if End if End If End Select End if EndIf If ant\zx < 0 Then ant\zx = 0 If ant\zy < 0 Then ant\zy = 0 If ant\zx > sx Then ant\zx = sx If ant\zy > sy Then ant\zy = sy If (ant\zx <> ant\x) Or (ant\zy <> ant\y) ri = ATan2(ant\zy-ant\y,ant\zx-ant\x) ant\x = ant\x + Cos(ri) ant\y = ant\y + Sin(ri) End if ant\hungry = ant\hungry + 1 If ant\hungry < inc_en_to_hung(ant\class) And ant\energy < maxenergy(ant\class) ant\energy = ant\energy + 1 If ant\energy > maxenergy(ant\class) ant\energy = maxenergy(ant\class) If ant\hungry < 0 ant\hungry = 0 If ant\hungry > maxhunger(ant\class) ant\hungry = maxhunger(ant\class) If ant\energy <= 1 Then Delete ant.ant Next For egg.egg = Each egg egg\e = egg\e - 1 If egg\e = 0 Then ant.ant = New ant ant\team = egg\team If Rand(0,100) <= worker_val ant\class = 1 Else ant\class=2 ant\x = egg\x ant\y = egg\y ant\zx = egg\x ant\zy = egg\y ant\energy=maxenergy(ant\class) Delete egg.egg End if Next If klick And MouseX() < sx And MouseY() < sy For ant.ant = Each ant If ImageRectOverlap(image(0,0),ant\x,ant\y,MouseX(),MouseY(),0,0) Sel = Handle(ant) End If Next End If If MouseDown(1) And RectsOverlap(sx/2-50,520,100,20,MouseX(),MouseY(),1,1) worker_val = MouseX()-sx/2 + 50 End If ;----------------------- ;- Bildschirm Zeichnen - ;----------------------- Cls Rect 0,0,sx,sy,0 Line sx/2,0,sx/2,sy ; Ausgewählte Ameise For ant.ant = Each ant Color 255,255,255 Rect ant\x-8,ant\y-10,16,2 Color 255,0,0 Rect ant\x-8,ant\y-10,16.0/maxenergy(ant\class)*ant\energy,2 DrawBlock image(ant\team, ant\class), ant\x,ant\y If ant\hungry > search_food_by_hungry(ant\class) If ant\hungry > dec_en_by_hungry(ant\class) Color 255,0,0 Else Color 255,255,0 Oval ant\x+6,ant\y+6,6,6,1 Color 255,255,255 Oval ant\x+6,ant\y+6,6,6,0 End If If sel = Handle(ant) Color 255,255,255 Rect ant\x-16,ant\y-16,32,32,0 Rect 5,505,260,90,0 Text 10,505, "Ameise ausgewählt"; + ant\class Text 10,525, "Klase: "; + classname$(ant\class) Text 10,540, "Team: " Text 10,555, "Energie:" Text 10,570, "Hunger:" Text 100,525, classname$(ant\class) Text 100,540, teamname$(ant\team) Rect 100,556,100,13 Rect 100,571,100,13 Color 255,0,0 Rect 100,556,100.0/maxenergy(ant\class)*ant\energy,13 Color 255,128,128 Rect 100,571,100,13 Color 255,255,128 Rect 100,571,100.0/maxhunger(ant\class)*dec_en_by_hungry(ant\class),13 Color 128,255,128 Rect 100,571,100.0/maxhunger(ant\class)*search_food_by_hungry(ant\class),13 Color 255,0,0 Rect 100,571,100.0/maxhunger(ant\class)*ant\hungry,13 Color 0,0,0 Text 150,562,ant\energy + "/" + maxenergy(ant\class),1,1 Text 150,577,ant\hungry + "/" + maxhunger(ant\class),1,1 Color 255,255,255 If ant\uc c = 255 Else c = 155 If Drawbutton("UC", 240, 535, 20, 20,c,c,c) ant\uc = Not ant\uc If ant\uc id = getnextfood(Handle(ant),1,5) food.food = Object.food(id) If Handle(food) If drawbutton("E",215,510,20,20) Delete food.food ant\hungry = ant\hungry - dec_hungry_by_food(ant\class) End If End If Select ant\class Case 0 If ant\var1 > 100 If drawbutton("L",215,535,20,20) makeegg(ant\x,ant\y, ant\team): ant\var1=0 End If Case 1 id = getnextfood(Handle(ant),0,5) If id If drawbutton("C",215,535,20,20) food.food = Object.food(id) food\t = 1 End If EndIf If ant\var1 If drawbutton("P",215,560,20,20) ant\var1 = 0 Else id = getnextfood(Handle(ant),1,5) If id If drawbutton("T",215,560,20,20) ant\var1 = id EndIf End If Case 2 End select End If If Drawbutton("X",240,510,20,20) Delete ant.ant End If Next ;Arbeiter - Kämpfer verhältniss Color 255,255,255 Rect sx/2-50,520,100,21,0 Line sx/2-50+worker_val,520,sx/2-50+worker_val,540 Text sx/2-50,550, classname$(2),1,1 Text sx/2-50,570, 100-worker_val + "%",1,1 Text sx/2+50,550, classname$(1),1,1 Text sx/2+50,570, worker_val + "%",1,1 LockBuffer BackBuffer() For food.food = Each food If food\t = 0 Then C = $FFFFFF00 Else c = $FF7070FF For xdif = -1 To 1 For ydif = -1 To 1 WritePixelFast food\x+xdif,food\y+ydif, c next next Next UnlockBuffer BackBuffer() Color 255,255,255 For egg.egg = Each egg Oval egg\x-4,egg\y-6,8,12,1 Next Text 0,0, WaitTimer(ftimer) Flip 0 Until KeyHit(1) Function makeegg(x,y,t) For egg.egg = Each egg If RectsOverlap(egg\x-4, egg\y-6, 8, 12,x-4,y-4,8,12) Return 0 Next egg.egg = New egg egg\x = x egg\y = y egg\team = t egg\e = 500 Return 1 End Function Function makefood(x,y) For food.food = Each food If RectsOverlap(food\x-2,food\y-2,4,4,x-2,y-2,4,4) Return 0 Next If x < 2 Return 0 If y < 2 Return 0 If x > sx-2 Return 0 If y > sy-2 Return 0 food.food = New food food\x = x food\y = y Return 1 End Function Function getnextfood(id,t,mine=400) ant.ant = Object.ant(id) For food.food = Each food If food\t = t e = sqr((food\x-ant\x)^2 + (food\y-ant\y)^2) If e < mine Then id = Handle(food): mine = e: ret=1 End if Next If ret Return id Else Return 0 End Function Function getnextant(id, t, mine=20) ant.ant = Object.ant(id) For ant2.ant = Each ant If ant2\team = t And (Handle(ant2) <> id) e = sqr((ant2\x-ant\x)^2 + (ant2\y-ant\y)^2) If e < mine Then id = Handle(ant2): mine = e: ret=1 End if Next If ret Return id Else Return 0 End Function Function drawbutton(t$,x,y,w,h,r=255,g=255,b=255) Color 100,100,100 If RectsOverlap(x,y,w,h,MouseX(),MouseY(),1,1) Rect x,y,w,h: If klick Return 1 Color r,g,b Rect x,y,w,h,0 Text x+w/2,y+h/2,t$,1,1 End Function |
||
Lesestoff:
gegen Softwarepatente | Netzzensur | brain.exe | Unabhängigkeitserklärung des Internets "Wir müssen die Rechte der Andersdenkenden selbst dann beachten, wenn sie Idioten oder schädlich sind. Wir müssen aufpassen. Wachsamkeit ist der Preis der Freiheit --- Keine Zensur!" stummi.org |
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group