Mini Ki oder Hungrige Punkte !! :)

Übersicht BlitzBasic Codearchiv

Neue Antwort erstellen

 

c64

Betreff: Mini Ki oder Hungrige Punkte !! :)

BeitragSo, Apr 11, 2004 15:00
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich verstehe Ki als PH = Programmierte Handlung !!


als beispiel bitte dies !!!


Weisse Punkte sind satt rote Haben hunger und wenn ihr nich aufpasst
dann fressen die am MouseCourser !! Smile


PS: Dies ist nur ein Beispiel !!! das Newbys zeigen soll wie mann KI verstehen soll,,, kann,,, bzw. sie Programmieren könnte !!

Ich Hoffe dies kann einigen ein wenig Helfen !!!


BlitzBasic: [AUSKLAPPEN]

; Ki BSP
;==============

Graphics 800,600,16,1


Global ki.ki


Global mx
Global my


Type ki

Field posx
Field posy

Field POWER
Field gosteps
Field inSide

End Type


For c=1 To 100

ki= New ki
ki\posx=Rnd(800)
ki\posy=Rnd(600)
ki\power=500

Next

SetBuffer BackBuffer()


While Not KeyHit(1)
mx=MouseX()
my=MouseY()

Cls

Color 200,200,200
Oval mx-5,my-5,10,10,0

ki_control
Flip

Wend



Function ki_control()

For ki=Each ki
ki\gosteps=ki\gosteps-1

If ki\gosteps<0

ki\inside=Rnd(4)
ki\gosteps=Rnd(50,100)


EndIf

If ki\inside=1 ki\posx=ki\posx+1
If ki\inside=2 ki\posx=ki\posx-1

If ki\inside=3 ki\posy=ki\posy+1
If ki\inside=4 ki\posy=ki\posy-1

If ki\power>-5 ki\power=ki\power-Rnd(2)


If ki\posx>800 ki\posx=800
If ki\posy>600 ki\posx=600
If ki\posx<0 ki\posx=0
If ki\posy<0 ki\posy=0



Color 200,200,200

If ki\power<0
Color 250,0,0

If ki\posx>mx ki\posx=ki\posx-2
If ki\posx<mx ki\posx=ki\posx+2

If ki\posy>my ki\posy=ki\posy-2
If ki\posy<my ki\posy=ki\posy+2

End If

If ki\posx=mx And ki\posy=my ki\power=Rnd(1000,1500)
Plot ki\posx,ki\posy

Next


End Function

Travis

BeitragSo, Apr 11, 2004 15:19
Antworten mit Zitat
Benutzer-Profile anzeigen
Ganz lustig, aber für Newbies dürfte das aufgrund der Namensgebung der Variablen nur schwer nachzuvollziehen sein Wink

Man könnte die Punkte noch'n bisschen größer machen und die Bewegung zum Zielpunkt mit dem ATAN2-Befehl berechnen.

Das erinnert mich übrigens sehr an die Schwarmsimulation von CodeMaster.
www.funforge.org

Ich hasse WASD-Steuerung.

Man kann alles sagen, man muss es nur vernünftig begründen können.
 

c64

BeitragSo, Apr 11, 2004 16:13
Antworten mit Zitat
Benutzer-Profile anzeigen
Travis stell dich nich so an Du ,, Du , du Ansteller Du .... Razz

-----------
posx
posy

gosteps
power
-----------

?????? was is daran nich zu verstehn ???

hmm Kann sein das es an andere Proggys erinnert !! is ja nix anderes
als wie dieses ,,, !!

nu jut , Travis ich muss aber Sagen du bist sehr Interresiert am Proggen
und Hast soweit ich das bis jetzt gesehen habe immer sehr Gute, und
Produktive Kritik von Dir gegeben !!!

!!! Sympathisch Sympathisch !!!

