Advertisement
electronic_steve

ccs : datahelp2

Mar 14th, 2015
292
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Lua 6.34 KB | None | 0 0
  1. mapX=5
  2. mapY=5
  3. mapZ=5
  4. maxloop=-1 -- максимальное число циклов обработки
  5.  
  6.  
  7.  
  8.  
  9.  
  10.  
  11.  
  12. map={}
  13. drawz=1
  14. gh=love.graphics
  15. drawscale=10
  16. htime=0
  17. groups={}
  18. dim={}
  19. dims={}
  20. drawx=0
  21. drawy=0
  22. npower=0
  23. GroupPower={}
  24. SumOfDimensions={}
  25. GroupSumPower=0
  26. maps={}
  27. TotalNumberOfBlocksInAllGroups=0
  28. failstep=0
  29. loop=0
  30. drawblocks=0
  31. test=0
  32. autorestart=false
  33. drawrestart=0
  34.  
  35.  
  36. start=0
  37. draw=true
  38. blocksmap={}
  39. log={}
  40. loopcount=0
  41. mouselog={}
  42. function saveinblocksmap(x,y,z)
  43. blocksmap[#blocksmap+1]={x,y,z,map[x][y][z]}
  44.  
  45. end
  46. function getblockmap(i)
  47. return blocksmap[i][1],blocksmap[i][2],blocksmap[i][3],blocksmap[i][4]
  48.  
  49. end
  50.  
  51.  
  52.  
  53.  
  54.  
  55.  
  56.  
  57.  seed=os.time()+math.random(-100000,1000000000)
  58. math.randomseed(seed)
  59.  
  60.  
  61.  
  62. generatemapstandart()
  63. mgr1=0
  64. mgr2=0
  65. mgr3=0
  66. generatemap(mgr1,mgr2,mgr3)
  67.  log[#log+1]= mapX
  68. log[#log+1]= mapY
  69.  log[#log+1]= mapZ
  70.  log[#log+1]= mgr1
  71. log[#log+1]= mgr2
  72. log[#log+1]= mgr3
  73.  
  74. function mima(mi,n,ma)
  75. local x=math.min(n,ma)
  76.  
  77. local nx=math.max(mi,x)
  78.  
  79. return nx
  80. end  
  81. function resetmap()
  82. for I=1,#blocksmap do
  83. x,y,z,name=getblockmap(I)
  84.   if map[x][y][z]==-2 then else map[x][y][z]=-1 end
  85.    
  86.  
  87. end
  88.    groups=nil
  89. groups={}
  90.    dim=nil
  91. dim={}
  92. dims=nil
  93. dims={}
  94. blocksmap=nil
  95. blocksmap={}
  96. end
  97.  
  98. function resetall()
  99. drawblocks=TotalNumberOfBlocksInAllGroups
  100. TotalNumberOfBlocksInAllGroups=0
  101. SumOfDimensions=nil
  102. SumOfDimensions={}
  103. SizePower=0
  104.  
  105. GroupPower=nil
  106. GroupPower={}
  107. GroupSumPower=0
  108.  
  109. end
  110.  
  111.  
  112.  
  113.  
  114. function savestructure()
  115.  
  116.     local file = io.open("SMRCD.txt","r")
  117.                 if file then
  118.                 oldpowerfile = file:read("*l")
  119.         end
  120.        
  121.          
  122. local N=0
  123.      for w in string.gmatch(oldpowerfile, "%d+") do
  124.        
  125.        
  126.         N=N+1
  127.         if N==1 then
  128.         oldpower=tonumber(w)
  129.  
  130.         end
  131.  
  132.      end
  133.    
  134.     if npower>oldpower then
  135.  local file = io.open("SMRCD.txt","w")
  136.                 if file then
  137.                 file:write(" ")
  138.                 file:close()
  139.         end
  140.    
  141.        
  142.      local file = io.open("SMRCD.txt","a")
  143.                 if file then
  144.                 file:write(npower.." ")
  145.                 file:close()
  146.         end
  147.  
  148.  
  149.  
  150. for i=1,#log do
  151.  
  152.         local file = io.open("SMRCD.txt","a")
  153.                 if file then
  154.                 file:write(log[i].." ")
  155.                 file:close()
  156.         end end
  157.  
  158.  
  159.  
  160.     end
  161.        
  162.        
  163.  
  164. end
  165.  
  166. function updateall()
  167.  for x=1,mapX do
  168.  for y=1,mapY do
  169.   for z=1,mapZ do
  170.    
  171.   saveinblocksmap(x,y,z,map[x][y][z])
  172.  
  173.   end end end
  174.  
  175.  
  176. if loop==maxloop then
  177.    savestructure()
  178.    if autorestart then
  179.    
  180.      resetall()
  181.     resetmap()
  182.  
  183. npower=0
  184. for x=1,mapX do
  185. for y=1,mapY do
  186. for z=1,mapZ do
  187. map[x][y][z]=-2
  188. end end end
  189. for x=1,mapX do
  190. for y=1,mapY do
  191. for z=1,mapZ do
  192. maps[x][y][z]=-2
  193. end end end
  194. blocksmap=nil blocksmap={}
  195. generatemap()
  196. loop=0
  197.  
  198.  
  199.  
  200. generatemapstandart()
  201. mgr1=math.random(1,2)
  202. mgr2=math.random(1,2)
  203. mgr3=math.random(1,2)
  204. generatemap(mgr1,mgr2,mgr3)
  205.  log[#log+1]= mgr1
  206. log[#log+1]= mgr2
  207. log[#log+1]= mgr3
  208.  
  209.  
  210.  
  211.  
  212.  
  213.  
  214.  end
  215.  
  216.  else
  217.  
  218. loop=loop+1
  219.  
  220.  if loop==1 then  else
  221.  
  222.  
  223.  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)
  224.  
  225. brush[r1](r2,r3,r4,r5)
  226.  
  227.  end
  228.  
  229.  
  230.  
  231.  
  232.  
  233. local fail=0
  234. for I=1,#blocksmap do
  235. x,y,z,name=getblockmap(I)
  236.    if map[x][y][z]==-1 then
  237.     groups[#groups+1]={}
  238.     map[x][y][z]=#groups
  239.     dim[#groups]={}
  240.     dims[#groups]={}
  241.     for i=1,(mapX+mapY+mapZ)/3 do
  242.     for I2=1,#blocksmap do
  243. x2,y2,z2,name=getblockmap(I2)
  244.         if map[x2][y2][z2]==#groups then
  245.         reactorupdate(x2,y2,z2,-1,#groups) else fail=fail+1
  246.        
  247.        
  248.        
  249.       end
  250.    
  251.      
  252.    end
  253.   end
  254.  end
  255. end
  256. if #groups>0 then
  257. dim[#dim]={}
  258.  
  259.  for i=1, #dim do
  260.     for I2=1,#blocksmap do
  261. x,y,z,name=getblockmap(I2)
  262.      if map[x][y][z]==i then dim[i][#dim[i]+1]={x,y,z}
  263.    
  264.    
  265.    end
  266.   end
  267.  end
  268. end
  269.  
  270. for i=1, #groups do
  271. for n=1, #dim[i] do
  272.  
  273.    
  274.    
  275.    
  276.     if n==1 then
  277. minx=dim[i][n][1]
  278. maxx=dim[i][n][1]
  279. miny=dim[i][n][2]
  280. maxy=dim[i][n][2]
  281. minz=dim[i][n][3]
  282. maxz=dim[i][n][3]
  283.  else
  284. minx=math.min (dim[i][n][1],minx)
  285. maxx=math.max (dim[i][n][1],maxx)
  286. miny=math.min (dim[i][n][2],miny)
  287. maxy=math.max (dim[i][n][2],maxy)
  288. minz=math.min (dim[i][n][3],minz)
  289. maxz=math.max (dim[i][n][3],maxz)
  290.  
  291.  end
  292.  
  293.  
  294.  end
  295.  
  296.  dims[i]={maxx-(minx-1),maxy-(miny-1),maxz-(minz-1)}
  297.  
  298.  
  299.  
  300.  end
  301.  
  302.  for i=1, #groups do
  303.  SumOfDimensions[i]=dims[i][1]+dims[i][2]+dims[i][3]
  304.  SizePower = 2000000 / ( 1 + 1.000696^(-0.333*(SumOfDimensions[i]/3)^1.7)) - 1000000
  305.  
  306.  BlockPower = 25 * #dim[i]
  307.  SizePower =math.min(SizePower,1000000 )
  308.  GroupPower[i] = BlockPower + SizePower
  309.  
  310.   GroupSumPower=GroupSumPower+(SumOfDimensions[i]/3)^1.7
  311.  
  312.  
  313.  
  314.   TotalNumberOfBlocksInAllGroups = TotalNumberOfBlocksInAllGroups+#dim[i]
  315.   end
  316.   GroupSumSizePower = 2000000 / ( 1 + 1.000696^(-0.333 * GroupSumPower)) - 1000000
  317.   BlockPower = 25 * TotalNumberOfBlocksInAllGroups
  318.  TotalPower = math.floor(BlockPower + GroupSumSizePower)
  319.  
  320.  
  321. if npower<TotalPower then
  322.  
  323. log[#log+1]=r1
  324. log[#log+1]=r2
  325. log[#log+1]=r3
  326. log[#log+1]=r4
  327. log[#log+1]=r5
  328. for i=1, #mouselog do
  329. log[#log+1]=mouselog[i][1]
  330. log[#log+1]=mouselog[i][2]
  331. log[#log+1]=mouselog[i][3]
  332. log[#log+1]=mouselog[i][4]
  333. log[#log+1]=mouselog[i][5]
  334.  
  335.  
  336.  end
  337.   savemap() npower=TotalPower  else
  338.  
  339.  
  340.   loadmap()
  341.  
  342.  
  343.  
  344.  failstep=failstep+1
  345.  
  346.  
  347.  
  348.  
  349.  end
  350. resetall()
  351. end
  352.  
  353. mouselog=nil mouselog={}
  354.  
  355.  
  356.  
  357. end
  358.  
  359. function reactorupdate(x,y,z,d,d2)
  360.  
  361.  
  362.  
  363.     if  map[x][y][z]==d then map[x][y][z]=d2 end
  364.     if  map[limit(x+1,mapX)][y][z]==d then map[limit(x+1,mapX)][y][z]=d2 end
  365.     if  map[limit(x-1,mapX)][y][z]==d then map[limit(x-1,mapX)][y][z]=d2 end
  366.     if  map[x][limit(y+1,mapY)][z]==d then map[x][limit(y+1,mapY)][z]=d2 end
  367.     if  map[x][limit(y-1,mapY)][z]==d then map[x][limit(y-1,mapY)][z]=d2 end
  368.     if  map[x][y][limit(z+1,mapZ)]==d then map[x][y][limit(z+1,mapZ)]=d2 end
  369.     if  map[x][y][limit(z-1,mapZ)]==d then map[x][y][limit(z-1,mapZ)]=d2 end
  370.    
  371. end
  372.  
  373. function limit(n,n1)
  374. local x=math.min(n,n1)
  375.  
  376. local nx=math.max(1,x)
  377.  
  378. return nx
  379.  
  380. end
  381.  
  382. function savemap()
  383.   for x=1,mapX do
  384.    for y=1,mapY do
  385.     for z=1,mapZ do
  386. maps[x][y][z]=map[x][y][z]
  387.  end end
  388. end end
  389. function loadmap()
  390.   for x=1,mapX do
  391.    for y=1,mapY do
  392.     for z=1,mapZ do
  393. map[x][y][z]=maps[x][y][z]
  394. end end
  395. end end  
  396. function mimat(mi,n,ma)
  397. if n<mi or n>ma then return false else return true end
  398.  
  399.  
  400. end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement