Small Simulator

BlitzPlus Forums/BlitzPlus Programming/Small Simulator

Lattyware(Posted 2005) [#1]
While messing around trying to create AI, I made this:

www.lattyware.com/VWorld.zip

Here is the source code, but you'll need to download the above to get the base 'define.txt'

[Code]
Graphics 800,600

Type Animal
Field X
Field Y
Field Speed
Field LnOSt
Field Sizer
Field Intrude
Field TY
Field Ident
Field Repro
Field Life
End Type

WeekLen% = 50
YearLen% = 5
PassedDay% = 00
PassedWeek% = 00
PassedYear%=00

define=OpenFile("Define.txt")

.Reada
Liner$=ReadLine(define)
If Left(Liner$,1) = ";" Then Goto Reada

SetNum=Liner$

Dim Key(SetNum)
Dim TY(SetNum)
Dim Speed(SetNum)
Dim LnOSt(SetNum)
Dim Sizer(SetNum)

For a = 1 To SetNum

.Readb
Liner$=ReadLine(define)
If Left(Liner$,1) = ";" Then Goto Readb
Liner2 = Liner$
Key(a) = Liner2+1
.Readc
Liner$=ReadLine(define)
If Left(Liner$,1) = ";" Then Goto Readc
TY(a) = Liner$
.Readd
Liner$=ReadLine(define)
If Left(Liner$,1) = ";" Then Goto Readd
Speed(a) = Liner$
.Reade
Liner$=ReadLine(define)
If Left(Liner$,1) = ";" Then Goto Reade
LnOSt(a) = Liner$
.Readf
Liner$=ReadLine(define)
If Left(Liner$,1) = ";" Then Goto Readf
Sizer(a) = Liner$
Next

While Not KeyDown(1)
Cls

SeedRnd MilliSecs()

For a = 1 To SetNum
If KeyHit(Key(a))
IdentCount=IdentCount+1
Main.Animal = New Animal
Main\Ident = IdentCount
Main\TY=TY(a)
Main\X = Rand(1,799)
Main\Y = Rand(1,599)
Main\Speed = Speed(a)
Main\LnOSt = LnOSt(a)
Main\Sizer = Sizer(a)
Main\Intrude = 0
Main\Repro = PassedYear%
Main\Life = 0
EndIf
Next

If KeyHit(57)
If ShowLnOSt = True Then
ShowLnOSt = False
Else
ShowLnOSt = True
EndIf
EndIf

If KeyHit(56)
For Main.Animal = Each Animal
Delete main
Next
EndIf

PassedDay%=PassedDay%+1
If PassedDay%=WeekLen% Then PassedWeek%=PassedWeek%+1 : PassedDay%=0
If PassedWeek%=YearLen% Then
PassedYear%=PassedYear%+1
PassedWeek%=0
For Main.Animal = Each Animal
Main\Life = Main\Life + 1
Next
EndIf

Color 255,255,255
Text 0,0,"| "+PassedDay%+"\"+PassedWeek%+"\"+PassedYear%
Text 0,12,"| Number Keys: Spawn Animal, Space: Toggle Line Of Sight, Alt: Clear"
If ShowLnOSt = True Then Text 0,24,"| Green: Freind, Blue: Food, Red: Foe, White: N/A"

For Main.Animal = Each Animal

If Main\X > 799 Then Main\X = 001
If Main\X < 001 Then Main\X = 799
If Main\Y > 599 Then Main\Y = 001
If Main\Y < 001 Then Main\Y = 599

If Main\Intrude = 1 Then
Else
If Main\Intrude = 2 Then
Else
Main\X=Main\X+Rand(-Main\Speed/2,Main\Speed/2)
Main\Y=Main\Y+Rand(-Main\Speed/2,Main\Speed/2)
EndIf
EndIf

Main\Intrude = 0

If Main\Life = 3 Then Delete Main : Goto Nexter

For Main2.Animal = Each Animal
If Not Main\Ident = Main2\Ident
If RectsOverlap(Main\X-Main\LnOSt/2,Main\Y-Main\LnOSt/2,Main\LnOSt,Main\LnOSt,Main2\X,Main2\Y,1,1) Then
DetectCount = DetectCount + 1
If Main2\TY = Main\TY Then
Main\Intrude = 3
If Not Main\Repro = PassedYear% Then
If Main\X < Main2\X Then Main\X = Main\X + Main\Speed
If Main\X > Main2\X Then Main\X = Main\X - Main\Speed
If Main\Y < Main2\Y Then Main\Y = Main\Y + Main\Speed
If Main\Y > Main2\Y Then Main\Y = Main\Y - Main\Speed
EndIf
Else
If Main2\TY < Main\TY Then
Main\Intrude = 1
If Main\X < Main2\X Then Main\X = Main\X + Main\Speed
If Main\X > Main2\X Then Main\X = Main\X - Main\Speed
If Main\Y < Main2\Y Then Main\Y = Main\Y + Main\Speed
If Main\Y > Main2\Y Then Main\Y = Main\Y - Main\Speed
Else
If Main2\TY > Main\TY Then
Main\Intrude = 2
If Main\X > Main2\X Then Main\X = Main\X + Main\Speed
If Main\X < Main2\X Then Main\X = Main\X - Main\Speed
If Main\Y > Main2\Y Then Main\Y = Main\Y + Main\Speed
If Main\Y < Main2\Y Then Main\Y = Main\Y - Main\Speed
EndIf
EndIf
If DetectCount = 3 Then
If Main\X > Main2\X Then Main\X = Main\X + Main\Speed
If Main\X < Main2\X Then Main\X = Main\X - Main\Speed
If Main\Y > Main2\Y Then Main\Y = Main\Y + Main\Speed
If Main\Y < Main2\Y Then Main\Y = Main\Y - Main\Speed
EndIf
EndIf
EndIf

If RectsOverlap(Main\X,Main\Y,1,1,Main2\X,Main2\Y,1,1) Then
If Main2\TY > Main\TY Then
Delete Main
Goto Nexter
EndIf
If Not Main\Repro = PassedYear% Then
If Main2\TY = Main\TY Then
IdentCount=IdentCount+1
Main3.Animal = New Animal
Main3\Ident = IdentCount
Main3\TY=Main\TY
Main3\X = Main\X + 10
Main3\Y = Main\Y + 10
Main3\Speed = Main\Speed
Main3\LnOSt = Main\LnOSt
Main3\Sizer = Main\Sizer
Main3\Intrude = 0
Main3\Repro = PassedYear%
Main\Repro = PassedYear%
Main\Life = 0
EndIf
EndIf
EndIf
EndIf

Next

DetectCount = 0

Select Main\Intrude
Case 1 ;Food
Color 0,0,255
Case 2 ;Foe
Color 255,0,0
Case 3 ;Friend
Color 0,255,0
Default ;Nothing
Color 100,100,100
End Select
If ShowLnOSt = True Then
Rect Main\X-Main\LnOSt/2,Main\Y-Main\LnOSt/2,Main\LnOSt,Main\LnOSt,0
EndIf
Color 155,155,155
Oval Main\X-Main\Sizer,Main\Y-Main\Sizer,Main\Sizer*2,Main\Sizer*2

.Nexter
Next

Flip
Wend
[/Code]