Aus jux und Dallerrei könnte mann ja (nur Leute die dies auch können)
Stück für Stück den Punkten mehr Eigenschaften beibringen !


zb.: Grösse ,in Abhängikeit zum Alter !!
oder,oder,oder,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,

sbrog

BeitragSo, Apr 11, 2004 18:08
Antworten mit Zitat
Benutzer-Profile anzeigen
bei mir werden die Types gar nicht in der Übersicht angezeigt...Egal.
Ich seh mir den Code mal durch und sag dir dann, ob ich als waschechter newbie was versteht. Das Programm selbst ist LoLig Very Happy

Travis

BeitragSo, Apr 11, 2004 18:58
Antworten mit Zitat
Benutzer-Profile anzeigen
*g* Ich habe mich jetzt mal 'reingearbeitet' und einige Erweiterungen vorgenommen. Ich liebe solche Spielereien Laughing

Arrow KIs altern jetzt und werden mit ihrem Alter größer.
Arrow KIs sterben im hohen alter und teilen sich in zwei Neue
Arrow Neugeburten werden durch ein Signal angezeigt (muss wegen der Performance vielleicht wieder entfernt werden)
Arrow Population wird angezeigt

EDIT1: Arrow KIs können verhungern, wenn sie zu lange nichts essen
EDIT2: Arrow Statistik eingefügt, Signale bei Geburten deaktiviert

Lasst es mal länger laufen. Nach 4min sind es etwa 500 KIs. Nach fünf dann schon 1000. Dann wird's richtig lustig! Laughing

BlitzBasic: [AUSKLAPPEN]

; Ki BSP
;==============

Graphics 800,600,16,2
AppTitle "Ki BSP"

Global FPSSEC = MilliSecs(), FPS, FRAMES
Global tod, geburt, verhungert
Global ki.ki
Global mx
Global my
Global rad
Global Timer1
Global n

Type ki
Field posx
Field posy
Field POWER
Field age
Field gosteps
Field inSide
End Type


Type signal
Field x,y,rad,timer
End Type


For c=1 To 20
x = Rnd(800)
y = Rnd(600)
NewKI(x,y)
Next

StartZeit = MilliSecs()

SetBuffer BackBuffer()
While Not KeyHit(1)
Cls

Text 0,0, "FPS: " + FPS()
Text 0,10, "Zeit: " + (MilliSecs() - StartZeit)/1000 + " sek"
Text 150,0, "Population: " + n
Text 150,10, "Geburten: " + geburt
Text 350,00, "Todesfälle: " + tod
Text 350,10, "Verhungert: " + verhungert

mx=MouseX()
my=MouseY()

Color 200,200,200
Oval mx-5,my-5,10,10,0

ki_control
Flip
Wend



Function ki_control()

For ki=Each ki
ki\gosteps=ki\gosteps-1

If ki\gosteps<0
ki\inside=Rnd(4)
ki\gosteps=Rnd(50,100)
EndIf

If ki\inside=1 ki\posx=ki\posx+1
If ki\inside=2 ki\posx=ki\posx-1

If ki\inside=3 ki\posy=ki\posy+1
If ki\inside=4 ki\posy=ki\posy-1

ki\power=ki\power-Rnd(2)

If ki\posx>800 ki\posx=800
If ki\posy>600 ki\posx=600
If ki\posx<0 ki\posx=0
If ki\posy<0 ki\posy=0


Color 200,200,200

If ki\power<0 ; KI is hungry
Color 250,0,0

If ki\posx>mx ki\posx=ki\posx-2
If ki\posx<mx ki\posx=ki\posx+2

If ki\posy>my ki\posy=ki\posy-2
If ki\posy<my ki\posy=ki\posy+2
End If


If Abs(ki\posx-mx)<2 And Abs(ki\posy-my)<2 And ki\power<0 Then
ki\power=Rnd(500,2000) ; KI is eating
ki\age = ki\age + 1 ; KI is aging
EndIf

