def main(): #Get our pygame up and running pygame.init() pygame.font.init() #Are we on the phone? # If so, map the back key to the escape key if android: android.init() android.map_key(android.KEYCODE_BACK, pygame.K_ESCAPE) #Setting up the screen winstyle = 0 bestdepth = pygame.display.mode_ok(SCREENRECT.size, winstyle, 32) screen = pygame.display.set_mode(SCREENRECT.size, winstyle, bestdepth) pygame.display.set_caption('Chong Flight') #Load our spritesheet spritesheet = SpriteSheet('spriteSheet.png') #Setup the images for the sprites BlueBaddie.image = spritesheet.imgat((0, 32, 32, 32), -1) RedBaddie.image = spritesheet.imgat((0,64, 32, 32), -1) Crosshair.image = spritesheet.imgat((0,0,32,32), -1) #Set up our sprite groups blueBaddieGroup = pygame.sprite.Group() redBaddieGroup = pygame.sprite.Group() crosshairsGroup = pygame.sprite.Group() #Set up all our renderPlains all = pygame.sprite.RenderPlain() blueBaddieRender = pygame.sprite.RenderPlain() redBaddieRender = pygame.sprite.RenderPlain() crosshairRender = pygame.sprite.RenderPlain() #Finally set up our containers for our sprites BlueBaddie.containers = blueBaddieGroup, blueBaddieRender, all RedBaddie.containers = redBaddieGroup, redBaddieRender, all Crosshair.containers = crosshairsGroup, crosshairRender, all #Make a new player and particle Manager player = Player(screen) particleManager = ParticleManager(screen) #Make us a baddie manager bm = BaddieManager(player, particleManager, screen) #Start your clocks! clock = pygame.time.Clock() #GAME LOOP!!!!!!!!!! while 1: #60 fps and fill our screen with black death space elapsedTime = clock.tick(60) screen.fill((0,0,0)) #Check for quiting for event in pygame.event.get(): if event.type == QUIT or (event.type == KEYDOWN and event.key == K_ESCAPE): return #Check for android pausing keystate = pygame.key.get_pressed() if android: if android.check_pause(): android.wait_for_resume() #If all our blue baddies are deaded, we need another wave! if len(blueBaddieGroup) == 0: bm.getWave() #Update all.update(player.killShot) player.update() particleManager.update() particleManager.draw() #Draw player.draw() bm.draw() blueBaddieRender.draw(screen) redBaddieRender.draw(screen) crosshairRender.draw(screen) #Flip it pygame.display.flip()
class World: particlemanager = 0 landingzone = 0 groundcollider = 0 def __init__(self): self.mobiles = [] self.planes = [] self.gravity = Vector2d(0.0,0.0) self.particlemanager = ParticleManager(50) self.groundcollider = GroundCollider(self.particlemanager) def reset(self): self.mobiles = [] self.planes = [] def addPlane(self,plane): self.planes.append(plane) def addMobile(self,mobile): self.mobiles.append(mobile) mobile.setupParticleEmitters(self.particlemanager,TextureHelper.loadTextureFromFile('star.png')) def setGravity(self,x,y): self.gravity.set(x,y) def setLandingzone(self,landingzone): self.landingzone = landingzone def getLandingzone(self): return self.landingzone def step(self,step): for mobile in self.mobiles: mobile.applyStep(step) grav = self.gravity.copy() grav.mulScalar(mobile.getMass()) #grav.rotate(mobile.getAngle()) mobile.applyForce(step,grav) for mobile2 in self.mobiles: if mobile != mobile2: if mobile.isBound(mobile2.getPosition(),mobile2.getRadius()) == 1: n = Vector2d.normal(mobile2.getPosition(),mobile.getPosition()) vn = Vector2d.dotProduct(mobile.getVelocity(),n) if vn < 0: #mobile.getVelocity().display() #n.display() Mobile.solveCollide(mobile,mobile2) mobile.applyStep(step) mobile2.applyStep(step) for plane in self.planes: #d = plane.distancePoint(mobile.getPosition()) #vn = Vector2d.dotProduct(mobile.getVelocity(),plane.getNormal()) #if d < 0 and vn < 0: # plane.reflective(mobile) for submobile in mobile.getMobiles(): d = plane.distancePoint(submobile.getPhysicalPosition()) vn = Vector2d.dotProduct(submobile.getVelocity(),plane.getNormal()) if d < submobile.getRadius() and vn < 0: #ADDED CONDITION OVER PHYSICAL POINTS if submobile.getUpdatedPhysicalPoints().count > 0: ppcollide = 0 for point in submobile.getUpdatedPhysicalPoints(): if plane.distancePoint(point) < 0: self.groundcollider.collideEvent(point) n = plane.getNormal().copy() n.normalize() n.mulScalar(-plane.distancePoint(point)) #n.display() mobile.getPosition().add(n) mobile.updateMobiles() ppcollide = 1 if ppcollide == 1: plane.reflective(submobile) for submobile2 in mobile.getMobiles(): v = submobile2.getVelocity() v.set(0.0,v.getY()) mobile.angularVelocity = mobile.angularVelocity * 0.8 def draw(self,canvas): if self.landingzone != 0: self.landingzone.draw(canvas) for mobile in self.mobiles: #p = mobile.getPosition() mobile.draw(canvas) #mobile.drawPhysical(canvas) #print "MOBILE %d %d\n"%(p.getX(),p.getY()) if self.particlemanager != 0: self.particlemanager.update(1.0/60.0) self.particlemanager.draw(canvas) def on_touch_down(self, touch): for mobile in self.mobiles: mobile.on_touch_down(touch)