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
Ejemplo n.º 2
0
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
Ejemplo n.º 3
0
 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()
Ejemplo n.º 4
0
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