Oval ki\posx-ki\age,ki\posy-ki\age, ki\age, ki\age ; View KI

If ki\age = 5 Then ; Tod durch Alter
kix = ki\posx
kiy = ki\posy
Delete ki
tod = tod + 1
n = n - 1
NewKI(kix,kiy)
NewKI(kix,kiy): geburt = geburt + 2
;s.signal = New signal
;s\x = kix
;s\y = kiy
EndIf

;ViewSignal() ; KI stirbt anzeigen
If ki\power<-400 Then Delete ki: n = n - 1: verhungert = verhungert + 1 ; KI verhungert

Next
End Function


Function NewKI(x,y)
ki= New ki
ki\posx=x
ki\posy=y
ki\power=Rnd(400,1000)
ki\age=1
n = n + 1
End Function


Function ViewSignal()
For s.signal = Each signal
Color 0,255,0
Oval s\x-rad, s\y-s\rad, s\rad*2, s\rad*2, 0
If MilliSecs() - s\Timer > 60 Then
s\rad = s\rad + 2
s\timer = MilliSecs()
EndIf
If s\rad > 25 Then Delete s
Next
End Function


Function FPS()

FRAMES = FRAMES + 1
If MilliSecs() - FPSSEC => 1000 Then
FPS = FRAMES
FRAMES = 0
FPSSEC = MilliSecs()
EndIf

Return FPS
End Function

www.funforge.org

Ich hasse WASD-Steuerung.

Man kann alles sagen, man muss es nur vernünftig begründen können.
  • Zuletzt bearbeitet von Travis am So, Apr 11, 2004 21:12, insgesamt 2-mal bearbeitet

Paul

BeitragSo, Apr 11, 2004 21:06
Antworten mit Zitat
Benutzer-Profile anzeigen
Travis du Spielkind Wink !
Aber echt das hatten wir doch schon beim schwarmsimulator.
Is aber ganz lustig!

Paul
Stratocaster black - Roland MicroCube
User posted image
Girgl-World, wer's nich kennt, is' blöd!
 

c64

BeitragMo, Apr 12, 2004 13:17
Antworten mit Zitat
Benutzer-Profile anzeigen
Yeahh so Muss das sein ,, !!! Razz

COol
 

x.Force

BeitragMo, Apr 12, 2004 13:47
Antworten mit Zitat
Benutzer-Profile anzeigen
Nach 30 sek waren bei mir alle tot Razz Razz Razz Razz Razz Razz

AMD Athlon XP 2000+ | 1024mb DDR-Ram | Asus Radeon 9600XT | BENQ FP757 17°Zoll TFT

Was kümmert mich mein Geschwätz von gestern? (Konrad Adenauer) -.-

Travis

BeitragMo, Apr 12, 2004 14:30
Antworten mit Zitat
Benutzer-Profile anzeigen
Surprised Wenn man die Futterquelle in der mitte lässt, vermehren die sich innerhalb von 8 Minuten so stark, das die FPS runtergeht. Die Todesrate ist dann eher niedrig Smile

Ist aber leider ein kleiner Fehler drin. Wenn die KIs durch altersschwäche sterben, flimmert das Bild einmal kurz. Wenn man dann über 2000 KIs hat, flimmerts richtig. Ich konnte den Fehler leider noch nicht finden. Es liegt nicht an der Anzahl. Wenn man anfangs 5000 KIs erstellt, geht's zwar langsam, aber es flimmert erst, wenn die ersten sterben. Vielleicht kann das ja noch einer beheben.
www.funforge.org

Ich hasse WASD-Steuerung.

Man kann alles sagen, man muss es nur vernünftig begründen können.

regaa

BeitragMo, Apr 12, 2004 18:02
Antworten mit Zitat
Benutzer-Profile anzeigen
Also ich hab das ganze mal während ich wo war, laufen lassen, endergebniss: Geburten : 26388: Todesfälle: 13194: Verhungert: 13214

