def draw_branch(self, pos, level = 0, id = 0, true_branch = True): #draw the condition blocks self.Add((CodeContainer(self.getCodeName(level, id), self.surf, pos))) spread = 75*(2**(self.levels-level-2)) truepos = Base.tuple_add(pos, (75*2, -spread)) falsepos = Base.tuple_add(pos, (75*2, spread)) if level == self.levels-1: self.Add(CodeContainer(self.getCodeName(level+1, 2*id), self.surf, truepos)) self.Add(CodeContainer(self.getCodeName(level+1, 2*id+1), self.surf, falsepos)) return id+1 else: self.draw_branch(truepos, level + 1, 2*id, True) self.draw_branch(falsepos, level + 1, 2*id+1, False)
def Init(self): if hasattr(self,"world"): del self.world if hasattr(self,"Swarmers"): del self.Swarmers Game.Init(self) self.clockrate = 100 Base.set_resource_path('Resources') # offscreen = self.screen.get_size() self.initSwarmers(2,5) self.AddFeature("World", self.world) self.AddFeature("swarmers", self.Swarmers) self.ui = HiveUI(self.screen) self.AddFeature("Programmer", self.ui) self.lastCode = None
def Retreat(self): if self.Enemies == []: return False # print self.Name, "is Retreating" vector = [0, 0] for enemy in self.Enemies: distx, disty = Base.tuple_add(enemy[1].getPos(), self.getPos(), '-') if distx == 0:forcex = random.choice([-1, 0, 1]) else:forcex = self.Sensors/distx if disty == 0:forcey = random.choice([-1, 0, 1]) else:forcey = self.Sensors/disty vector = Base.tuple_add(vector, (-forcex,-forcey)) x, y = vector if self.move(x,y): return True else: return False
def step(self): if self.LaunchCount == 0: vx, vy = self.Velocity self.Translate(self.Velocity) self.Velocity = (vx, vy + 1) try:self.Angle = math.degrees(math.atan(float(vy+1)/vx)) except:self.Angle = 90 self.RotateTo(self.Angle) self.LaunchCount = Base.limit(self.LaunchCount+1, -1, 1, True)
def setGunPos(self): C = self.Sprite.rect.center try: xadd = int(math.ceil(20*math.cos(math.radians(self.Angle)))) except: xadd = 0 try: yadd = int(math.ceil(20*math.sin(math.radians(self.Angle)))) except: yadd = 10 if not self.Facing: xadd*=-1 GunPos = Base.tuple_add(C, (xadd, -yadd)) return GunPos
def makeUI(self): last = Base.tuple_add(self.surf.get_rect().center, (-(111+self.levels*75), -75/2)) Start = GameObject("Start", self.surf, "code-start.png", last) self.Add(Start) start_code = Base.tuple_add(last, (75*2, 0)) self.draw_branch(start_code) Code1 = CodeElement("Code1", "def cond1(self):\n\ if len(self.Enemies) > len(self.Allies):\n\ return True\n\ else:\n\ return False#dividercond1", self.surf, "code-start.png", (10,10)) Code2 = CodeElement("Code2", "Retreat", self.surf, "code-start.png", (100,10)) Code3 = CodeElement("Code3", "Attack", self.surf, "code-start.png", (190,10)) Code1.SetSnapTo(self.get_container_sprites(),True) Code2.SetSnapTo(self.get_container_sprites(),True) Code3.SetSnapTo(self.get_container_sprites(),True) self.Add(Code1, Code2, Code3) Compile = UIitem("Compile", self.surf, "code-start.png", Base.tuple_add(self.surf.get_size(), (-100,-100))) Compile.SetOnClick({"Action": "Compile"}) self.Add(Compile)
def GetTileCenter(self, *argsv): position = [0, 0] if len(argsv) == 1: arg = argsv[0] col = arg[0] row = arg[1] else: col = argsv[0] row = argsv[1] offset = self.Sprite.rect.topleft position[0] = int((col+0.5)*self.tile_width) position[1] = int((row+0.5)*self.tile_height) position = Base.tuple_add(position, offset) return position
def Init(self): Game.Init(self) self.init_USB() Base.set_resource_path('Resources') offscreen = self.screen.get_size() T1Gun = TankGun(self.screen, offscreen) T2Gun = TankGun(self.screen, offscreen) T1Power = TankPBar(self.screen, (10,10)) T2Power = TankPBar(self.screen, (self.screen.get_width()-60,10)) Shell1 = Shell("Shell1", self.screen, "LShell.PNG", True, offscreen) Shell2 = Shell("Shell2", self.screen, "RShell.PNG", False, offscreen) Tank1 = Tank("T1", self.screen, "LTank.PNG", T1Gun, T1Power, Shell1, True, (9,85), offscreen) Tank2 = Tank("T2", self.screen, "RTank.PNG", T2Gun, T2Power, Shell2, False, (9,85), offscreen) Tank1.Reposition((70,self.screen.get_height()-Tank1.Size()[1]-25)) Tank2.Reposition((self.screen.get_width()-Tank2.Size()[0]-70, self.screen.get_height()-Tank2.Size()[1]-25)) Tanks = GameplayObjects(self.screen, Tank1, Tank2) Shell1.AddAnimationList("Explode", AnimationList(["Explo_"+str(i+1)+".PNG" for i in range(20)])) Shell2.AddAnimationList("Explode", AnimationList(["Explo_"+str(i+1)+".PNG" for i in range(20)])) Shells = GameplayObjects(self.screen, Shell1, Shell2) shells = ([Shells.Get("Shell1"), Shells.Get("Shell2")]) tanks = ([Tanks.Get("T1"),Tanks.Get("T2")]) Checker = HitCheck(shells, tanks) self.AddFeature("T1Gun", T1Gun) self.AddFeature("T2Gun", T2Gun) self.AddFeature("T1Pbar", T1Power) self.AddFeature("T2Pbar", T2Power) self.AddFeature("Tanks", Tanks) self.AddFeature("Shells", Shells) self.AddFeature("Global", Checker)
def getUnits(self, center = (0, 0), radius = 0, alliance = -1): reqUnits = [] if alliance == -1: reqUnits.extend(self.Units) else: for unit in self.Units: if unit.Alliance == alliance and unit.isAlive(): reqUnits.append(unit) if radius == 0: return reqUnits unitList = reqUnits[:] for unit in reqUnits: if Base.distance(unit.Sprite.rect.center, center) > radius: unitList.remove(unit) reqUnits = unitList return reqUnits
def __init__(self, Name, surf, alliance, pos, sensors = 50): if alliance == 0:GameObject.__init__(self, Name, surf, "swarmer-green.png", pos) elif alliance == 1: GameObject.__init__(self, Name, surf, "swarmer.png", pos) self.Sensors = sensors self.Alliance = alliance self.World = None self.makeTree() self.hitpoints = 100 self.speed = 5 self.atrange = Base.mean(self.Sprite.rect.size)+10 self.atcd = 10 self.cur_atcd = 0 self.atdmg = 10
def Attack(self, enemy = None): if self.Enemies == []: return False if enemy == None: enemy = self.Enemies[0] if enemy[0] > self.atrange: # print self.Name, "is Attacking: Moving into range" x, y= Base.tuple_add(enemy[1].getPos(), self.getPos(), '-') self.move(x, y) else: if self.cur_atcd == 0: # print self.Name, "attacked for", self.atdmg, "damage;", \ # enemy[1].Name, "has", enemy[1].hitpoints, "hp left" enemy[1].takeDamage(self.atdmg) self.cur_atcd = 10 else: self.cur_atcd -=1 return True
def Launch(self, angle, power, position): self.Sprite.image = self.orig_im self.Sprite.rect = self.orig_rect if self.Launched: return True self.Angle = angle self.RotateTo(self.Angle) vx = int(math.ceil(power*math.cos(math.radians(angle)))) vy = int(-math.ceil(power*math.sin(math.radians(angle)))) if not self.Facing: vx*=-1 self.Velocity = (vx, vy) self.Recenter(Base.tuple_add(position,self.Velocity)) self.Launched = True self.LaunchCount = 0 return True
def __init__(self): Game.__init__(self, "Chess Master!", False, (0, 0, 20), (1024, 700)) Base.set_resource_path('Resources') self.offscreen = self.screen.get_size() self.Menu = ChessMenu(self.screen)
def sortEnemies(self): dists = [(Base.distance(enemy.getPos(), self.getPos()), enemy) for enemy in self.Enemies] dists.sort() self.Enemies = dists
def move(self, x, y): X,Y = Base.normalize((x,y)) return self.Sprite.Translate((self.speed*X,self.speed*Y), None, True)
def update(self): percent = int(math.ceil(190*(float(self.Value)/50))) TopLeft = Base.tuple_add(self.rect[0], self.rect[1]) TopLeft = Base.tuple_add(TopLeft,(-45,-percent-5)) self.FillRect = (TopLeft, (40, percent)) return True