Esempio n. 1
0
 def __init__(self, game):
     Sprite.__init__(self)
     self.game = game
     self.player_health = game.player.health
     self.health_surface = pygame.Surface((200, 50))
     self.health_surface.fill((40, 30, 30))
     self.health_surface.set_colorkey((30, 30, 30))
     self.rect = self.health_surface.get_rect()
     self.full_heart = load_image('assets/room/full_heart.png', (40, 40))
     self.half_heart = load_image('assets/room/half_heart.png', (40, 40))
Esempio n. 2
0
 def on_start(self):
     self.next_wave_started = True
     self.wave = False
     self.end_wave = True
     core.monster.Monster.load_resources()
     core.player.Hero.load_resources()
     weapon_imgs = core.load_spritesheet_alpha(core.Var.path_weapon, 96, 4, 3)
     core.player.Hero.img_weapons = weapon_imgs[0:4]
     core.player.Hero.img_weapons.append(weapon_imgs[9])
     core.Item.img_weaponground = weapon_imgs[4:8]
     core.Item.img_weaponground.insert(0, weapon_imgs[8])
     core.Item.img_weaponground.append(weapon_imgs[10])
     core.Var.level_boundries = (0, round(core.Var.SCREEN_WIDTH*1.5), 0, round(core.Var.SCREEN_HEIGHT*1.5))
     core.Var.level_background = core.p.Surface((core.Var.level_boundries[1] - core.Var.level_boundries[0],
                                                 core.Var.level_boundries[3] - core.Var.level_boundries[2]))
     core.Var.level_background.fill(core.Var.BLACK)
     tile = core.load_image(core.Var.path_grassybk)
     tile_x = tile.get_width()
     tile_y = tile.get_height()
     for x in range(core.Var.level_background.get_width()//tile_x+1):
         for y in range(core.Var.level_background.get_height()//tile_y+1):
             core.Var.level_background.blit(tile, (x*tile_x, y*tile_y))
     core.Var.level_background.convert()
     core.Gameobj.reset()
     if not core.Var.game_loaded:
         core.Var.reset_score()
         core.Gameobj.reset_hero()
         core.Gameobj.hero = core.player.Hero(0, 0, core.Var.hero_max_health, core.Var.hero_speed)
         core.Gameobj.hero.x = core.Var.level_boundries[1] / 2
         core.Gameobj.hero.y = core.Var.level_boundries[3] / 2
         core.Var.survival_wave = 1
     else:
         core.Var.game_loaded = False
     self.time_wave_end = time()
Esempio n. 3
0
 def bg(new_bg, overlay=True):
     ls = core.screen.copy().convert()
     core.screen.blit( core.load_image("gfx/" + new_bg), (0,0) )
     if overlay:
         core.screen.blit( mo, (0,0) )
     core.dissolve_transition(ls, core.screen.copy().convert(), nvl.intime)
     nvl.intime = 100
    def test_compress_image_supply_iterations(self):
        data = load_image("images/for_compression/marmite_100x100.jpg")

        result = compress_image(data, terms=10, iterations=7)

        assert result['compressed_data'].shape == (100, 100, 3)
        assert result['iterations'] == 7
Esempio n. 5
0
 def create_feather(self, char, direction=None):
     if direction is None:
         direction = char.direction
         
     feather = sprite.oSprite()
     feather.attackMgr = self
     tw, th = core.level.tileSize
     feather.speed = .25
     feather.direction = direction
     if char.direction == "N":
         feather.y -= th/2
     if char.direction == "S":
         feather.y += th/2
     if char.direction == "E":
         feather.x += tw/2
     if char.direction == "W":
         feather.x -= tw/2
         
     feather.life = 700
     feather.AI = self.AI
     feather_char = core.load_image("feather.png", directory="gfx")
     feather.animFromStrip( feather_char, [
             ["stopped","E",0,1,0,True, (3, 15)],
             ["stopped","N",1,1,0,True, (5,13)],
             ["stopped","W",2,1,0,True, (12,15)],
             ["stopped","S",3,1,0,True, (5,11)]
         ], 24, 24, feather_char)
     feather.changeState("stopped")
     feather.x = char.rx() + char.action_point()[0] - feather.hotspot()[0]
     feather.y = char.ry() + char.action_point()[1] - feather.hotspot()[1]
     core.attack_group.add(feather)
     core.render_group.add(feather)
     return feather
Esempio n. 6
0
 def update(self, lag):
     for bug in self.bugs:
         if bug.dead:
             self.bugs.remove(bug)
     
     if self.state < self.maxState:
         self.openWork += lag
         open_prob = 0
         if self.openWork > 6000:
             open_prob = 1
         if self.openWork > 15000:
             open_prob = 100
             
         if random.randint(0,100) < open_prob:
             self.changeState(self.state + 1)
             self.openWork = 0
     
     if self.state <= 0:
         return
     
     if len(self.bugs) < (self.capacity*self.state/2):
         self.unactive += lag
         if self.unactive > 5000:
             if random.randint(0,100) < self.state*self.state*10:
                 # create a new bug...
                 self.mapa.created_bugs += 1
                 bug = sprite.oSprite()
                 tw, th = self.mapa.tileSize
                 bug.x = (self.mapID % self.mapa.width)
                 bug.y = (self.mapID / self.mapa.width)
                 bug.speed = .1
                 bug.direction = random.choice(self.direction)
                 bug.stuck = 0
                 if bug.direction == "N":
                     bug.y -= 1
                 elif bug.direction == "W":
                     bug.x -= 1
                 elif bug.direction == "S":
                     bug.y += 1
                 elif bug.direction == "E":
                     bug.x += 1
                 bug.AI = sprite.bugAI
                 bug_sprite = core.load_image("bug.png", directory="gfx")
                 bug.animFromStrip( bug_sprite, [
                     ["stopped","E",0,1,0,True],
                     ["stopped","N",4,1,0,True],
                     ["stopped","W",8,1,0,True],
                     ["stopped","S",12,1,0,True],
                     ["dying",  "N",1,3,.01,False],
                     
                 ], 48, 48, bug_sprite)
                 bug.changeState("stopped")
                 bug.x = bug.x * tw + bug.hotspot()[0]
                 bug.y = bug.y * th + bug.hotspot()[1] + 33
                 
                 self.group.add(bug)
                 core.render_group.add(bug)
                 self.bugs.append(bug)
                 self.unactive = 0
Esempio n. 7
0
 def __init__(self):
     oSprite.__init__(self)
     self.animations = {
         "default": {
             "N": [0,True,[oFrame(core.load_image("gfx/pickups/heart.png"), hotspot=(0,30))]]
         }
     }
     self.direction = "N"
     self.changeState("default")
Esempio n. 8
0
def get_ctc():
    ctc = sprite.oSprite()
    ctc.direction = "N"
    ctc_sprite = core.load_image("gfx/cursor.png")
    ctc.animFromStrip( ctc_sprite, [
        ["default","N",0,10,.01,True,(0,5)],
    ], 24, 24)
    ctc.changeState("default")
    return ctc
Esempio n. 9
0
 def __init__(self):
     """ Creates the tateti setting its grid """
     sprite.Sprite.__init__(self)  # Call Sprite initializer
     self.image, self.rect = load_image('tateti.png')
     self.tick_sound = load_sound('button.wav')
     self.error_sound = load_sound('error.wav')
     self.pieces = [Piece('cross.png'), Piece('circle.png')]
     self.grid = []
     for i in range(3):
         col = []
         for j in range(3):
             col.append(-1)
         self.grid.append(col)
Esempio n. 10
0
 def on_start(self):
     core.widgets.Button.load_resources()
     Menu.img_background = core.load_image(core.Var.path_background)
     self.img_title = core.Var.font_title.render(core.Var.CAPTION[core.Var.language_id].upper(), True,
                                                 core.Var.BLACK)
     self.frame_title = self.img_title.get_rect()
     self.frame_title.center = (core.Var.SCREEN_WIDTH / 3, core.dpp(130))
     Menu.menu_items.clear()
     for i in range(len(core.Var.str_mainmenu)):
         Menu.menu_items.append(core.widgets.Button(core.Var.str_mainmenu[i][core.Var.language_id],
                                                    core.Var.SCREEN_WIDTH / 3 - core.widgets.Button.width / 2,
                                                    core.dpp(220) + i * core.widgets.Button.height,
                                                    self.menu_commands[i]))
def test_load_image():
    result = load_image('images/test_3x3_gray.bmp')
    assert result.shape == (3, 3)

    assert result[0][0] == 79
    assert result[0][1] == 59
    assert result[0][2] == 0

    assert result[1][0] == 149
    assert result[1][1] == 119
    assert result[1][2] == 99

    assert result[2][0] == 254
    assert result[2][1] == 219
    assert result[2][2] == 199
Esempio n. 12
0
def card_of_world(window):
    """
    Create a main menu
    """
    # Play music
    jukebox = Jukebox()
    jukebox.load('intro')
    jukebox.play()

    # Create background
    background = pygame.Surface(window.get_size())
    background = background.convert()
    background.fill(CIEL)

    window.blit(background, (0, 0))
    pygame.display.flip()

    #bomb = Bomb()
    allsprites = pygame.sprite.RenderPlain()

    for number in range(random.randint(4, 6)):
        altitude = random.randint(0, 300)
        speed = random.randint(1, 6)
        allsprites.add(Cloud(altitude, speed))

    hero = Hero()
    allsprites.add(hero)

    pygame.draw.rect(background, GREEN_PELOUSE, (0, 500, WINDOW_WIDTH, 100))

    brand, brand_rect = core.load_image('Battle-story.png', -1)
    brand_rect.left = WINDOW_WIDTH / 2 - brand_rect.width / 2
    brand_rect.top = WINDOW_HEIGHT / 3 - brand_rect.height / 2
    background.blit(brand, brand_rect)

    #bombsprites = pygame.sprite.RenderPlain((bomb))
    while True:
        for event in pygame.event.get():
            if event.type == QUIT:
                return
        hero.play_auto_animation()
        allsprites.update()
        #bombsprites.update()
        window.blit(background, (0, 0))
        allsprites.draw(window)
        pygame.display.flip()
        FPS_CLOCK.tick(FPS_FREQUENCY)
def test_load_image_four_chanels():
    result = load_image('images/test_3x3.bmp')
    assert result.shape == (3, 3, 3)

    red = result[:, :, 0]
    assert red[0][0] == 80
    assert red[0][1] == 60
    assert red[0][2] == 0

    assert red[1][0] == 150
    assert red[1][1] == 120
    assert red[1][2] == 100

    assert red[2][0] == 255
    assert red[2][1] == 220
    assert red[2][2] == 200

    green = result[:, :, 1]
    assert green[0][0] == 85
    assert green[0][1] == 65
    assert green[0][2] == 5

    assert green[1][0] == 155
    assert green[1][1] == 125
    assert green[1][2] == 105

    assert green[2][0] == 255
    assert green[2][1] == 225
    assert green[2][2] == 205

    blue = result[:, :, 2]
    assert blue[0][0] == 90
    assert blue[0][1] == 70
    assert blue[0][2] == 10

    assert blue[1][0] == 160
    assert blue[1][1] == 130
    assert blue[1][2] == 110

    assert blue[2][0] == 255
    assert blue[2][1] == 230
    assert blue[2][2] == 210
Esempio n. 14
0
 def __init__(self, coords):
     image_path = 'assets/room/door-frame.png'
     SpriteObject.__init__(self, image_path, coords, 1.9)
     self.closed_door_image = load_image('assets/room/doors.png', 1.9)
     self.is_closed = False
     angle = 0
     if coords == (450, 25):
         angle = 0
         self.doors_coords = (self.rect.x + 20, self.rect.y + 14)
     elif coords == (80, 210):
         angle = 90
         self.doors_coords = (self.rect.x + 14, self.rect.y + 20)
     elif coords == (450, 455):
         angle = 180
         self.doors_coords = (self.rect.x + 20, self.rect.y + 5)
     elif coords == (820, 210):
         angle = -90
         self.doors_coords = (self.rect.x + 4, self.rect.y + 20)
     self.rotate(angle)
     self.room_created = False
Esempio n. 15
0
def credits_screen():
    goscreen = core.load_image("credits.png", directory="gfx", auto_alpha=False)
    core.dissolve_transition( core.screen.copy().convert(), goscreen.copy().convert(), 1000 )
    
    while True:
        core.clock.tick(core.MAX_FPS)
        
        events = pygame.event.get()
        
        if core.handleEvents(events) == "quit":
            exit()
            
        for event in events:
            if event.type == KEYUP:
                core.play_sound("button_click")
                Input.update()
                core.next_screen = main_menu
                return
        
        core.screen.blit(goscreen, (0,0))                        
        core.updateScreen()
Esempio n. 16
0
    def __init__(self):
        from creatures import Player
        from core import Game, SpriteGroup, load_image
        from uis import HealthBar
        from room import Room
        self.rooms_seeds_dict = {}
        self.start_time = time()
        self.player = Player((460, 230))
        self.gameover = False

        # door_cords (450, 25), (80, 210), (450, 455), (820, 210)

        self.room = Room((0, 0), self)
        self.interface = SpriteGroup(HealthBar(self),
                                     RoomsCounterText(f'Комнат пройдено: '
                                                      f'{len(self.rooms_seeds_dict.keys()) - 1}',
                                                      (0, 40), 36,
                                                      (180, 180, 180)))
        self.background = load_image('assets/room/room-background.png')
        self.create_new_room((0, 0), 'any')

        Game.__init__(self)
Esempio n. 17
0
def game_over(score, rank):
    core.play_music("game over", queue=True)
    
    # load game over screen
    goscreen = core.load_image("game_over.png", directory="gfx", auto_alpha=False)
    core.dissolve_transition( core.screen.copy().convert(), goscreen.copy().convert(), 1000 )
    
    while True:
        core.clock.tick(core.MAX_FPS)
        
        events = pygame.event.get()
        
        if core.handleEvents(events) == "quit":
            exit()
            
        for event in events:
            if event.type == KEYUP:
                core.next_screen = core.curry(hiscores_screen, score, rank)
                Input.update()
                return
        
        core.screen.blit(goscreen, (0,0))                        
        core.updateScreen()
Esempio n. 18
0
def feather_received(attack):
    last_screen = core.screen.copy().convert()
    ls = last_screen.copy().convert()
    core.screen.blit( core.load_image("gfx/feather_received.png"), (0,0) )
    core.screen.blit( attack.image, (165, 265) )
    received_text = "You've received the %s Feather!" % attack.name
    core.fonts.Draw( core.screen, None, 24, received_text, pygame.Rect(275,250,450,50), (255,255,255,255),
                     alignHoriz='center', alignVert='center', antialias=True)
    core.dissolve_transition( last_screen, core.screen.copy().convert(), 1000)
    try:
        while True:
            lag = core.clock.tick(core.MAX_FPS)
            
            events = pygame.event.get()
            for event in events:
                if event.type == KEYUP:
                    raise eOutOfLoop
                
            if core.handleEvents(escape_exits=False) == "quit":
                exit()
    except eOutOfLoop:
        pass
    
    core.dissolve_transition( core.screen.copy().convert(), ls, 1000 )
Esempio n. 19
0
def game_ending(ns):
    core.play_music("ending", queue=True)
    text_bg = core.load_image("gfx/bg_text.png")
    mo = core.load_image("gfx/movie_overlay.png")
    
    def _(texts):
        if not nvl.show_texts(texts):
            raise eSkipCutScene
            
    def bg(new_bg, overlay=True):
        ls = core.screen.copy().convert()
        core.screen.blit( core.load_image("gfx/" + new_bg), (0,0) )
        if overlay:
            core.screen.blit( mo, (0,0) )
        core.dissolve_transition(ls, core.screen.copy().convert(), nvl.intime)
        nvl.intime = 100
    def cls(color=(0,0,0,255)):
        ls = core.screen.copy().convert()
        core.screen.fill(color)
        core.screen.blit( mo, (0,0) )
        core.dissolve_transition(ls, core.screen.copy().convert(), nvl.intime)
        nvl.intime = 100
        
    nvl = fontmgr.oNvlScreen(x=80,y=80,width=440,height=440,background=text_bg,bg_pos=(50,50),ctc=get_ctc())
    nvl.intime = 1000
    cls()
    try:
        _(['"I was waiting for you."',
           'The gentle voice greeted me as I entered that warm place.',
           'I couldn\'t open my eyes at that time.',
           'I was just so angry at myself.',
           'So angry because I didn\'t realized it before.'])
        _(['But you could say it was just me.',
           'The selfish me.',
           'The unreliable me.',
           'The dummy me.',
           'Even though it was always in front of me I couldn\'t see it.'])
        _([u'\n\n\n\n\n\n\n\n———no.',
           'Rather, I couldn\'t accept it.'])
        _(['I was afraid of hurting myself.',
           'Of breaking the mask of big sis I always wore, even though I never acted like one.'])
        _(['\n\n\n\n\n\n\n\n\nThe stupid selfish me.',
           'The one who always, always hurt the others so to not hurt myself.',
           'The one that sealed the bright part of me deep inside my heart.'])
        _(['It was easier this way.',
           'I needn\'t care about other people problems.',
           'To tell the truth, I didn\'t even care about my owns.'])
        _([u'\n\n\n\n\n\n\n\n———but it\'s already enough.'])
        _(['Like a lie, which can be sweet at start, acting like this will just harm my heart more and more.',
           '\nBecause even if I pretend I don\'t care about the ones I like, I still get hurt when they do.',
           'I still cry when they cry.',
           'I still suffer when they suffer.'])
        _(['But I don\'t smile, for I can\'t show I\'m happy for they.',
           'I don\'t have anyone to cry with me, because I conceal all my feelings.',
           'And even when they\'re down because of me, I still scold them for being so...',
           u'\n\n\n———human.'])
        _(['"It\'s okay now."',
           'Yeah, it\'s okay now.',
           'Because I won\'t run from myself anymore.',
           'I\'ll embrace these feelings and be who I am until the very end.',
           'So I can open my eyes again and lift my gaze.'])
        nvl.intime = 1000
        bg("cg/join_hands.png")
        _(['\n\n\n\n\n\n\n\n\n\nThere\'s a beautiful world waiting for me, if only I want to enjoy it.'])
        _(['"That\'s true."',
           '"Let\'s go togheter."'])
        nvl.intime = 2000
        cls(color=(255,255,255,255))
        _(['"Yume."',
           '\nA familiar voice.',
           '\n\n"Hey, Yume!"',
           '\nA gentle voice.',
           '\n\n"Geez, stop day dreaming already."'])
        nvl.intime = 1000
        bg("cg/yume.png")
        _(['"Ah, Dai-kun?"',
           u'\nDai-kun — Daisuke Minato — is one of my classmates.',
           'We are computer science students and I\'m one of the few girls in the class.',
           'Well, not that I\'d make friends with lots of them if there were, actually.',
           u'After all, Dai-kun is one of the few — and by few I mean three — friends I have at college.'])
        _(['"Geez, you\'re so hopeless. I bet you didn\'t listen to a word I said."',
           'He has a point.',
           '\n"Sorry."',
           '"Eh?! Are you all there?"',
           '"Silly"',
           'We laughed.'])
        _(['"That\'s like the first time ever you said "sorry" and made such a "sorry" face."',
           '"Yeah. I guess I found myself once again."',
           '"Weirdo."',
           'He giggled.'])
        _(['"I was thinking..."',
           '"Hm? What is it?"',
           '"Want to go to the karaoke next friday... if you\'re free, I mean."',
           '"Of course!"',
           'My voice sounded more cheerfuly than what I wanted.'])
        _(['Daisuke took a while to understand those words, as he just kept staring at me with the most surprised face I\'ve ever seen.',
           '"Are you sure you\'re Yume?"',
           '"Eh?!"',
           '"I mean, you\'re not some alien with her body, or an android, or something, are you?"',
           '"Hm... I guess I\'m something."',
           'We both laughed.'])
        _(['"Anyways, I was thinking."',
           '\nHe looked at me with an odd inquiring look, "What is it?"',
           '"Will there be a problem if we add my sis too?"',
           '"Eh?!"',
           '"I\'m warning you, she\'s a singing godness."',
           '"Haha. I guess there won\'t be a problem, but..."',
           '"But...?"',
           '"Hm, it\'s nothing. Just forget about it."'])
        nvl.intime = 1000
        bg("cg/yume_to_daidai.png")
        _(['He came closer and gave me a kiss on my cheeks.',
           '"Please look forward to it."',
           '"I-I will..."'])
        nvl.intime = 2000
        cls()
        _([u'\n\n\n\n\n\n\nI definetly will———',
           u'\n———enjoy life to my hearts contents from now on.'])
        nvl.intime = 2000
        bg("cg/fin.png", overlay=False)
           
    except eSkipCutScene:
        pass
    
    core.next_screen = ns
    return
Esempio n. 20
0
def game_intro():
    core.play_music("intro", queue=True)
    text_bg = core.load_image("gfx/bg_text.png")
    mo = core.load_image("gfx/movie_overlay.png")
    
    def _(texts):
        if not nvl.show_texts(texts):
            raise eSkipCutScene
            
    def bg(new_bg):
        ls = core.screen.copy().convert()
        core.screen.blit( core.load_image("gfx/" + new_bg), (0,0) )
        core.screen.blit( mo, (0,0) )
        core.dissolve_transition(ls, core.screen.copy().convert(), nvl.intime)
        nvl.intime = 100
    def cls(color=(0,0,0,255)):
        ls = core.screen.copy().convert()
        core.screen.fill(color)
        core.screen.blit( mo, (0,0) )
        core.dissolve_transition(ls, core.screen.copy().convert(), nvl.intime)
        nvl.intime = 100
        
    nvl = fontmgr.oNvlScreen(x=80,y=80,width=440,height=440,background=text_bg,bg_pos=(50,50),ctc=get_ctc())
    bg("cg/feather.png")
    

    try:
        nvl.y = 280
        _(['A feather.'])
        nvl.y = 80
        _(['For a long time that was the only thing to fill my dreams.\n',
           'A lone feather over the tidy ocean of darkness.',
           'The pure white which seemed to defy the very place it lied, eternally.'])
        _([u'\n\n———or maybe it was the other way around.',
           'Maybe, just maybe, for the white feather was so pure the entire universe seemed ugly.\n'])
        _(['I didn\'t know.\n',
           'Even after so long I couldn\'t understand the meaning of that dream.\n',
           u'\n\n———but I could feel that feather.\n',
           'Somehow it seemed real.',
           'Even more real than reality.',
           'It was a crying soul.',
           'A maiden in distress calling for her brave prince.',
           'A faithful beauty letting out her last deep breath before being engulfed by darkness.'])
        nvl.intime = 2000
        cls()
        _(['...',
           '......',
           '.........',
           u'\n\n\n————no!',
           'Not yet!',
           'It can\'t end this way.',
           u'Just———!'])
        _(['I stretched my hands in the feather\'s direction.\n',
           '......',
           u'———but it wasn\'t there',
           'The feather wasn\' there anymore.\n',
           'It was over and for some reason I felt sad.',
           'As if my entire world didn\'t make any sense at all without that feather.'])
        _(['Why?'])
        _([u'\n\n\n\n\n————silence.'])
        _(['Why?', 'Why?', 'Why?',
           '\n\n\nIt. Was. Just. A. Feather.',
           '\n\nSo, why?'])
        _(['Because I\'m the prince?',
           'Because I couldn\'t save who I was supposed to?',
           '...',
           'I don\'t know.',
           'I just...'])
        _(['"You shouldn\'t cry."',
           '"Eh?!"',
           '"Because a prince should be brave, right?"',
           '\nIt was a gentle voice echoing in a motherly way.',
           '\n\n\nMy mind was clear now.',
           'That voice killed not just my fears, but also my thoughts.',
           'I could only open my eyes and look at the person above me.'])
        nvl.intime = 1000
        bg("cg/hikari_floating.png")
        _(['Her pink hair, wavering slightly with the wind, covered part of her face.',
           '\nThe pale complexion was concealed by a queer pastel red dress, while a red thread conected its pinky finger to mine.',
           '\n\nThe maiden floated slowly with its only wing, stretching her soft hand in my direction.'])
        _(['It wasn\'t just that she was pretty.',
           u'———she was bewitching.',
           '\n\n\nWhich explains why I couldn\'t reach her hands.',
           '\n\nOr maybe it was the depressed expression she carried.',
           'Even if it seemed she was passing through a lot of troubles, it also seemed she would broke if I just touched her.'])
        _(['"I wish I could stay longer."',
           'For the first time her eyes were cast down.'])
        _(['That brought me to reality.',
           'After all, I\'m her prince.',
           'If she needs my help I shall help her.',
           'Moreover, I shall protect her with my life if I must.'])
        _(['"The gods said there\'s a red thread which connects people."',
           '\n\n\nI heard about that from my sister.',
           'It\'s a thread of destiny, which connects two peoples by their pinkies.',
           'But this line isn\'t visible, so those people should love one another to find their soulmates.'])
        _(['...',
           '"That should mean..."'])
        _(['Do I love her?',
           '"But..."\n',
           '(I don\'t know her), I wanted to say.',
           '\nThe words just didn\'t come off.',
           '\n\n\n\n\nBecause I knew her.',
           'For some strange reason I knew her so well.',
           'And yet, I haven\'t any idea of who she was.'])
        _(['She smiled beautifully.',
           u'That beautiful smile———',
           u'\n\n\n———how can I say no to it?'])
        _(['"I know I\'ll regret it later, but..."',
           '"Is that a "yes"?"',
           '"Sort of."',
           'She giggled, "I knew you would agree. Please take this feather with you."',
           '"Eh?!"'])
        _(['"This is a debug feather.\nUnfortunately your dream still runs on Ruindows, so you\'ll have to use it a lot."',
           '"Yeah missy. But why can\'t you just stay here?"',
           'Her eyes were cast down once again.',
           'She seemed rather depressed, and that made me sad.'])
        nvl.intime = 2000 
        cls()
        _(['The girl slowly faded away.',
           'She didn\'t answered my question, but I already knew the answer.',
           '\n\n\n\n\n"I guess I can\'t just leave it at this, can I?"'])
    except eSkipCutScene:
        pass
        
    core.next_screen = main_game
    return
Esempio n. 21
0
 def __init__(self, **kwargs):
     """Initializes oMap class."""
     self.width    = kwargs.pop("width" , 0)
     self.height   = kwargs.pop("height", 0)
     self.mapData  = kwargs.pop("mapData", [])
     self.tileset  = kwargs.pop("tileset", [
         core.load_image("plain_block.png", directory="gfx/tileset"),    # 0
         core.load_image("brown_block.png", directory="gfx/tileset"),    # 1
         core.load_image("dirty_block.png", directory="gfx/tileset"),    # 2
         core.load_image("stone_block.png", directory="gfx/tileset"),    # 3
         core.load_image("grass_block.png", directory="gfx/tileset"),    # 4
         core.load_image("water_block.png", directory="gfx/tileset"),    # 5
         core.load_image("wall_block.png", directory="gfx/tileset"),     # 6
         core.load_image("wood_block.png", directory="gfx/tileset"),     # 7
         core.load_image("portal_inactive.png", directory="gfx/tileset"),# 8
         core.load_image("portal_active.png", directory="gfx/tileset"),  # 9
         core.load_image("star_0.png", directory="gfx/tileset"),         # 10
         core.load_image("star_1.png", directory="gfx/tileset"),         # 11
         core.load_image("star_2.png", directory="gfx/tileset"),         # 12
         core.load_image("star_3.png", directory="gfx/tileset"),         # 13
         core.load_image("star_4.png", directory="gfx/tileset"),         # 14
         core.load_image("star_5.png", directory="gfx/tileset"),         # 15
         core.load_image("star_6.png", directory="gfx/tileset"),         # 16
         core.load_image("star_7.png", directory="gfx/tileset"),         # 17
         core.load_image("star_8.png", directory="gfx/tileset"),         # 18
         core.load_image("star_9.png", directory="gfx/tileset"),         # 19
         core.load_image("mult.png", directory="gfx/tileset"),           # 20
         core.load_image("add.png", directory="gfx/tileset"),            # 21
         core.load_image("sub.png", directory="gfx/tileset"),            # 22
         core.load_image("div.png", directory="gfx/tileset"),            # 23
         core.load_image("mod.png", directory="gfx/tileset"),            # 24
         core.load_image("star_0a.png", directory="gfx/tileset"),        # 25
         core.load_image("star_1a.png", directory="gfx/tileset"),        # 26
         core.load_image("star_2a.png", directory="gfx/tileset"),        # 27
         core.load_image("star_3a.png", directory="gfx/tileset"),        # 28
         core.load_image("star_4a.png", directory="gfx/tileset"),        # 29
         core.load_image("star_5a.png", directory="gfx/tileset"),        # 30
         core.load_image("star_6a.png", directory="gfx/tileset"),        # 31
         core.load_image("star_7a.png", directory="gfx/tileset"),        # 32
         core.load_image("star_8a.png", directory="gfx/tileset"),        # 33
         core.load_image("star_9a.png", directory="gfx/tileset"),        # 34
         core.load_image("active.png",  directory="gfx/tileset"),        # 35
         core.load_image("tree_ugly.png", directory="gfx/tileset"),      # 36
         core.load_image("tree.png", directory="gfx/tileset"),           # 37
         core.load_image("tree_tall.png", directory="gfx/tileset")       # 38
      ])
     self.x        = kwargs.pop("x", 0)
     self.y        = kwargs.pop("y", 0)
     self.tileSize = kwargs.pop("tileSize", (64,50))
     self.portalN  = kwargs.pop("portal", 0)
     self.portalActive = False
     self.created_bugs = 0
     self.time     = kwargs.pop("time", 300)
     self.nests    = [ ]
     self.genBitmask()
Esempio n. 22
0
def level_clear_screen(mc, killed_bugs, ltime, lives, lost_lives, score):
    core.play_music("stage clear", queue=True)
    last_screen = core.screen.copy().convert()
    ls = last_screen.copy().convert()
    bg = core.load_image("stage_clear.png", directory="gfx")
        
    stars = core.load_image("rank_star.png", directory="gfx")
    stars = [ core.im_crop(stars, pygame.Rect(0,0,55,51)),
              core.im_crop(stars, pygame.Rect(55,0,55,51)) ]
    
    ltime = int(ltime)
    used_feathers, wasted_feathers, waste_penalty = getFeatherStats(mc)
    rank = getRank(mc, lost_lives, lives, ltime, killed_bugs)
     
    state = 0
    
    skilled_bugs = oStatsDisp(0, (465,155), useNumbers=True, xalign=1.0, width=100, formatValue=format_level_time)
    stime = oStatsDisp(0, (465,190), useNumbers=True, xalign=1.0, width=100, formatValue=format_level_time)
    slives = oStatsDisp(0, (465,225), useNumbers=True, xalign=1.0, width=100, formatValue=format_level_time)
    sfeathers = oStatsDisp(0, (465,260), useNumbers=True, xalign=1.0, width=100, formatValue=format_level_time)
    stotal = oStatsDisp(score, (235,370), useNumbers=True, xalign=1.0, width=330, formatValue=format_score)
    last_total = score
    
    forceUpdate = True
    vel = .3
    vel2 = 100
    
    while True:
        lag = core.clock.tick(core.MAX_FPS)
        if lag <= 0:
            lag = 1
            
        dirty_rects = []
        
        if core.handleEvents() == "quit":
            exit()
            
        vel = 0.2
        if Input.up(K_RETURN):
            if state < 8:
                vel = sys.maxint
            else:
                core.dissolve_transition(core.screen.copy().convert(), ls, 1000)
                return stotal.value, rank
        
        core.screen.blit(ls, (0,0))
        core.screen.blit(bg, (0,0))
        # points
        if state == 0:
            skilled_bugs.update( skilled_bugs.value + vel*lag )
            if skilled_bugs.value >= killed_bugs:
                skilled_bugs.value = killed_bugs
                state += 1
        elif state == 1:
            stime.update( stime.value + vel*lag )
            if stime.value >= ltime:
                stime.value = ltime
                state += 1
        elif state == 2:
            slives.update( slives.value + vel*lag )
            if slives.value >= lives:
                slives.value = lives
                state += 1
        elif state == 3:
            sfeathers.update( sfeathers.value + vel*lag )
            if sfeathers.value >= wasted_feathers:
                sfeathers.value = wasted_feathers
                state += 1
        elif state == 4:
            stotal.update( stotal.value + vel2*lag )
            if stotal.value >= last_total + killed_bugs*10:
                stotal.value = last_total + killed_bugs*10
                last_total = stotal.value
                state += 1
        elif state == 5:
            stotal.update( stotal.value + vel2*lag )
            if stotal.value >= last_total + ltime*100:
                stotal.value = last_total + ltime*100
                last_total = stotal.value
                state += 1
        elif state == 6:
            stotal.update( stotal.value + vel2*lag )
            if stotal.value >= last_total + lives*1000:
                stotal.value = last_total + lives*1000
                last_total = stotal.value
                state += 1
        elif state == 7:
            stotal.update( stotal.value - vel2*lag )
            if stotal.value <= last_total - waste_penalty:
                stotal.value = last_total - waste_penalty
                last_total = stotal.value
                state += 1
        
        # draw
        dirty_rects.extend( skilled_bugs.draw(core.screen) )
        if state > 0:
            dirty_rects.extend( stime.draw(core.screen) )
        if state > 1:
            dirty_rects.extend( slives.draw(core.screen) )
        if state > 2:
            dirty_rects.extend( sfeathers.draw(core.screen) )
        if state > 3:
            dirty_rects.extend( stotal.draw(core.screen) )
        if state > 7:
            def draw_rank_star(pos, rank_need):
                if rank >= rank_need:
                    return core.screen.blit(stars[1], pos)
                else:
                    return core.screen.blit(stars[0], pos)
            
            dirty_rects.append( draw_rank_star((405,430), 3) )
            dirty_rects.append( draw_rank_star((460,430), 2) )
            dirty_rects.append( draw_rank_star((515,430), 1) )
            
        if last_screen is not None:
            core.dissolve_transition(last_screen, core.screen.copy().convert(), 1000)
            last_screen = None
            
        if forceUpdate:
            dirty_rects = None
        forceUpdate = False
        core.updateScreen(dirty_rects)
def process(dirname, out_subdir, silent=False, only_widths=[]):
    """
    Compresses sample images from `dirname` using different number of terms in
    singular value expansion.

    Parameters
    ----------
    dirname : string
        Path to directory for the images to process.

    out_subdir : string
        Path to directory where the compressed images will be created.

    silent : bool
        Does not show any output when True.

    only_widths : list of int
        If the list is not empty, process only images that have given widths.
    """

    filenames = os.listdir(dirname)

    if not silent:
        print("Creating images:")

    supported_extensions = [".jpg", ".jpeg", ".png", ".bmp", ".gif"]

    for filename in filenames:
        _, file_extension = os.path.splitext(filename)
        if file_extension.lower() not in supported_extensions:
            continue

        path = os.path.join(dirname, filename)
        data = load_image(path)
        width, height = image_size(data)
        size_test = f"{width}x{height}"

        if len(only_widths) > 0 and width not in only_widths:
            continue

        for terms in [1, 2, 5, 10, 20, 50, 100, 150, 200, 300, 500]:
            outdir = os.path.join(out_subdir, size_test)

            if not os.path.exists(outdir):
                os.makedirs(outdir)

            ratio = compression_ratio(width=width, height=height, terms=terms)

            if ratio > 1.2:
                continue

            path_out = compressed_image_path(path,
                                             width=width,
                                             height=height,
                                             terms=terms,
                                             outdir=outdir)

            if not silent:
                print(path_out)

            result = compress_image(data, terms=terms)
            compressed_data = result['compressed_data']
            imageio.imwrite(path_out, compressed_data)
            annotate_from_width(path=path_out,
                                terms=terms,
                                width=width,
                                ratio=ratio)

    if not silent:
        print("Done")
Esempio n. 24
0
def yesno_prompt(text):
    last_screen = core.screen.copy().convert()
    ls = last_screen.copy().convert()
    bg = core.load_image("yesno_prompt.png", directory="gfx")
    selected = 0
    button_group = sprite.oSpriteGroup()
    def genButton(images, pos):
        button = sprite.oSprite()
        button.x = pos[0]
        button.y = pos[1]
        button.animations = {
            "active": {
                "N": [0,True,[sprite.oFrame(images[0])]]
            },
            "inactive": {
                "N": [0,True,[sprite.oFrame(images[1])]]
            }
        }
        button_group.add(button)
        return button
    
    selected = 0
    buttons = []
    buttons.append( genButton(core.game_images["no"], (200,300)) )
    buttons.append( genButton(core.game_images["yes"], (400,300)) )
    forceUpdate = True
    
    while True:
        lag = core.clock.tick(core.MAX_FPS)
        
        if core.handleEvents() == "quit":
            exit()
                    
        if Input.up(K_LEFT):
            core.play_sound("cursor_move")
            selected -= 1
            if selected < 0:
                selected = len(buttons)-1
        if Input.up(K_RIGHT):
            core.play_sound("cursor_move")
            selected += 1
            if selected >= len(buttons):
                selected = 0
        if Input.up(K_RETURN):
            core.play_sound("button_click")
            core.dissolve_transition(core.screen.copy().convert(), ls, 1000)
            return bool(selected)
        
        for i, button in enumerate(buttons):
            button.changeState("active" if i == selected else "inactive")
                    
        dirty_rects = button_group.update(lag)
        core.screen.blit(ls, (0,0))
        core.screen.blit(bg, (0,0))
        button_group.draw(core.screen)        
        
        dirty_rects.append(core.fonts.Draw(core.screen, None, 36, text,
         pygame.Rect(50,250,700,50), (255,255,255,255), alignHoriz='center', antialias=True))        
        
        if last_screen is not None:
            core.dissolve_transition(last_screen, core.screen.copy().convert(), 1000)
            last_screen = None
        
        core.updateScreen(dirty_rects)
Esempio n. 25
0
parser.add_argument("--sharpen",
                    action="store_true",
                    help="sharpens the image")
parser.add_argument("--blur", action="store_true", help="blurs the image")
parser.add_argument("--edges",
                    action="store_true",
                    help="enhances edges of the image")

args = parser.parse_args()

# argparse filetype seems weird when using the same io files
if not os.access(args.input_file, os.R_OK):
    print("Cannot access input file!")
    exit()

image = ez.load_image(args.input_file)

if image.ndim not in [2, 3]:
    print("Invalid input file!")
    exit()

mode = "RGB" if image.ndim == 3 else "L"

# perhaps implementing custom Namespace object that stores
# count and order of the arguments would be a better choice
while sys.argv:
    item = sys.argv.pop(0)

    if item not in functions:
        continue
    def test_compress_image_that_crashed(self):
        data = load_image("images/none_type_test.png")

        result = compress_image(data, terms=3)

        assert result['compressed_data'].shape == (256, 302, 3)
Esempio n. 27
0
 def __init__(self, image_name):
     sprite.Sprite.__init__(self)
     self.image, self.rect = load_image(image_name)
Esempio n. 28
0
def main_menu(window):
    """
    Create a main menu
    """
    # Play music
    jukebox = Jukebox()
    jukebox.load('intro')
    jukebox.play()

    # Create background
    background = pygame.Surface(window.get_size())
    background = background.convert()
    background.fill(CIEL)

    if pygame.font:
        font = pygame.font.Font(FONT_DK_SAMHAIN, 46)
        play_txt = font.render(_('JOUER'), 1, (10, 10, 10))
        play_txt_pos = play_txt.get_rect(
            centerx=200,
            centery=background.get_height()/2
        )
        background.blit(play_txt, play_txt_pos)

        load_txt = font.render(_('CHARGER'), 1, (10, 10, 10))
        load_txt_pos = load_txt.get_rect(
            centerx=550,
            centery=background.get_height()/2
        )
        background.blit(load_txt, load_txt_pos)

    window.blit(background, (0, 0))
    pygame.display.flip()

    #bomb = Bomb()
    allsprites = pygame.sprite.RenderPlain()

    for number in range(random.randint(4, 6)):
        altitude = random.randint(0, 300)
        speed = random.randint(1, 6)
        allsprites.add(Cloud(altitude, speed))

    hero = Hero()
    allsprites.add(hero)

    pygame.draw.rect(background, GREEN_PELOUSE, (0, 500, WINDOW_WIDTH, 100))

    brand, brand_rect = core.load_image('Battle-story.png', -1)
    brand_rect.left = WINDOW_WIDTH / 2 - brand_rect.width / 2
    brand_rect.top = WINDOW_HEIGHT / 3 - brand_rect.height / 2
    background.blit(brand, brand_rect)

    #bombsprites = pygame.sprite.RenderPlain((bomb))
    while True:
        for event in pygame.event.get():
            if event.type == QUIT:
                quit_menu(window)
            elif event.type == MOUSEBUTTONDOWN:
                posx, posy = pygame.mouse.get_pos()
                if posx >= play_txt_pos.left and \
                   posx <= play_txt_pos.left + play_txt_pos.width and \
                   posy >= play_txt_pos.top and \
                   posy <= play_txt_pos.top + play_txt_pos.height:
                    print("jeu")
                    game = Game('map1')
                    game.play(window)
                elif posx >= load_txt_pos.left and \
                   posx <= load_txt_pos.left + load_txt_pos.width and \
                   posy >= load_txt_pos.top and \
                   posy <= load_txt_pos.top + load_txt_pos.height:
                    print("Load")
        hero.play_auto_animation()
        allsprites.update()
        #bombsprites.update()
        window.blit(background, (0, 0))
        allsprites.draw(window)
        pygame.display.flip()
        FPS_CLOCK.tick(FPS_FREQUENCY)
    def test_compress_image_to_file_3_by_3(self):
        path = "images/test_3x3.bmp"
        path_out = "images/test_3x3_output.bmp"

        result = compress_image_to_file(path, path_out=path_out, terms=1, iterations=1,
                                        annotate=False)

        output_path = result['output_path']
        assert output_path == path_out
        assert os.path.exists(output_path)

        # Verify image pixels
        # ------------------

        result = load_image(path_out)
        assert result.shape == (3, 3, 3)

        # Red
        # ------

        data = result[:, :, 0]
        assert data[0][0] == 59
        assert data[0][1] == 49
        assert data[0][2] == 41

        assert data[1][0] == 145
        assert data[1][1] == 122
        assert data[1][2] == 102

        assert data[2][0] == 255
        assert data[2][1] == 221
        assert data[2][2] == 185

        # Green
        # ------

        data = result[:, :, 1]
        assert data[0][0] == 64
        assert data[0][1] == 54
        assert data[0][2] == 46

        assert data[1][0] == 150
        assert data[1][1] == 128
        assert data[1][2] == 107

        assert data[2][0] == 255
        assert data[2][1] == 226
        assert data[2][2] == 189

        # Blue
        # ------

        data = result[:, :, 2]
        assert data[0][0] == 69
        assert data[0][1] == 60
        assert data[0][2] == 50

        assert data[1][0] == 154
        assert data[1][1] == 134
        assert data[1][2] == 112

        assert data[2][0] == 255
        assert data[2][1] == 230
        assert data[2][2] == 194

        # Delete output image
        os.remove(output_path)
Esempio n. 30
0
def map_editor():
    
    mapa, filename = new_map()
    
    tiles = [
        map.oTile(0, 25, True),
        map.oTile(1, 25, True),
        map.oTile(2, 25, True),
        map.oTile(3, 25, True),
        map.oTile(4, 25, False),
        map.oTile(5, 25, False),
        map.oTile(6, 25, True)
    ]
        
    selector = core.load_image("selector.png", directory="gfx")
    current_tile = 0
    number = 0
    op = 0
    task = 0
    ox = 0
    oy = 0
    tw, th = mapa.tileSize

    while True:
        lag = core.clock.tick(core.MAX_FPS)
        
        
        mx, my = pygame.mouse.get_pos()
        ox = int(math.floor( (mx-mapa.x) / tw ))
        oy = int(math.floor( (my-mapa.y) / th ))
        if ox >= mapa.width:
            ox = mapa.width-1
        if oy >= mapa.height:
            oy = mapa.height-1
        if ox < 0:
            ox = 0
        if oy < 0:
            oy = 0
        
        dx, dy = ox, oy
        
        events = pygame.event.get()
        for event in events:
            if event.type == QUIT:
                exit()
            if event.type == KEYDOWN:
                if event.key == K_ESCAPE:
                    return
                if event.key == K_LEFT:
                    if task == 0: # tile
                        current_tile -= 1
                        if current_tile < 0:
                            current_tile = len(tiles)-1
                    elif task == 1: # number
                        number -= 1
                        if number < 0:
                            number = 9
                    elif task == 2: # op
                        op -= 1
                        if op < 0:
                            op = 4
                            
                if event.key == K_RIGHT:
                    if task == 0:
                        current_tile += 1
                        if current_tile >= len(tiles):
                            current_tile = 0
                    if task == 1:
                        number += 1
                        if number > 9:
                            number = 0
                    if task == 2:
                        op += 1
                        if op > 4:
                            op = 0

                if event.key == K_UP:                            
                    task -= 1
                    if task < 0:
                        task = 3
                if event.key == K_DOWN:
                    task += 1
                    if task > 3:
                        task = 0
                if event.key == K_F1:
                    mapa, filename = new_map()
                if event.key == K_F2:
                    mapa.save(filename)
                if event.key == K_F3:
                    mapa, filename = load_map()
                if event.key == K_F4:
                    mapa = edit_map(mapa)
        core.handleEvents(events)            
                
        if Input.down("MB1"):
            p = oy*mapa.width + ox
            if task == 0:
                if mapa.mapData[p] is None:
                    mapa.mapData[p] = map.oTile(0,0,False)
                mapa.mapData[p].imageID = tiles[current_tile].imageID
                mapa.mapData[p].height  = tiles[current_tile].height
                mapa.mapData[p].walkable = tiles[current_tile].walkable
            elif task == 1 and mapa.mapData[p] is not None:
                mapa.mapData[p].number = number
            elif task == 2 and mapa.mapData[p] is not None:
                mapa.mapData[p].op = op
            elif task == 3 and mapa.mapData[p] is not None:
                mapa.mapData[p].portal = True
        if Input.down("MB3"):
            p = oy*mapa.width + ox
            if task == 0:
                mapa.mapData[p] = None
            elif task == 1 and mapa.mapData[p] is not None:
                mapa.mapData[p].number = -1
            elif task == 2 and mapa.mapData[p] is not None:
                mapa.mapData[p].op = -1
            elif task == 3 and mapa.mapData[p] is not None:
                mapa.mapData[p].portal = False
        
        
        core.screen.fill((180,180,180,255))
        
        mapa.draw(core.screen)
        if task == 0:
            core.screen.blit( mapa.tileset[tiles[current_tile].imageID], (dx*tw,dy*th), special_flags=BLEND_RGBA_MULT )
        elif task == 1:
            core.screen.blit(mapa.tileset[10+number], (dx*tw, dy*th-25))
        elif task == 2:
            core.screen.blit(mapa.tileset[20+op], (dx*tw, dy*th-25))
        elif task == 3:
            core.screen.blit(mapa.tileset[8], (dx*tw, dy*th-25))
        core.screen.blit( selector, (dx*tw,dy*th-25) )
            
        
        core.fonts.Draw(core.screen, None, 24, 'x, y: ' + str(ox) + ', ' + str(oy), (10, 10), (255,255,255,255))
        
        core.updateScreen()
        
Esempio n. 31
0
def main_game():  
    global mc, tutorial, hints, killed_bugs
    

#    if yesno_prompt("Play tutorial level?"):
#        tutorial = True
#        hints    = 0
    
    core.baddys_group.clear()
    core.render_group.clear()
    core.attack_group.clear()
    
    # load bg
    sky_bg = core.load_image("sky_bg.png", directory="gfx", auto_alpha=False)
    exp_bgs = core.load_image("exp_bg.png", directory="gfx")
    exp_bg = sprite.oSprite()
    exp_bg.x = 10
    exp_bg.y = 545
    exp_bg.animations = {
        "stopped": {
            "N": [0, True, [
                sprite.oFrame(core.im_crop(exp_bgs, pygame.Rect(0,0,278,33))),
                sprite.oFrame(core.im_crop(exp_bgs, pygame.Rect(0,33,278,33))),
                sprite.oFrame(core.im_crop(exp_bgs, pygame.Rect(0,66,278,33)))
            ]]
        }
    }
    exp_bg.changeState("stopped")
    core.render_group.add(exp_bg)
       
    # initialize map
    core.level = map.oMap()

    # current stats
    level = 0
    level_time = oStatsDisp(core.level.time, (700,20), useNumbers=True, formatValue=format_level_time)
    lives = oStatsDisp(3, (10, 20), image=core.load_image("haato.png", directory="gfx"))
    score = oStatsDisp(0, (0,20), xalign=0.5, useNumbers=True, formatValue=format_score)

    # main character
    mc = sprite.oSprite()
    
    mc_sprite = core.load_image("nozomi.png", directory="gfx")
    mc_mask   = core.load_image("nozomi_mask.png", directory="gfx")
    
    mc.animFromStrip( mc_sprite, [
        ["stopped","S",1,1,0,True, (23,45), (23,33)],
        ["stopped","W",4,1,0,True, (23,45), (17,33)],
        ["stopped","E",7,1,0,True, (23,45), (30,33)],
        ["stopped","N",10,1,0,True,(23,45), (23,33)],
        ["walking","S",0,3,.02,True, (23,45), (23,33)],
        ["walking","W",3,3,.02,True, (23,45), (17,33)],
        ["walking","E",6,3,.02,True, (23,45), (30,33)],
        ["walking","N",9,3,.02,True, (23,45), (23,33)],
        ["dying",  "N",12,3,0.01,False, (23,45)]
    ], 48, 48, mc_mask )
    
    mc.changeState("stopped")
    mc.AI = core.handlePlayerControls
    core.render_group.add(mc)
    
    available_attacks = [
        featheratk.oDoubleAttack(core.load_image("double_feather.png", directory="gfx")),
        featheratk.oTriangleAttack(core.load_image("triangle_feather.png", directory="gfx")),
        featheratk.oCrossAttack(core.load_image("cross_feather.png", directory="gfx"))
    ]
    
    mc.attacks = [ 
        featheratk.oBasicAttack(core.load_image("debug_feather.png", directory="gfx"))        
    ]
    mc.use_attack = 0
    
    # load map
    load_level(level, mc)
    
    killed_bugs = 0
    lost_lives = 0
    mid_rank = 0
    rank_num = 0
    
    forceUpdate = True
    
    while True:
        lag = core.clock.tick(core.MAX_FPS)
        if lag <= 0:
            lag = 1
        
        level_time.update(level_time.value - lag/1000.0)
        if level_time.value < 0:
            main_char_death(mc)
            core.play_sound("mc_dying")
            lives.update(lives.value-1)
            lost_lives += 1
        
        if core.handleEvents() == "quit":
            return
                        
        dirty_rects = core.render_group.update(lag)
        core.level.updateNests(lag)
        exp_bg.animFrame = core.mathExp.state
        
        # check collisions
        # bugs
        if core.render_group.checkCollision(False, False, mc, core.baddys_group):
            main_char_death(mc)
            core.play_sound("mc_dying")
            lives.update(lives.value-1)
            lost_lives += 1
                
        # pickups
        picked = core.pickup_group.checkCollision(False, False, mc, core.pickup_group)
        for pickup in picked:
            pickup = pickup[0]
            # new live :D
            if isinstance(pickup, sprite.oHeartSprite):
                core.play_sound("live_gain")
                lives.update(lives.value+1)
                pickup.die()
                
        # feather attacks
        kills = core.attack_group.checkCollision(False, False, None, core.baddys_group)
        score.update(score.value + 100*len(kills))
        killed_bugs += len(kills)
        for i in kills:
            core.play_sound("bug_dying")
            if hasattr(i[0], "attackMgr"):
                feather, bug = i
            if hasattr(i[1], "attackMgr"):
                bug, feather = i
            feather.attackMgr.kills += 1
            feather.die()
            bug.OnAnimationEnd = bug.die
            bug.direction = "N"
            bug.changeState("dying")
        

        if lives.value == 0 and mc.OnAnimationEnd is None:
            if rank_num == 0:
                _rank = 0
            else:
                _rank = mid_rank / rank_num
            core.next_screen = core.curry(game_over, score.value, _rank)
            return
        
        # draw level / sprites
        core.screen.blit(sky_bg, (0,0))
        dirty_rects.extend( core.level.draw(core.screen) )
        core.render_group.draw(core.screen)
        
        # draw stats
        # lives
        dirty_rects.extend( lives.draw(core.screen) )
        # math exp
        dirty_rects.extend( core.mathExp.draw(core.screen) )
        # time
        dirty_rects.extend( level_time.draw(core.screen) )
        # score
        dirty_rects.extend( score.draw(core.screen) )
        # attacks
        for i, attack in enumerate(mc.attacks):
            attack.update(lag)
            dirty_rects.extend( attack.draw(core.screen, i == mc.use_attack) )
                
#        dirty_rects.append( core.fonts.Draw(core.screen, None, 24,
#         str(core.clock.get_fps()), (650, 50), (255,255,255,255)))
        
        
        if forceUpdate:
            dirty_rects = None
        forceUpdate = False
        core.updateScreen(dirty_rects)
        

        
        # clear level =D
        if core.level.portalActive:
            _score, rank = level_clear_screen(mc, killed_bugs, level_time.value, lives.value, lost_lives, score.value)
            score.update(_score)
            mid_rank += rank
            rank_num += 1
            lost_lives = 0
            core.baddys_group.clear()
            core.attack_group.clear()
            level += 1
            
            if not load_level(level, mc):
                core.next_screen = core.curry(game_ending, core.curry(hiscores_screen, score.value, mid_rank/rank_num))
                return
            
            
            if available_attacks:
                new_attack = available_attacks.pop(0)
                feather_received(new_attack)
                mc.attacks.append( new_attack )
            
            level_time.update(core.level.time)
            mc.changeState("stopped")
            for attack in mc.attacks:
                attack.freeze = 0
                attack.used = 0
                attack.kills = 0
                attack.last_rects = []
            
            forceUpdate = True
Esempio n. 32
0
def main_menu():
    core.play_music("main menu")
    # load bg
    bg = core.load_image("main_menu.png", directory="gfx", auto_alpha=False)
    selected = 0
    
    def genButton(images, pos):
        button = sprite.oSprite()
        button.x = pos[0]
        button.y = pos[1]
        button.animations = {
            "active": {
                "N": [0,True,[sprite.oFrame(images[0])]]
            },
            "inactive": {
                "N": [0,True,[sprite.oFrame(images[1])]]
            }
        }
        core.render_group.add(button)
        return button
    
    selected = 0
    buttons = []
    core.render_group.clear()
    for i, button in enumerate(["new game","help","credits","exit"]):
        y = 180 + i*40
        x = 75
        buttons.append( genButton(core.game_images[button], (x,y)) )
    
    menu_screens = [
        game_intro,     # new game
        hiscores_screen,# high scores
        credits_screen, # credits
        exit_screen,    # exit
    ]
    
    forceUpdate = True
    last_screen = core.screen.copy().convert()
    
    while True:
        lag = core.clock.tick(core.MAX_FPS)
        
        if core.handleEvents() == "quit":
            exit()
                    
        if Input.up(K_UP):
            core.play_sound("cursor_move")
            selected -= 1
            if selected < 0:
                selected = len(buttons)-1
        if Input.up(K_DOWN):
            core.play_sound("cursor_move")
            selected += 1
            if selected >= len(buttons):
                selected = 0
        if Input.up(K_RETURN):
            core.next_screen = menu_screens[selected]
            core.play_sound("button_click")
            return
        
        for i, button in enumerate(buttons):
            button.changeState("active" if i == selected else "inactive")
                    
        dirty_rects = core.render_group.update(lag)
        core.screen.blit(bg, (0,0))
        core.render_group.draw(core.screen)        
        
        if last_screen is not None:
            core.dissolve_transition(last_screen, core.screen.copy().convert(), 1000)
            last_screen = None
        
        if forceUpdate:
            dirty_rects = None
        core.updateScreen(dirty_rects)
Esempio n. 33
0
def hiscores_screen(score=None, rank=0):
    last_screen = core.screen.copy().convert()
    scores = []
    
    import xdrlib
    if not os.path.exists("high_scores"):
        # fill with default scores
        default_scores = [(100000,2),(50000,2),(30000,2),(20000,2),(10000,2),(8000,1),
                          (4000,1),(500,0)]
        for i in range(8):
            s, r = default_scores[i]
            scores.append( ("Nozomi", s, r) )
    
    else:
        # load from file
        data = open("high_scores", "rb").read()
        loader = xdrlib.Unpacker(data)
        for i in range(8):
            scores.append( (loader.unpack_string(), loader.unpack_int(), loader.unpack_int()) )
        
        
    # verify if we have a high score =D
    if score is not None:
        for index, _score in enumerate(scores):
            name, _score, _rank = _score
            if (score > _score) or (score == _score and rank > _rank):
                player_name = core.InputPrompt("Nice timing! You've scored high, Mr/Mrs...", "Player")
                scores.insert(index, (player_name, score, rank))
                break
    
        # save scores
        p = xdrlib.Packer()
        for name, score, rank in scores:
            p.pack_string(name)
            p.pack_int(score)
            p.pack_int(rank)
            
        f = open("high_scores", "wb")
        f.write(p.get_buffer())
        f.close()
    
    # load graphics =D
    bg = core.load_image("hiscores.png", directory="gfx")
    stars = pygame.transform.smoothscale(core.load_image("rank_star.png", directory="gfx"), (86,40))
    stars = [ core.im_crop(stars, pygame.Rect(0,0,43,40)),
              core.im_crop(stars, pygame.Rect(43,0,43,40)) ]
    
    
    core.screen.blit(bg, (0,0))
    
    
    # render high scores!
    for index, score in enumerate(scores):
        name, score, rank = score
        # 260, 100
        y = 100 + 40*index
        # name
        core.fonts.Draw(core.screen, None, 36, name, pygame.Rect(260,y,200,40),
         (255,255,255,255),alignVert='center',antialias=True)
        
        # points
        score = str(score)
        w = 160-core.numbers.getWidth(score)
        core.numbers.draw(core.screen, (470+w,y+8), score)
        
        # rank
        if rank > 2:
            core.screen.blit(stars[1], (660,y))
        else:
            core.screen.blit(stars[0], (660,y))
        if rank > 1:
            core.screen.blit(stars[1], (703,y))
        else:
            core.screen.blit(stars[0], (703,y))
        if rank > 0:
            core.screen.blit(stars[1], (746,y))
        else:
            core.screen.blit(stars[0], (746,y))
            
    core.dissolve_transition(last_screen, core.screen.copy().convert(), 1000)
    
    while True:
        events = pygame.event.get()
        if core.handleEvents(events) == "quit":
            exit()
            
        for event in events:
            if event.type == KEYUP:
                core.next_screen = main_menu
                core.play_sound("button_click")
                Input.update()
                return
Esempio n. 34
0
def main():
    # pre-initialize sound
    pygame.mixer.pre_init(44100,0,0,1024)
    
    # Initializes pygame
    pygame.init()
    
    # Verify if we can play sounds
    if pygame.mixer and not pygame.mixer.get_init():
        print 'Warning, no sound'
        pygame.mixer = None
        
    # We need to set up the window too
    pygame.display.set_caption('RED -spider lily-')
        
    # Set the display mode
    bestdepth = pygame.display.mode_ok(core.SCREENRECT.size, core.SCREEN_FLAGS, 32)
    core.screen = pygame.display.set_mode(core.SCREENRECT.size, core.SCREEN_FLAGS, bestdepth)
    
    core.screen.fill((0,0,0,255))
    
    pygame.mixer.music.set_volume(core.MUSIC_VOL/100.0)
    
    pygame.display.update()
    
    core.clock = pygame.time.Clock()
    core.initializeFonts()
    
    # load sounds
    core.game_sounds["block_activate"]  = core.load_sound("sfx", "step_activate.wav")
    core.game_sounds["block_deactivate"]= core.load_sound("sfx", "step_deactivate.wav")
    core.game_sounds["feather_throw"]   = core.load_sound("sfx", "feather_throw.wav")
    core.game_sounds["portal_activate"] = core.load_sound("sfx", "portal_activate.wav")
    core.game_sounds["button_click"]    = core.load_sound("sfx", "button_click.wav")
    core.game_sounds["mc_dying"]        = core.load_sound("sfx", "mc_dying.wav")
    core.game_sounds["bug_dying"]       = core.load_sound("sfx", "bug_dying.wav")
    core.game_sounds["menu_cancel"]     = core.load_sound("sfx", "menu_cancel.wav")
    core.game_sounds["cursor_move"]     = core.load_sound("sfx", "cursor_move.wav")
    core.game_sounds["live_gain"]       = core.load_sound("sfx", "live_gain.wav")
    
    # music mappings
    core.game_musics = {
        "main menu": "bgm/main_menu.ogg",
        "game over": "bgm/game_over.ogg",
        "stage clear": "bgm/stage_clear.ogg",
        "intro"    : "bgm/intro.ogg",
        "ending"   : "bgm/ending.ogg"
    }
    core.numbers = fontmgr.oSFont(core.load_image("numbers.png", directory="gfx"),
        ["0","1","2","3","4","5","6","7","8","9","-","+","/","*","%",":","=","?","!"])
    
    # load game buttons
    def getButtonImage(surface, button):
        y = button * 40
        inactive = core.im_crop(surface, pygame.Rect(0, y, 200, 40))
        active = core.im_crop(surface, pygame.Rect(200, y, 200, 40))
        return active, inactive
    
    buttons = core.load_image("buttons.png", directory="gfx")
    core.game_images["new game"] = getButtonImage(buttons, 0)
    core.game_images["options"]  = getButtonImage(buttons, 1)
    core.game_images["help"]     = getButtonImage(buttons, 2)
    core.game_images["credits"]  = getButtonImage(buttons, 3)
    core.game_images["exit"]     = getButtonImage(buttons, 4)
    core.game_images["yes"]      = getButtonImage(buttons, 5)
    core.game_images["no"]       = getButtonImage(buttons, 6)
        
    core.next_screen = game.main_menu
        
    while True:
        if core.next_screen is not None:
            core.next_screen()
        else:
            return