本文整理汇总了Python中direct.showbase.RandomNumGen.RandomNumGen.shuffle方法的典型用法代码示例。如果您正苦于以下问题:Python RandomNumGen.shuffle方法的具体用法?Python RandomNumGen.shuffle怎么用?Python RandomNumGen.shuffle使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类direct.showbase.RandomNumGen.RandomNumGen
的用法示例。
在下文中一共展示了RandomNumGen.shuffle方法的3个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的Python代码示例。
示例1: scheduleDrops
# 需要导入模块: from direct.showbase.RandomNumGen import RandomNumGen [as 别名]
# 或者: from direct.showbase.RandomNumGen.RandomNumGen import shuffle [as 别名]
def scheduleDrops(self, genId = None):
if genId is None:
genId = self.getCurGeneration()
gen = self._id2gen[genId]
if gen.hasBeenScheduled:
return
fruitIndex = int((gen.startTime + 0.5 * self.DropPeriod) / PartyGlobals.CatchActivityDuration)
fruitNames = ['apple',
'orange',
'pear',
'coconut',
'watermelon',
'pineapple']
fruitName = fruitNames[fruitIndex % len(fruitNames)]
rng = RandomNumGen(genId + self._generationSeedBase)
gen.droppedObjNames = [fruitName] * self.numFruits + ['anvil'] * self.numAnvils
rng.shuffle(gen.droppedObjNames)
dropPlacer = PartyRegionDropPlacer(self, gen.numPlayers, genId, gen.droppedObjNames, startTime=gen.startTime)
gen.numItemsDropped = 0
tIndex = gen.startTime % PartyGlobals.CatchActivityDuration
tPercent = float(tIndex) / PartyGlobals.CatchActivityDuration
gen.numItemsDropped += dropPlacer.skipPercent(tPercent)
while not dropPlacer.doneDropping(continuous=True):
nextDrop = dropPlacer.getNextDrop()
gen.dropSchedule.append(nextDrop)
gen.hasBeenScheduled = True
return
示例2: __init__
# 需要导入模块: from direct.showbase.RandomNumGen import RandomNumGen [as 别名]
# 或者: from direct.showbase.RandomNumGen.RandomNumGen import shuffle [as 别名]
class CogdoMazeFactory:
def __init__(self, randomNumGen, width, height, frameWallThickness = Globals.FrameWallThickness, cogdoMazeData = CogdoMazeData):
self._rng = RandomNumGen(randomNumGen)
self.width = width
self.height = height
self.frameWallThickness = frameWallThickness
self._cogdoMazeData = cogdoMazeData
self.quadrantSize = self._cogdoMazeData.QuadrantSize
self.cellWidth = self._cogdoMazeData.QuadrantCellWidth
def getMazeData(self):
if not hasattr(self, '_data'):
self._generateMazeData()
return self._data
def createCogdoMaze(self, flattenModel = True):
if not hasattr(self, '_maze'):
self._loadAndBuildMazeModel(flatten=flattenModel)
return CogdoMaze(self._model, self._data, self.cellWidth)
def _gatherQuadrantData(self):
self.openBarriers = []
barrierItems = range(Globals.TotalBarriers)
self._rng.shuffle(barrierItems)
for i in barrierItems[0:len(barrierItems) - Globals.NumBarriers]:
self.openBarriers.append(i)
self.quadrantData = []
quadrantKeys = self._cogdoMazeData.QuadrantCollisions.keys()
self._rng.shuffle(quadrantKeys)
i = 0
for y in range(self.height):
for x in range(self.width):
key = quadrantKeys[i]
collTable = self._cogdoMazeData.QuadrantCollisions[key]
angle = self._cogdoMazeData.QuadrantAngles[self._rng.randint(0, len(self._cogdoMazeData.QuadrantAngles) - 1)]
self.quadrantData.append((key, collTable[angle], angle))
i += 1
if x * y >= self._cogdoMazeData.NumQuadrants:
i = 0
def _generateBarrierData(self):
data = []
for y in range(self.height):
data.append([])
for x in range(self.width):
if x == self.width - 1:
ax = -1
else:
ax = 1
if y == self.height - 1:
ay = -1
else:
ay = 1
data[y].append([ax, ay])
dirUp = 0
dirDown = 1
dirLeft = 2
dirRight = 3
def getAvailableDirections(ax, ay, ignore = None):
dirs = []
if ax - 1 >= 0 and data[ay][ax - 1][BARRIER_DATA_RIGHT] == 1 and (ax, ay) != ignore:
dirs.append(dirLeft)
if ax + 1 < self.width and data[ay][ax][BARRIER_DATA_RIGHT] == 1 and (ax, ay) != ignore:
dirs.append(dirRight)
if ay - 1 >= 0 and data[ay - 1][ax][BARRIER_DATA_TOP] == 1 and (ax, ay) != ignore:
dirs.append(dirDown)
if ay + 1 < self.height and data[ay][ax][BARRIER_DATA_TOP] == 1 and (ax, ay) != ignore:
dirs.append(dirUp)
return dirs
visited = []
def tryVisitNeighbor(ax, ay, ad):
if ad == dirUp:
if data[ay][ax] in visited:
return None
visited.append(data[ay][ax])
data[ay][ax][BARRIER_DATA_TOP] = 0
ay += 1
elif ad == dirDown:
if data[ay - 1][ax] in visited:
return None
visited.append(data[ay - 1][ax])
data[ay - 1][ax][BARRIER_DATA_TOP] = 0
ay -= 1
elif ad == dirLeft:
if data[ay][ax - 1] in visited:
return None
visited.append(data[ay][ax - 1])
data[ay][ax - 1][BARRIER_DATA_RIGHT] = 0
ax -= 1
elif ad == dirRight:
if data[ay][ax] in visited:
return None
visited.append(data[ay][ax])
data[ay][ax][BARRIER_DATA_RIGHT] = 0
#.........这里部分代码省略.........
示例3: MazeAI
# 需要导入模块: from direct.showbase.RandomNumGen import RandomNumGen [as 别名]
# 或者: from direct.showbase.RandomNumGen.RandomNumGen import shuffle [as 别名]
class MazeAI(DistributedObjectAI):
notify = directNotify.newCategory("MazeAI")
TurnChance = 75
ForkChance = 20
StopChance = 10
def __init__(self, air, gameId):
DistributedObjectAI.__init__(self, air)
self.gameId = gameId
self.xsize = 0
self.ysize = 0
self.numWalls = 0
self.map = None
self.root = None
self.prevPlayers = {}
def getSize(self):
return self.xsize, self.ysize
def getNumWalls(self):
return self.numWalls
def deleteMaze(self):
if self.map:
for row in self.map:
for cell in row:
self.air.zoneAllocator.free(cell.zoneId)
cell.requestDelete()
def generateMaze(self, xsize, ysize,
prevMaze = None, seed = None):
if seed is None:
seed = int(time.time())
self.random = RandomNumGen(seed)
# Delete the old maze, if any
self.deleteMaze()
self.xsize = xsize
self.ysize = ysize
self.map = []
for sy in range(self.ysize):
row = []
for sx in range(self.xsize):
zoneId = self.air.zoneAllocator.allocate()
cell = CellAI(self.air)
cell.setGeometry(Globals.AllDirs, sx, sy)
cell.generateWithRequired(zoneId)
row.append(cell)
self.map.append(row)
# Start by choosing a random square and a random direction.
self.numSquares = self.xsize * self.ysize - 1
self.paths = []
nextStep = self.__findEmptySquare()
self.paths.append(nextStep)
while self.numSquares > 0:
self.__generateMazeSteps()
# Count up the number of walls.
walls = []
for row in self.map:
for cell in row:
walls += cell.getWalls()
self.numWalls = len(walls)
random.shuffle(walls)
if prevMaze:
# Put our previous art paintings up on the walls,
# including any poster data.
for i in range(len(prevMaze.artPaintings)):
dir, name, color, posterData, imgData = prevMaze.artPaintings[i]
sx, sy, wallDir = walls[i]
cell = self.map[sy][sx]
while posterData[0] and cell.posterDir:
# We've already placed a poster in this cell. Go
# on to the next one.
del walls[i]
sx, sy, wallDir = walls[i]
cell = self.map[sy][sx]
if dir & Globals.AllDirs != 0:
# It's not a floor or ceiling, so use the wall we
# picked, instead of the wall it was on in the
# previous maze.
dir = wallDir
else:
# It is a floor or ceiling, so keep it there.
pass
cell.preloadPrevPainting(dir, posterData, imgData)
# Record the player's color so we can identify him
# when he comes back in and give him the points for
# this paint immediately.
#.........这里部分代码省略.........