def workEvents(screen,frametime,selected,wavenum,Sender,speed,font,font2): timedel = 0 mapvar.rollNext -= frametime didrollthisturn = 0 if mapvar.rollNext <= 0 and mapvar.hasStarted and not mapvar.hasEnded: wavenum = EventFunctions.nextWave(0, wavenum, Sender) didrollthisturn = 1 for event in pygame.event.get(): if event.type == QUIT: sys.exit() elif event.type == MOUSEBUTTONUP: selected,mBUb,timedel = EventFunctions.mouseButtonUp(event, selected, screen, font,font2) else: keyinput = pygame.key.get_pressed() if keyinput[K_ESCAPE]: sys.exit() elif event.type==KEYDOWN and event.dict['key']==K_n and not didrollthisturn: wavenum = EventFunctions.nextWave(event, wavenum, Sender) elif keyinput[K_f]: screen = pygame.display.set_mode((scrwid,scrhei),FULLSCREEN) elif keyinput[K_w]: screen = pygame.display.set_mode((scrwid,scrhei)) elif keyinput[K_UP]: if speed<10: speed+=1 print speed elif keyinput[K_DOWN]: if speed>1: speed-=1 print speed return screen,selected,wavenum,speed,timedel
def workEvents(screen, frametime, selected, wavenum, Sender, speed, font, font2): timedel = 0 mapvar.rollNext -= frametime didrollthisturn = 0 if mapvar.rollNext <= 0 and mapvar.hasStarted and not mapvar.hasEnded: wavenum = EventFunctions.nextWave(0, wavenum, Sender) didrollthisturn = 1 for event in pygame.event.get(): if event.type == QUIT: sys.exit() elif event.type == MOUSEBUTTONUP: selected, mBUb, timedel = EventFunctions.mouseButtonUp( event, selected, screen, font, font2) else: keyinput = pygame.key.get_pressed() if keyinput[K_ESCAPE]: sys.exit() elif event.type == KEYDOWN and event.dict[ 'key'] == K_n and not didrollthisturn: wavenum = EventFunctions.nextWave(event, wavenum, Sender) elif keyinput[K_f]: screen = pygame.display.set_mode((scrwid, scrhei), FULLSCREEN) elif keyinput[K_w]: screen = pygame.display.set_mode((scrwid, scrhei)) elif keyinput[K_UP]: if speed < 10: speed += 1 print speed elif keyinput[K_DOWN]: if speed > 1: speed -= 1 print speed return screen, selected, wavenum, speed, timedel
def nextWave(self, *args): if Player.player.wavenum != 0: self.waveAnimation.stop(__main__.ids.wavescroller) if self.waveAnimation.duration != 20: self.waveAnimation = Animation(scroll_x=self.scroll_length, duration=20.0) self.waveAnimation.bind(on_complete=EventFunctions.updateAnim) EventFunctions.nextWave()
def open_gate(*args, **kwargs): caster = args[0] gate_entity = args[1] results = [] player = kwargs.get('player') game_map = kwargs.get('game_map') jail_key = caster.inventory.check_item_by_index("jail_key") master_key = caster.inventory.check_item_by_index("master_key") if jail_key or master_key: # Don't Consume Key if not master_key: results.append({"change_map_object": [gate_entity, 2], 'message': Message('You unlock the cell consuming a {}.'.format(jail_key.name), tcod.yellow)}) jail_key.item.use_function = eval("ItemFunctions.consume") results.extend(caster.inventory.use(jail_key)) else: results.append({"change_map_object": [gate_entity, 2], 'message': Message('You unlock the cell.', tcod.yellow)}) # Free Denizens of Jail and Make them Head towards Exit or Follow Player # if caster == player: if game_map.level == 'undergrave': for jail_cell in game_map.map.jail_cells: if gate_entity in jail_cell.entrances: ai_type = 1 # ai_type = randint(1, 2) for prisoner_entity in jail_cell.entities: EventFunctions.change_faction(entity=prisoner_entity, new_faction='Rebels') # TODO: Either follow player depending on alignment score/wander/head toward exit if ai_type == 1: prisoner_entity.dialogue = Dialogue(['Lead the way boss!']) # encounter = prisoner_entity.ai = FollowAI(follow_entity=player, encounter=prisoner_entity.ai.encounter) prisoner_entity.ai.owner = prisoner_entity # prisoner_entity.ai.encounter.main_target = game_map.stairs else: prisoner_entity.dialogue = Dialogue(['Freedom! I\'m getting outta here!!']) prisoner_entity.ai.encounter.main_target = game_map.stairs # Remove Jail from "Rooms to Avoid" because it has been opened. Room is now Patrollable. game_map.map.jail_cells.remove(jail_cell) break else: results.append({'message': Message('A locked jail gate blocks your way.', tcod.yellow)}) return results
def main(): pygame.init() print "Pygame Initialized" pygame.display.set_caption("PyGame Tower Defence Game") pygame.mouse.set_visible(1) #localdefs: mapvar = Map() background = mapvar.loadMap((scrwid,scrhei),pickMap()) print "Map Object Generated" screen = pygame.display.set_mode((scrwid,scrhei)) print "Display Initialized" clock = pygame.time.Clock() genEnemyImageArray() #localdefs print "Enemy Image Array Generated" run=True #Run loop wavenum = 0 selected = None #Nothing is selected MainFunctions.makeIcons() #Openbutton is the white surface on which the Icon sits openbutton = pygame.Surface((iconlist[len(iconlist)-1].rect.right+5,25)) openbuttonrect = pygame.Rect((0,scrhei-25),(iconlist[len(iconlist)-1].rect.right+5,25)) openbutton.fill((255,255,255)) print "Begin Play Loop!!!" speed = 3 frametime = speed/30.0 while run: starttime = time.time() MainFunctions.tickAndClear(screen, clock, background) MainFunctions.workSenders(frametime) MainFunctions.workTowers(screen,frametime) MainFunctions.dispExplosions(screen) MainFunctions.dispText(screen,wavenum) MainFunctions.workEnemies(screen,frametime) for event in pygame.event.get(): if event.type == MOUSEBUTTONUP: #If the user left-clicks... if event.dict['button']==1: if nexttextpos.collidepoint(event.dict['pos']): wavenum+=1 player.health += d(8) + 2 for tower in towerlist: if tower.hp < tower.maxhp: tower.hp = min(tower.hp+tower.level,tower.maxhp) if ('wave'+str(wavenum)+'a') in mapvar.mapdict: Sender(wavenum,'a') if ('wave'+str(wavenum)+'b') in mapvar.mapdict: Sender(wavenum,'b') if ('wave'+str(wavenum)+'c') in mapvar.mapdict: Sender(wavenum,'c') if ('wave'+str(wavenum)+'d') in mapvar.mapdict: Sender(wavenum,'d') if all([('wave'+str(wavenum)+letter) not in mapvar.mapdict for letter in ['a','b','c','d']]): if len(enemylist) == 0: background=mapvar.loadMap((scrwid,scrhei),pickMap()) screen = pygame.display.set_mode((scrwid,scrhei)) wavenum=1 else: print "There are still enemies on the screen!" wavenum-=1 elif selected: if selected.__class__ == Icon: if event.dict['pos'][1]<scrhei-squsize: if player.money>=eval(selected.type+"Tower").basecost: if (not any([ttower.rect.collidepoint(event.dict['pos']) for ttower in towerlist]) and not any([p.inflate(25,25).collidepoint(event.dict['pos']) for pathrectlist in mapvar.pathrectlists for p in pathrectlist])): eval(selected.type+selected.base)(event.dict['pos']) selected = None else: selected = None elif Tower in selected.__class__.__bases__: EventFunctions.leftSelectedTower(event, selected) else: for object in (towerlist+iconlist): if object.rect.collidepoint(event.dict['pos']): selected = object else: selected = None keyinput = pygame.key.get_pressed() if event.type == QUIT: sys.exit() if keyinput[K_ESCAPE]: sys.exit() if keyinput[K_f]: screen = pygame.display.set_mode((scrwid,scrhei),FULLSCREEN) if keyinput[K_w]: screen = pygame.display.set_mode((scrwid,scrhei)) font = pygame.font.Font(None,20) MainFunctions.dispStructures(screen) nexttextpos = MainFunctions.dispNextWave(screen) if selected and selected.__class__ == Icon: MainFunctions.selectedIcon(screen, selected) if selected and Tower in selected.__class__.__bases__: MainFunctions.selectedTower(screen, selected) screen.blit(openbutton,openbuttonrect) for icon in iconlist: screen.blit(icon.img,icon.rect) if icon.rect.collidepoint(pygame.mouse.get_pos()): text = font.render("%s Tower (%d)" % (icon.type,eval(icon.type+"Tower").basecost),1,(0,0,0)) textpos = text.get_rect(left=icon.rect.left,bottom=icon.rect.top-2) screen.blit(text,textpos) screen.blit(mapvar.baseimg,mapvar.baserect) pygame.display.flip() frametime = (time.time() - starttime) * speed