als ich nur noch 4 Frames hatte, weil die Population auf 18 angestiegen ist, hab ich die Futterquelle wegebewegt, und nach 1 Minute waren sie ALLE Tot, etwas gemein ich weiß. Laughing Aber ganz lustig.
UltraMixer Professional 3 - Download
QB,HTML,CSS,JS,PHP,SQL,>>B2D,B3D,BP,BlitzMax,C,C++,Java,C#,VB6 , C#, VB.Net

Travis

BeitragDi, Apr 13, 2004 0:06
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich habe mal ein paar neue Ideen verwirklicht. Dafür musste ich den Code aber komplett neu schreiben. Hier die Änderungen zum Vorgänger

Arrow KIs haben mehr Bewegungsfreiheit, da ihre Bewegung jetzt über Winkelfunktionen berechnet wird.
Arrow Es gibt Futter, das die KIs fressen müssen um zu wachsen und nicht zu sterben (die KIs peilen selbstständig das ihnen nähste Futterstück an)
Arrow Altersschwache KIs Teilen sich in zwei neue KIs einer neuen Generation.
Arrow Mit jeder Generation färben sich die KIs gelblicher (ca ab Generation 7 sichtbar)

Hat noch wer 'n paar Ideen?

BlitzBasic: [AUSKLAPPEN]

Graphics 800,600,16,2
SetBuffer BackBuffer()
SeedRnd MilliSecs()
AppTitle "NewKIs"

Global FPSSEC = MilliSecs(), FPS, FRAMES
Global Kis, NeuKIS, HungerTod, AltersTod ; Anzahl KIs, Neugeburten, Verhungerte KIs
Global MaxGen, MinGen ; Höchste Generation, Niedrigste Generation
Global FoodMasse ; Gesamte Futtermenge

Type KI
Field x#,y#,sx#,sy#,speed#,winkel,energy,age,generation
Field timer ; Timer für Richtungsänderung
Field abstand ; Abstand zum Futter
Field zx,zy ; Futterkordinaten
End Type

Type Food
Field x, y, m
End Type

Type Signal
Field x,y,r,art
End Type

For i = 1 To 20
NewKI(Rnd(0,800),Rnd(0,600),1)
Next

For i = 1 To 40
NewFood(Rnd(0,800),Rnd(0,600),Rnd(10))
Next


Start = MilliSecs()
Repeat
Cls

Color 255,255,255
Text 0,0, "FPS: " + FPS()
Text 0,10, "Zeit: " + (MilliSecs() - Start) / 1000 + " sek"
Text 120,00, "KIs: " + Kis
Text 120,10, "Geburten: " + NeuKIS
Text 240,00, "Hungertod: " + HungerTod
Text 240,10, "Alterstod: " + AltersTod
Text 360,00, "Höchste Generation: " + MaxGen
Text 360,10, "Niedrigste Gener. : " + MinGen
Text 550,00, "Futtermenge: " + FoodMasse
Text 550,10, "Signale: " + Signal


UpdateKI()
UpdateFood()
If Signal = 1 Then UpdateSignal()

If Kis = 0 Then Text 350,300, "GAME OVER":Flip:WaitKey:End
If KeyHit(59) Then Signal = Signal Xor 1

Flip 1
Until KeyHit(1)
End




Function UpdateKI()

MinGen = 100000 ; Kleinste Generation (Reset)

For k.ki = Each ki
;Color 255,255,0:Oval k\zx-2, k\zy-2,4,4 ; Zielpunkte der KIs anzeigen
;Text k\x, k\y, k\age ; Alter der KIs anzeigen
;Text k\x,k\y, k\energy ; KI energy
;Text k\x,k\y, k\generation ; KI Generation

