Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- mapX=5
- mapY=5
- mapZ=5
- maxloop=-1 -- максимальное число циклов обработки
- map={}
- drawz=1
- gh=love.graphics
- drawscale=10
- htime=0
- groups={}
- dim={}
- dims={}
- drawx=0
- drawy=0
- npower=0
- GroupPower={}
- SumOfDimensions={}
- GroupSumPower=0
- maps={}
- TotalNumberOfBlocksInAllGroups=0
- failstep=0
- loop=0
- drawblocks=0
- test=0
- autorestart=false
- drawrestart=0
- start=0
- draw=true
- blocksmap={}
- log={}
- loopcount=0
- mouselog={}
- function saveinblocksmap(x,y,z)
- blocksmap[#blocksmap+1]={x,y,z,map[x][y][z]}
- end
- function getblockmap(i)
- return blocksmap[i][1],blocksmap[i][2],blocksmap[i][3],blocksmap[i][4]
- end
- seed=os.time()+math.random(-100000,1000000000)
- math.randomseed(seed)
- generatemapstandart()
- mgr1=0
- mgr2=0
- mgr3=0
- generatemap(mgr1,mgr2,mgr3)
- log[#log+1]= mapX
- log[#log+1]= mapY
- log[#log+1]= mapZ
- log[#log+1]= mgr1
- log[#log+1]= mgr2
- log[#log+1]= mgr3
- function mima(mi,n,ma)
- local x=math.min(n,ma)
- local nx=math.max(mi,x)
- return nx
- end
- function resetmap()
- for I=1,#blocksmap do
- x,y,z,name=getblockmap(I)
- if map[x][y][z]==-2 then else map[x][y][z]=-1 end
- end
- groups=nil
- groups={}
- dim=nil
- dim={}
- dims=nil
- dims={}
- blocksmap=nil
- blocksmap={}
- end
- function resetall()
- drawblocks=TotalNumberOfBlocksInAllGroups
- TotalNumberOfBlocksInAllGroups=0
- SumOfDimensions=nil
- SumOfDimensions={}
- SizePower=0
- GroupPower=nil
- GroupPower={}
- GroupSumPower=0
- end
- function savestructure()
- local file = io.open("SMRCD.txt","r")
- if file then
- oldpowerfile = file:read("*l")
- end
- local N=0
- for w in string.gmatch(oldpowerfile, "%d+") do
- N=N+1
- if N==1 then
- oldpower=tonumber(w)
- end
- end
- if npower>oldpower then
- local file = io.open("SMRCD.txt","w")
- if file then
- file:write(" ")
- file:close()
- end
- local file = io.open("SMRCD.txt","a")
- if file then
- file:write(npower.." ")
- file:close()
- end
- for i=1,#log do
- local file = io.open("SMRCD.txt","a")
- if file then
- file:write(log[i].." ")
- file:close()
- end end
- end
- end
- function updateall()
- for x=1,mapX do
- for y=1,mapY do
- for z=1,mapZ do
- saveinblocksmap(x,y,z,map[x][y][z])
- end end end
- if loop==maxloop then
- savestructure()
- if autorestart then
- resetall()
- resetmap()
- npower=0
- for x=1,mapX do
- for y=1,mapY do
- for z=1,mapZ do
- map[x][y][z]=-2
- end end end
- for x=1,mapX do
- for y=1,mapY do
- for z=1,mapZ do
- maps[x][y][z]=-2
- end end end
- blocksmap=nil blocksmap={}
- generatemap()
- loop=0
- generatemapstandart()
- mgr1=math.random(1,2)
- mgr2=math.random(1,2)
- mgr3=math.random(1,2)
- generatemap(mgr1,mgr2,mgr3)
- log[#log+1]= mgr1
- log[#log+1]= mgr2
- log[#log+1]= mgr3
- end
- else
- loop=loop+1
- if loop==1 then else
- r1,r2,r3,r4,r5=math.random(1,#brush),math.random(1,mapX),math.random(1,mapY),math.random(1,mapZ),math.random(1,2)
- brush[r1](r2,r3,r4,r5)
- end
- local fail=0
- for I=1,#blocksmap do
- x,y,z,name=getblockmap(I)
- if map[x][y][z]==-1 then
- groups[#groups+1]={}
- map[x][y][z]=#groups
- dim[#groups]={}
- dims[#groups]={}
- for i=1,(mapX+mapY+mapZ)/3 do
- for I2=1,#blocksmap do
- x2,y2,z2,name=getblockmap(I2)
- if map[x2][y2][z2]==#groups then
- reactorupdate(x2,y2,z2,-1,#groups) else fail=fail+1
- end
- end
- end
- end
- end
- if #groups>0 then
- dim[#dim]={}
- for i=1, #dim do
- for I2=1,#blocksmap do
- x,y,z,name=getblockmap(I2)
- if map[x][y][z]==i then dim[i][#dim[i]+1]={x,y,z}
- end
- end
- end
- end
- for i=1, #groups do
- for n=1, #dim[i] do
- if n==1 then
- minx=dim[i][n][1]
- maxx=dim[i][n][1]
- miny=dim[i][n][2]
- maxy=dim[i][n][2]
- minz=dim[i][n][3]
- maxz=dim[i][n][3]
- else
- minx=math.min (dim[i][n][1],minx)
- maxx=math.max (dim[i][n][1],maxx)
- miny=math.min (dim[i][n][2],miny)
- maxy=math.max (dim[i][n][2],maxy)
- minz=math.min (dim[i][n][3],minz)
- maxz=math.max (dim[i][n][3],maxz)
- end
- end
- dims[i]={maxx-(minx-1),maxy-(miny-1),maxz-(minz-1)}
- end
- for i=1, #groups do
- SumOfDimensions[i]=dims[i][1]+dims[i][2]+dims[i][3]
- SizePower = 2000000 / ( 1 + 1.000696^(-0.333*(SumOfDimensions[i]/3)^1.7)) - 1000000
- BlockPower = 25 * #dim[i]
- SizePower =math.min(SizePower,1000000 )
- GroupPower[i] = BlockPower + SizePower
- GroupSumPower=GroupSumPower+(SumOfDimensions[i]/3)^1.7
- TotalNumberOfBlocksInAllGroups = TotalNumberOfBlocksInAllGroups+#dim[i]
- end
- GroupSumSizePower = 2000000 / ( 1 + 1.000696^(-0.333 * GroupSumPower)) - 1000000
- BlockPower = 25 * TotalNumberOfBlocksInAllGroups
- TotalPower = math.floor(BlockPower + GroupSumSizePower)
- if npower<TotalPower then
- log[#log+1]=r1
- log[#log+1]=r2
- log[#log+1]=r3
- log[#log+1]=r4
- log[#log+1]=r5
- for i=1, #mouselog do
- log[#log+1]=mouselog[i][1]
- log[#log+1]=mouselog[i][2]
- log[#log+1]=mouselog[i][3]
- log[#log+1]=mouselog[i][4]
- log[#log+1]=mouselog[i][5]
- end
- savemap() npower=TotalPower else
- loadmap()
- failstep=failstep+1
- end
- resetall()
- end
- mouselog=nil mouselog={}
- end
- function reactorupdate(x,y,z,d,d2)
- if map[x][y][z]==d then map[x][y][z]=d2 end
- if map[limit(x+1,mapX)][y][z]==d then map[limit(x+1,mapX)][y][z]=d2 end
- if map[limit(x-1,mapX)][y][z]==d then map[limit(x-1,mapX)][y][z]=d2 end
- if map[x][limit(y+1,mapY)][z]==d then map[x][limit(y+1,mapY)][z]=d2 end
- if map[x][limit(y-1,mapY)][z]==d then map[x][limit(y-1,mapY)][z]=d2 end
- if map[x][y][limit(z+1,mapZ)]==d then map[x][y][limit(z+1,mapZ)]=d2 end
- if map[x][y][limit(z-1,mapZ)]==d then map[x][y][limit(z-1,mapZ)]=d2 end
- end
- function limit(n,n1)
- local x=math.min(n,n1)
- local nx=math.max(1,x)
- return nx
- end
- function savemap()
- for x=1,mapX do
- for y=1,mapY do
- for z=1,mapZ do
- maps[x][y][z]=map[x][y][z]
- end end
- end end
- function loadmap()
- for x=1,mapX do
- for y=1,mapY do
- for z=1,mapZ do
- map[x][y][z]=maps[x][y][z]
- end end
- end end
- function mimat(mi,n,ma)
- if n<mi or n>ma then return false else return true end
- end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement