def RaiseOceanAreas(self):
#init ocean map to be 1 at every water space
oceanMap = array('i')
for i in range(0,self.mapHeight*self.mapWidth):
oceanMap.append(0)
csea = 0
cland = 0
ctot = 0
for y in range(1,self.mapHeight-1):
for x in range(0,self.mapWidth):
i = self.GetIndex(x,y)
if self.map[i] <= self.seaLevel:
oceanMap[i] = 1
# mapString = ""
# for y in range(0,self.mapHeight):
# for x in range(0,self.mapWidth):
# i = self.GetIndex(x,y)
# if oceanMap[i] == 1:
# mapString += "."
# else:
# mapString += "X"
# mapString += "\n"
# print "Ocean Map"
# print mapString
#shrink it, now it's only ocean spaces
oceanMap = self.ShrinkOceanAreaBits(oceanMap, 1)
#again, now there's a buffer of ocean tiles
oceanMap = self.ShrinkOceanAreaBits(oceanMap, 1)
#one more time for a buffer for any land we create
outerOceanMap = oceanMap
oceanMap = self.ShrinkOceanAreaBits(oceanMap, 1)
#now some random shrinkage
oceanMap = self.ShrinkOceanAreaBits(oceanMap, .4)
oceanMap = self.ShrinkOceanAreaBits(oceanMap, .4)
oceanMap = self.ShrinkOceanAreaBits(oceanMap, .4)
if self.mapWidth >= 88:
oceanMap = self.ShrinkOceanAreaBits(oceanMap, .3)
if self.mapWidth >= 104:
oceanMap = self.ShrinkOceanAreaBits(oceanMap, .3)
if self.mapWidth >= 128:
oceanMap = self.ShrinkOceanAreaBits(oceanMap, .3)
# mapString = ""
# for y in range(0,self.mapHeight):
# for x in range(0,self.mapWidth):
# i = self.GetIndex(x,y)
# if oceanMap[i] == 1:
# mapString += "."
# else:
# mapString += "O"
# mapString += "\n"
# print "Ocean Map after shrinking"
# print mapString
innerOceanMap = self.ShrinkOceanAreaBits(oceanMap, 1)
#OK, now it's safe to raise the ocean up!
for y in range(self.mapHeight):
for x in range(self.mapWidth):
i = self.GetIndex(x,y)
if innerOceanMap[i] == 1:
self.map[i] = self.map[i] + .4
elif oceanMap[i] == 1:
self.map[i] = (self.map[i] + self.seaLevel)/2.0 + .2
elif outerOceanMap[i] == 1:
self.map[i] = self.seaLevel - .01
def ShrinkOceanAreaBits(self, map, chance):
#Each 'True' adjacent to at least one 'False' becomes a 'False' with probability <chance>
newMap = array('i')
for i in range(0,self.mapHeight*self.mapWidth):
newMap.append(0)
for y in range(self.mapHeight):
for x in range(self.mapWidth):
i = self.GetIndex(x,y)
if map[i] == 1:
newMap[i] = 1
if (chance == 1) or (chance > PWRand.random()):
for yy in range(y-1,y+2):
if newMap[i] == 0:
break
for xx in range(x-1,x+2):
ii = self.GetIndex(xx,yy)
if map[ii] == 0:
newMap[i] = 0
break
return newMap