Code archives/Miscellaneous/Cellular Model
This code has been declared by its author to be Public Domain code.
Download source code
| |||||
This is a program that was originally designed for my biology teacher. It creates a specified number of cells, each a different species, and goes on to run its life based on normal cell criteria. It looks at the age of the cell, the number of children it can have and how often. To control the population, there is a random event that kills a number of cells based upon their strength and luck. REMEMBER! When putting in a number of farms, the number must be a perfect square. | |||||
Graphics3D 600,612,0,2 SetBuffer BackBuffer() SeedRnd MilliSecs() AppTitle "CELLULAR MODEL" .init Include "lib.bb" Color 255,255,255 farm_width = width/Sqr(farms) farm_height = height/Sqr(farms) Locate 0,0 farms = Input("NUMBER OF FARMS: ") num = Input("NUMBER OF CELLS: ") If num > 35000 RuntimeError "MAX NUMBER OF CELLS EXCEEDED" EndIf MultiCell(num) farm.farm = New farm farm\x = 0 farm\y = 12 farm\supply = 100 farm\regen_r = 50 farm\regen = 10 farm\width = width/Sqr(farms) farm\height = height/Sqr(farms) y# = 12 For i = 1 To farms - 1 farm.farm = New farm If x# >= width - width/Ceil(Sqr(farms)) y# = y# + height/Ceil(Sqr(farms)) x# = 0 Else x# = x# + width/Ceil(Sqr(farms)) EndIf farm\x = x farm\y = y farm\supply = 100 farm\regen_r = 50 farm\regen = 10 farm\width = width/Sqr(farms) farm\height = height/Sqr(farms) Next Cls While Not KeyDown(1) Cls Text 0,0,"GENERATION: " + generation If KeyHit(88) If shown = True shown = False ElseIf shown = False shown = True EndIf EndIf If KeyDown(19) For cell.cell = Each cell Delete cell Next Goto init EndIf population = 0 food = 0 For cell.cell = Each cell For farm.farm = Each farm If RectsOverlap(farm\x,farm\y,farm\width,farm\height,cell\x,cell\y,10,10) If cell\hunger > 0 And farm\supply > 0 farm\supply = farm\supply - 1 cell\hunger = cell\hunger - 1 EndIf EndIf Next If generation = event_next event = 1 If cell\luck > event_power Or cell\strength > event_power cell\live = 1 Else cell\live = 0 EndIf EndIf temp_x = cell\x temp_y = cell\y cell\age = generation - cell\birth cell\counter = cell\counter + 1 cell\hun_cn = cell\hun_cn + 1 If cell\hun_cn - cell\hunger_r = 0 cell\hun_cn = 0 cell\hunger = cell\hunger + 1 EndIf If cell\age = cell\longevity cell\live = 0 cells(cell\x/10,cell\y/10) = 0 EndIf If cell\hunger > 10 cell\check = cell\check + 1 If cell\check > 500 cell\live = 0 EndIf EndIf If cell\counter - cell\reproduction = 0 And cell\live = 1 And cell\hunger = 0 cell\counter = 0 temp_x = cell\x temp_y = cell\y temp_lon = cell\longevity temp_rep = cell\reproduction temp_r = cell\r temp_g = cell\g temp_b = cell\b temp_mutation_r = cell\mutation_r temp_strength = cell\strength temp_hun_r = cell\hunger_r For i = 1 To cell\child If cell\mutation = Rand(1,cell\mutation_r) Mutation(temp_x,temp_y,temp_lon,temp_rep,temp_mutation_r,temp_strength,temp_hun_r) Else NewCell(temp_x,temp_y,temp_r,temp_g,temp_b,temp_lon,temp_rep,temp_mutation_r,temp_strength,temp_hun_r) EndIf Next EndIf If cell\live = 1 If cell\x + 10 > width cell\x = width - 10 ElseIf cell\x < 0 cell\x = 0 EndIf If cell\y + 10 > height cell\y = height - 10 ElseIf cell\y < 12 cell\y = 12 EndIf population = population + 1 Color cell\r,cell\g,cell\b Oval cell\x,cell\y,4,4,0 Else Delete cell EndIf Next If event = 1 event = 0 event_next = Rand(2000,10000) + generation event_power = Rand(-3,10) EndIf generation = generation + 1 Color 255,255,255 Rect 0,12,height,width,0 For farm.farm = Each farm If shown = True And farm\supply > 0 Rect farm\x,farm\y,farm\width,farm\height,0 EndIf If (generation Mod farm\regen) = 0 And farm\supply + farm\regen< 100 farm\supply = farm\supply + farm\regen EndIf food = food + farm\supply Next Flip Wend |
Comments
| ||
cool, I dont get exactly what its doing but it does look interesting.... |
| ||
think of it as the inside of a body, dude. its like the "nanobots" of our body. it works like our cells do. |
| ||
It's actually meant to replicate the basis of how cells live. Evolution and natural selection. |
| ||
Here is the library file you will undoubtedly need.Global generation = 0,population = 0 Global event,event_counter,event_next,event_power Global mouse_btn = False Global height# = 600 Global width# = 600 Global farm_height Global farm_width Global regen = 1000 Global food Global area = height*width Global farms Type cell Field x,y Field age,birth,longevity,live Field reproduction,child,counter Field r,g,b Field hunger,check,hunger_r,hun_cn Field mutation,mutation_r Field luck,strength Field species$ End Type Type farm Field x,y Field height,width Field supply Field regen,regen_r End Type Dim cells(800/10,(GraphicsHeight()/10)) event_next = Rand(2000,10000) event_power = Rand(-3,10) Function Mutation(temp_x,temp_y,temp_lon,temp_rep,temp_mutation_r,temp_hun_r,temp_strength) temp_x2 = temp_x + 10*Rand(-1,1) temp_y2 = temp_y + 10*Rand(-1,1) If temp_x2 < 0 temp_x2 = 0 ElseIf temp_x2 > 800 - 10 temp_x2 = 800 - 10 EndIf If temp_y2 < 12 temp_y2 = 12 ElseIf temp_y2 > GraphicsHeight() - 10 temp_y2 = GraphicsHeight() - 10 EndIf If cells(temp_x2/10,temp_y2/10) = 0 cells(temp_x2/10,temp_y2/10) = 1 gene_1 = Rand(0,1) gene_2 = Rand(0,1) gene_3 = Rand(0,1) gene_4 = Rand(0,1) gene_5 = Rand(0,1) cell.cell = New cell cell\x = temp_x2 cell\y = temp_y2 cell\live = 1 cell\r = Rand(100,255) cell\g = Rand(100,255) cell\b = Rand(100,255) cell\birth = generation cell\luck = Rand(0,10) cell\child = Rand(0,9) cell\mutation_r = temp_mutation_r cell\longevity = temp_lone cell\strength = temp_strength cell\reproduction = temp_rep cell\hunger_r = temp_hun_r If gene_1 = 1 cell\mutation_r = Rand(1,1000) EndIf If gene_2 = 1 cell\longevity = Rand(50,500) EndIf If gene_3 = 1 cell\reproduction = Rand(150,500) EndIf If gene_4 = 1 cell\strength = Rand(0,10) EndIf If gene_5 = 1 cell\hunger_r = Rand(25,50) EndIf cell\mutation = Rand(10,cell\mutation_r) EndIf End Function Function NewCell(temp_x,temp_y,temp_r,temp_g,temp_b,temp_lon,temp_rep,temp_mutation_r,temp_strength,temp_hun_r) temp_x2 = temp_x + 10*Rand(-1,1) temp_y2 = temp_y + 10*Rand(-1,1) If temp_x2 < 0 temp_x2 = temp_x2*-1 ElseIf temp_x2 > width - 10 temp_x2 = width - 10 EndIf If temp_y2 < 12 temp_y2 = 12 ElseIf temp_y2 > height - 10 temp_y2 = height - 10 EndIf If cells((temp_x2)/10,(temp_y2)/10) = 0 cells(temp_x2/10,temp_y2/10) = 1 cell.cell = New cell cell\live = 1 cell\luck = Rand(0,10) cell\r = temp_r cell\g = temp_g cell\b = temp_b cell\x = temp_x + 10*Rand(-1,1) cell\y = temp_y + 10*Rand(-1,1) cell\birth = generation cell\hunger_r = Rand(50,75) cell\longevity = temp_lon cell\reproduction = temp_rep cell\child = Rand(0,9) cell\mutation_r = temp_mutation_r cell\mutation = Rand(1,cell\mutation_r) cell\strength = temp_strength EndIf End Function Function MultiCell(num) For i = 1 To num cell.cell = New cell Repeat Repeat temp_x = Rand(800) Until (temp_x Mod 10) = 0 Repeat temp_y = Rand(GraphicsHeight()) Until (temp_y Mod 10) = 0 And temp_y > 20 Until cells((temp_x)/10,(temp_y)/10) = 0 cell\y = temp_y cell\x = temp_x cell\age = 0 cell\luck = Rand(0,10) cell\strength = Rand(0,10) cell\r = Rand(100,255) cell\g = Rand(100,255) cell\b = Rand(100,255) cell\birth = 0 cell\longevity = Rand(50,500) cell\live = 1 cell\hunger_r = Rand(25,50) cell\reproduction = Rand(150,500) cell\child = Rand(0,9) cell\mutation_r = Rand(1,1000) cell\mutation = Rand(1,cell\mutation_r) Next End Function |
Code Archives Forum