For f.food = Each food
If FMS = 1 Then FoodMasse = FoodMasse + f\m
If k\energy < 200
If Abs(f\x-k\x)<2 And Abs(f\y-k\y)<2 Then ; KI frisst
k\energy = k\energy + Rnd(1000,2000)
k\age = k\age + 1
f\m = f\m - 1
If f\m <= 0 Then Delete f
EndIf
EndIf
Next


If k\generation > MaxGen Then MaxGen = k\generation ; niedrigste Generation erfassen
If k\generation < MinGen Then MinGen = k\generation ; höchste Generation erfassen

Color 255,255,255-(k\generation*10)
If k\energy < 200 Then Color 255,0,0 ; KI hungrig markieren
Oval k\x#-k\age, k\y#-k\age, k\age, k\age, 1 ; KI anzeigen

k\x# = k\x# + k\sx# ; KIs bewegen
k\y# = k\y# + k\sy#
If k\x < 0 Then k\x = 0
If k\x > 800 Then k\x = 800
If k\y < 0 Then k\y = 0
If k\y > 600 Then k\y = 600

If MilliSecs() - k\timer > Rnd(2000,4000) Then ; Richtung der KIs ändern
k\timer = MilliSecs()
k\winkel = Rnd(0,359)
k\sx# = Cos(k\winkel) * k\speed
k\sy# = Sin(k\winkel) * k\speed
EndIf

If k\energy < 200 Then ; Wenn KI hungrig ist
k\abstand = 1000000
k\zx = k\x
k\zy = k\y
For f.food = Each food
If abstand(f\x,f\y,k\x,k\y) < k\abstand Then
k\abstand = abstand(f\x,f\y,k\x,k\y) ; kleinsten Abstand zum Futter suchen
k\zx = f\x: k\zy = f\y ; Futterposition merken
EndIf
Next

k\winkel = (450 - ATan2((k\zx - k\x), (k\zy - k\y))) Mod 360 ; KI aufs Futter ausrichten
k\sx# = Cos(k\winkel) * k\speed
k\sy# = Sin(k\winkel) * k\speed
EndIf

k\energy = k\energy - Rnd(2) ; Hunger erhöhen
If k\energy < 0 Then ; KI verhungert
NewSignal(k\x,k\y,2)
Delete k:
kis = kis - 1
HungerTod = HungerTod + 1
Goto NextKi
EndIf

If k\age = 4 Then
If k\energy < 200 Then ; Tod durch Alter
ox = k\x: oy = k\y: og = k\generation
NewSignal(ox,oy,3)
Delete k
kis = kis - 1
AltersTod = AltersTod + 1
NewKi(ox,oy,og+1)
NewKi(ox,oy,og+1)
NeuKIS = NeuKIS + 2 ; Anzahl neugeburten
EndIf
EndIf

.NextKi
Next

End Function


Function UpdateFood()
FoodMasse = 0
For f.food = Each food
Color 128,064,000
Rect f\x-(f\m/2), f\y-(f\m/2), f\m, f\m, 1
FoodMasse = FoodMasse + f\m ; Futtermenge Ferfassen
Next

If FoodMasse < 50 Then ; Neues Futter verteilen
For i = 1 To 3
nx = Rnd(0,800)
ny = Rnd(0,600)
NewSignal(nx,ny,1)
NewFood(nx,ny,Rnd(10))
Next
EndIf
End Function


Function NewKI(x,y,generation)
k.ki = New ki
k\x# = x
k\y# = y
k\speed# = 2
k\winkel = Rnd(0,359)
k\sx# = Cos(k\winkel) * k\speed
k\sy# = Sin(k\winkel) * k\speed
k\energy = Rnd(400,1400)
k\age = 1
k\generation = generation
k\timer = MilliSecs()
kis = kis + 1
End Function

Function NewFood(x,y,m)
f.food = New food
f\x = x
f\y = y
f\m = m
End Function

Function NewSignal(x,y,art)
s.signal = New signal
s\x = x
s\y = y
s\art = art
End Function

