Optimized pick-random-elements-from-list method.
This commit is contained in:
@@ -33,6 +33,7 @@ import random
|
||||
import itertools
|
||||
from robotgame.logic.direction import *
|
||||
import robotgame.logic.rollingstone as rstone
|
||||
import robotgame.misc as misc
|
||||
|
||||
class Mirror(object):
|
||||
pass
|
||||
@@ -81,18 +82,16 @@ def generate_simple_playfield(nmirrors):
|
||||
succs = (lambda s: lambda d: succ(s(d)))(succs)
|
||||
source_direc = succ(source_direc)
|
||||
|
||||
emptys = set(itertools.product(range(12), range(12))) \
|
||||
- set(playfield.keys())
|
||||
emptys = set([(0, y) for y in range(12)]
|
||||
+ [(11, y) for y in range(12)]
|
||||
+ [(x, 0) for x in range(12)]
|
||||
+ [(x, 11) for x in range(12)])
|
||||
for _ in range(nlevers):
|
||||
if not emptys:
|
||||
raise Exception("Not enough space for all levers!")
|
||||
pos = random.choice(list(emptys))
|
||||
emptys = list(
|
||||
set([(0, y) for y in range(12)]
|
||||
+ [(11, y) for y in range(12)]
|
||||
+ [(x, 0) for x in range(12)]
|
||||
+ [(x, 11) for x in range(12)])
|
||||
- set(playfield.keys()))
|
||||
if len(emptys) < nlevers:
|
||||
raise Exception("Not enough space for all levers!")
|
||||
for pos in misc.pick_random_elements(emptys, nlevers):
|
||||
playfield[pos] = Lever
|
||||
emptys.remove(pos)
|
||||
return playfield
|
||||
|
||||
def _adjust(source_direc, w, h, x, y):
|
||||
|
||||
Reference in New Issue
Block a user