Function UpdateSignal()
For s.signal = Each signal
If s\art = 1 Then Color 0,255,0
If s\art = 2 Then Color 255,0,0
If s\art = 3 Then Color 0,0,255
Oval s\x-s\r, s\y-s\r, s\r*2, s\r*2, 0
s\r = s\r + 1
If s\r > 20 Then Delete s
Next
End Function

Function FPS()
FRAMES = FRAMES + 1
If MilliSecs() - FPSSEC => 1000 Then
FPS = FRAMES
FRAMES = 0
FPSSEC = MilliSecs()
EndIf
Return FPS
End Function

Function Abstand(x1#,y1#,x2#,y2#)
xhypo# = x1# - x2#
yhypo# = y1# - y2#
Abstand# = Sqr((xhypo# ^ 2) + (yhypo# ^ 2))
Return Abstand#
End Function
www.funforge.org

Ich hasse WASD-Steuerung.

Man kann alles sagen, man muss es nur vernünftig begründen können.
  • Zuletzt bearbeitet von Travis am Di, Apr 13, 2004 18:40, insgesamt einmal bearbeitet

regaa

BeitragDi, Apr 13, 2004 1:06
Antworten mit Zitat
Benutzer-Profile anzeigen
Mach das sie nicht nur vom Food abhängig sind um zu wachsen sondern on anderen Faktoren, wie Wasser etc. Laughing

SO nebenbei, habs bis 86000 gebracht, boah hats be mir gelaggt, mit gut 0.1 Frame.
UltraMixer Professional 3 - Download
QB,HTML,CSS,JS,PHP,SQL,>>B2D,B3D,BP,BlitzMax,C,C++,Java,C#,VB6 , C#, VB.Net
 

Kekskiller

BeitragDo, Apr 15, 2004 20:17
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich ahne es...
Das wird danach solch ein geniales Teil wie diese Organismenengine ^_^
Eine sehr schöne Idee , zwar etwas verwunderlich , aber schön.

rambo256

BeitragDo, Apr 15, 2004 23:22
Antworten mit Zitat
Benutzer-Profile anzeigen
Is ja mal geil...
Respekt,leider beherrsche ich die Types noch nicht,werde es aber bal mal in Angriff nehmen,Tut's hab ich ja genug...
 

m

BeitragFr, Apr 16, 2004 12:51
Antworten mit Zitat
Benutzer-Profile anzeigen
ein schwarzes loch das die kis ansaugt man muss sie mit der maus blocken :]

sbrog

BeitragFr, Apr 16, 2004 13:03
Antworten mit Zitat
Benutzer-Profile anzeigen
Das Programm weißt gewisse Ähnlichkeit mit dem Spermasimulator auf Very Happy
 

c64

BeitragMo, Apr 19, 2004 14:05
Antworten mit Zitat
Benutzer-Profile anzeigen
FIND ich COOL das Interesse !!!

und SPERMASIMULATOR GEILLLLL !!!!! *KRINGEL MICH VOR LACHEN

regaa

BeitragMo, Apr 19, 2004 17:18
Antworten mit Zitat
Benutzer-Profile anzeigen
Hatte das auf Arbeit nachgeproggt, und fand es auch recht lustig. Nur bei mir gabs keine vermehrung, sondern es galt das Überlebensprinzip, dabei wurde die vieher immer größer und größer und mussten dementsprechend mehr fressen, und gab es auch nur eine Nahrungsquelle ´, die , wenn sie aufgebraucht wurde mit einen zufallswert, wieder woanders erschien. Das war ganz lustig Laughing . Man sollte wirklich mehr aus der Idee machen.
UltraMixer Professional 3 - Download
QB,HTML,CSS,JS,PHP,SQL,>>B2D,B3D,BP,BlitzMax,C,C++,Java,C#,VB6 , C#, VB.Net

Neue Antwort erstellen


Übersicht BlitzBasic Codearchiv

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group