示例#1
0
    def __init__(self, bgimg=None):
        BgState.__init__(self, bgimg)

        pygame.mouse.set_visible(1)

        #background of message
        size = (250, 100)
        msg_bg = StaticWidget(size)
        draw_border(msg_bg)
        pos = utils.center(size, (800, 600))
        msg_bg.set_pos(pos)
        self.msg_bg = msg_bg
        msg_pos = pos

        txt_img = TextLine("Paused", fontsize=30)
        pos = (utils.center(txt_img.get_size(), size))
        msg_bg.blit(txt_img, pos)
        msg_bg.draw(self.background)

        #continue/cancel buttons
        btn = FixedTextButton((100, 24), "Abort Game", callback=self.to_menu)
        btn.set_pos((msg_pos[0], msg_pos[1] + size[1] + 4))
        btn.draw_border()
        self.add_button("cancel", btn)
        btn.draw(self.background)

        btn = FixedTextButton((100, 24), "Continue", callback=self.quit)
        btn.set_pos((msg_pos[0] + size[0] - 100, msg_pos[1] + size[1] + 4))
        btn.draw_border()
        self.add_button("start", btn)
        btn.draw(self.background)

        self.upd = 1
示例#2
0
    def __init__(self, img=None, lost=False):
        img = pygame.Surface((800, 600))
        BgState.__init__(self, img)
        self.game_bg = img.copy()
        pygame.mouse.set_visible(1)

        #background of message
        size = (300, 300)
        msg_bg = StaticWidget(size)
        #draw_border(msg_bg)
        pos = utils.center(size, (800, 600))
        msg_bg.set_pos(pos)
        self.msg_bg = msg_bg
        msg_pos = pos

        #message
        img = GFX["win"]
        if lost:
            img = GFX["lose"]
        pos = (utils.center(img.get_size(), size)[0], 1)
        msg_bg.blit(img, pos)

        score = SAVE["cur"]["score"] + 100 * SAVE["cur"]["lives"]
        txt = "Score: " + str(score)
        txt_img = TextLine(txt, fontsize=20)
        pos = (utils.center(txt_img.get_size(), size)[0], size[1] - 60)
        msg_bg.blit(txt_img, pos)

        scr_list = ScoreList()
        scr_list.max = 10
        scr_list.set_list(SAVE["overhigh"])

        #add highscore entry
        if scr_list.check(score):
            txt = "New Highscore!"
            txt_img = TextLine(txt, fontsize=20)
            pos = (utils.center(txt_img.get_size(), size)[0], size[1] - 30)
            msg_bg.blit(txt_img, pos)

            scr_list.max = 10
            scr_list.add(SAVE["cur"]["name"], score, SAVE["cur"]["lives"])
            SAVE["overhigh"] = scr_list.get_list()
            save_data()

        btn = FixedTextButton((120, 25), "Exit", callback=self.quit)
        btn.draw_border()
        btn.set_pos((msg_pos[0], msg_pos[1] + size[1] + 4))
        self.add_button("continue", btn)

        btn = FixedTextButton((120, 25),
                              "Highscore",
                              callback=self.to_highscore)
        btn.draw_border()
        btn.set_pos((msg_pos[0] + size[0] - 120, msg_pos[1] + size[1] + 4))
        self.add_button("highscore", btn)

        SAVE["cur"] = {}  #delete savegame
        save_data()

        self.redraw()
示例#3
0
    def __init__(self, state):
        BaseState.__init__(self)
        self.map = state.map
        self.bg = state.screen.copy()
        self.entry = TextEntry()
        self.widgets.append(self.entry)

        img = pygame.Surface((200, 100))
        img.fill((20, 20, 20))
        img.blit(FONT["small"].print_line("Enter map name:"), (20, 20))
        pos = utils.center(img.get_size(), self.screen.get_size())
        self.bg.blit(img, pos)
        self.entry.set_pos(
            utils.center(self.entry.get_size(), self.screen.get_size()))
        self.entry.draw(self.bg)

        self.add_kbevent(KEYDOWN, K_RETURN, callback=self.submit)
        self.add_kbevent(KEYDOWN, K_BACKSPACE, callback=self.entry.rem_char)
        self.add_kbevent(KEYDOWN,
                         K_MINUS,
                         callback=self.entry.add_char,
                         arg="-")

        for k in xrange(97, 123):  #letters
            self.add_kbevent(KEYDOWN,
                             k,
                             callback=self.entry.add_char,
                             arg=pygame.key.name(k))
        for k in xrange(48, 58):  #numbers
            self.add_kbevent(KEYDOWN,
                             k,
                             callback=self.entry.add_char,
                             arg=pygame.key.name(k))
示例#4
0
    def __init__(self, bgimg=None):
        BgState.__init__(self, bgimg)

        #background of message
        size = (300, 200)
        msg_bg = StaticWidget(size)
        #msg_bg.fill((0,0,128))
        draw_border(msg_bg)
        pos = utils.center(size, (800, 600))
        msg_bg.set_pos(pos)
        self.msg_bg = msg_bg
        msg_pos = pos

        txt = "New game"
        txt_img = TextLine(txt, fontsize=30)
        pos = (utils.center(txt_img.get_size(), size)[0], 10)
        msg_bg.blit(txt_img, pos)

        #message
        txt = "Enter name:"
        txt_img = TextLine(txt, fontsize=15)
        pos = (10, 80)
        msg_bg.blit(txt_img, pos)

        self.entry = TextEntry(size=(130, 22))
        self.entry.max = 10
        self.entry.set_pos(
            (msg_pos[0] + txt_img.get_size()[0] + 20, msg_pos[1] + 75))

        txt = "Note: Any previous savegame will be "
        txt_img = TextLine(txt, fontsize=12)
        pos = (10, 150)
        msg_bg.blit(txt_img, pos)

        txt = "overwritten!"
        txt_img = TextLine(txt, fontsize=12)
        pos = (10, pos[1] + 18)
        msg_bg.blit(txt_img, pos)

        #start/cancel buttons
        btn = FixedTextButton((100, 24), "Cancel", callback=self.quit)
        btn.set_pos((msg_pos[0], msg_pos[1] + size[1] + 2))
        btn.draw_border()
        self.add_button("cancel", btn)

        btn = FixedTextButton((100, 24), "Start!", callback=self.submit)
        btn.set_pos((msg_pos[0] + size[0] - 100, msg_pos[1] + size[1] + 2))
        btn.draw_border()
        self.add_button("start", btn)

        self.add_textentry_events(self.entry)
        self.add_kbevent(KEYDOWN, K_ESCAPE, self.quit)

        self.redraw()
def load_objects():
    #load special map object-images for editor
    #(i.e. start and exit positions, dialog triggers)

    obj = {  #TODO: add more objects + a way to define their image
        "start":None,
        "exit":None,
        "enemy":None,
        "dojo":"dojo.png",
        "dtrigger":None,
    }

    objects = {}
    surf = pygame.Surface((GLOBALS["tile_size"], GLOBALS["tile_size"]))
    for o in obj.keys():
        if obj[o] is None:  #no image
            surf.set_colorkey(None)
            surf.fill((255, 0, 255))
            surf.set_colorkey((255, 0, 255))
            img = surf.copy()
            txt = TextLine(o, fontsize=10, bgcolor=(0, 0, 0))
            img.blit(txt, utils.center(txt.get_size(), img.get_size()))
        else:
            img = load_image(obj[o])
        objects[o] = img

    #dojo entry
    objects["dojo_entry"] = load_image("dojo_entry.png", alpha=True)
    GLOBALS["objects"] = objects
    def __init__(self):
        if not pygame.mixer.music.get_busy():
            JB.play("bgm.xm", -1)

        BaseState.__init__(self)

        self.background.blit(GFX_bg["mainscreen.png"], (0, 0))
        self.fps = 30

        buttons = ["startgame", "continue", "custom", "editor", "exit"]
        #place menu buttons

        w, h = 127, 50
        full_h = 5 * (h + 2)
        x, y = utils.center((w, full_h), (800, 600))
        self.wobbles = []
        for b in buttons:
            img1 = GFX_menu[b + "1.png"]
            img2 = GFX_menu[b + "2.png"]
            btn = WobbleButton(img1, img2, callback=self.submit, action=b)
            btn.set_pos((x, y))
            self.wobbles.append(btn)
            y = y + h + 2

        r = pygame.rect.Rect([(226, 51), (35, 30)])
        r = ClickArea(r, callback=self.next_state)
        self.widgets.append(r)

        #keyboard shortcuts
        self.add_kbevent(KEYDOWN, K_ESCAPE, self.quit)
示例#7
0
 def __init__(self, bgimg):
     BgState.__init__(self, bgimg)
     txt = TextLine("Press any key to start", fontsize=15)
     pos = (utils.center(txt.get_size(),
                         (800, 600))[0], 590 - txt.get_size()[1])
     self.background.blit(txt, pos)
     self.upd = 1
示例#8
0
 def show_msg(self, txt):
     #show text on bottom of screen
     self.background.blit(self.no_msg, self.no_msg_pos)
     text = TextLine(txt, fontsize=12)
     pos = utils.center(text.get_size(), ((800, 600)))
     pos[1] = 590 - text.get_size()[1]
     self.background.blit(text, pos)
示例#9
0
    def __init__(self, bgsurf, mapdata):
        MsgState.__init__(self, bgsurf)
        wx, wy = self.winpos

        txt = TextLine("Save")
        x = utils.center(txt.get_size(), self.window.get_size())[0]
        y = 10
        self.window.blit(txt, (x, y))

        x = 20
        y += 30
        txt = TextLine("Enter filename:", fontsize=14)
        self.window.blit(txt, (x, y))

        y += 20
        self.add_textentry((x, y))
        if mapdata.filename is not None:
            self.entry.text = mapdata.filename
            self.entry.update()

        x = self.entry.get_size()[0] + 20
        txt = TextLine(".map", fontsize=14)
        self.window.blit(txt, (x, y))

        self.mapdata = mapdata
 def __init__(self):
     State.__init__(self)
     img = GLOBALS["ui_stuff"]["logo.png"]
     self.background.blit(
         img, utils.center(img.get_size(), GLOBALS["screen_size"]))
     self.quit_timer = utils.Timer(50)
     self.quit_timer.deactivate()
     GLOBALS["sfx"]["pululummm.wav"].play()
 def set_text(self, text):
     self.fill(self.bg_col)
     txt = TextLine(text,
                    fontsize=14,
                    bgcolor=self.bg_col,
                    color=self.fontcolor)
     self.text = text
     pos = utils.center(txt.get_size(), self.get_size())
     self.blit(txt, pos)
示例#12
0
    def __init__(self, screen, window, pos=None):
        BaseState.__init__(self)
        self.bg = screen.copy()
        if pos is None:
            pos = utils.center(window.get_size(), (800, 600))
        self.bg.blit(window, pos)
        self.cur_troops = None

        self.add_kbevent(KEYUP, K_ESCAPE, callback=self.abort)
 def __init__(self, size, text, bgcolor, callback, arg=None, font="small"):
     img = pygame.Surface(size)
     img.fill(bgcolor)
     self.bgcolor = bgcolor
     self.font = FONT[font]
     txt = self.font.print_line(text)
     pos = utils.center(txt.get_size(), size)
     img.blit(txt, pos)
     self.changed = 1
     ImgButton.__init__(self, img, callback, arg)
 def show_msg(self):
     img = FONT["small"].print_line(self.msg)
     if self.align=="c":
         pos = utils.center(img.get_size(), self.get_size())
     elif self.align=="l":
         pos = (0,0)
     else:
         pos = (self.get_size()[0]-img.get_size()[0], 0)
     self.fill(self.bgcolor)
     self.blit(img, pos)
示例#15
0
    def __init__(self, mapdata):
        BaseState.__init__(self)
        if not mapdata:
            self.quit()
            return

        self.fps = 60
        self.sprites = pygame.sprite.Group()

        #timer for pipe movement
        self.timer = utils.Timer(5)

        #map layer
        self.mapdata = mapdata
        self.mapcopy = mapdata.copy()

        self.map_layer = pygame.Surface((800, 544))
        self.map_layer.set_colorkey((255, 0, 255))
        self.pipe_layer = pygame.Surface((800, 544))
        self.pipe_layer.set_colorkey((255, 0, 255))
        self.pipe_layer.fill((255, 0, 255))

        draw_map(self.mapdata, self.map_layer)
        draw_pipes(self.mapdata, self.pipe_layer)

        #get gfxmap
        self.gfxmap = GfxMap(mapdata)

        #player
        self.player = MrWobbly(GFX_wobbly)
        self.gfxmap.place_player(self.player)
        self.sprites.add(self.player)

        self.old_y = self.player.pos[1]

        #black message box
        self.no_msg = pygame.Surface((800, 24))
        self.no_msg.fill((0, 0, 0))
        self.no_msg_pos = utils.center(self.no_msg.get_size(), (800, 600))
        self.no_msg_pos[1] = 600 - self.no_msg.get_size()[1]

        #keyboard bindings
        self.add_kbevent(KEYDOWN, K_r, callback=self.reload)
        self.add_kbevent(KEYDOWN, K_F12, callback=self.reload)

        #player movement
        self.add_kbevent(KEYDOWN, K_RIGHT, callback=self.player.move, dir=1)
        self.add_kbevent(KEYUP, K_RIGHT, callback=self.player.move, dir=0)
        self.add_kbevent(KEYDOWN, K_LEFT, callback=self.player.move, dir=-1)
        self.add_kbevent(KEYUP, K_LEFT, callback=self.player.move, dir=0)

        self.add_kbevent(KEYDOWN, K_UP, callback=self.use)  #use btn
        self.add_kbevent(KEYDOWN, K_DOWN, callback=self.pipe)  #use pipe
示例#16
0
    def __init__(self, bgimg=None):
        BgState.__init__(self, bgimg)

        bgsize = (300, 400)
        bgimg = pygame.Surface(bgsize)
        draw_border(bgimg, width=4)
        self.background.blit(bgimg, (250, 100))

        txt = TextLine("Highscore", fontsize=30)
        pos = (utils.center(txt.get_size(), (800, 600))[0], 120)
        self.background.blit(txt, pos)

        x, y = 275, pos[1] + txt.get_size()[1] + 40
        tmp = SAVE["overhigh"][:]
        tmp.reverse()
        for i in tmp:
            name, score, lives = i
            self.background.blit(TextLine(name), (x, y))
            self.background.blit(TextLine(str(score)), (x + 150, y))
            self.background.blit(TextLine(str(lives)), (x + 240, y))
            y += 25

        img = pygame.transform.scale(GFX["ghost"], (19, 19))
        icon_pos = (x + 235, pos[1] + 55)
        self.background.blit(img, icon_pos)
        img = pygame.transform.scale(GFX["catnip"], (19, 19))
        icon_pos = (x + 168, pos[1] + 55)
        self.background.blit(img, icon_pos)

        btn = FixedTextButton((200, 25), "Back to Menu", callback=self.quit)
        btn.draw_border()
        x = utils.center(btn.get_size(), (800, 600))[0]
        btn.set_pos((x, 510))
        btn.draw(self.background)
        self.add_button("back", btn)

        self.add_kbevent(KEYDOWN, K_ESCAPE, self.quit)
        self.upd = 1
示例#17
0
    def __init__(self, bgimg=None, mapname="", folder="", pacmode=False):
        BgState.__init__(self, bgimg)
        pygame.mouse.set_visible(1)

        self.pacmode = pacmode
        self.mapname = mapname
        self.folder = folder

        #background of message
        size = (250, 100)
        msg_bg = StaticWidget(size)
        draw_border(msg_bg)
        pos = utils.center(size, (800, 600))
        msg_bg.set_pos(pos)
        self.msg_bg = msg_bg
        msg_pos = pos

        txt_img = TextLine("You lose.", fontsize=30)
        pos = (utils.center(txt_img.get_size(), size))
        msg_bg.blit(txt_img, pos)
        msg_bg.draw(self.background)

        #continue/cancel buttons
        btn = FixedTextButton((100, 24), "Abort Game", callback=self.quit)
        btn.set_pos((msg_pos[0], msg_pos[1] + size[1] + 4))
        btn.draw_border()
        self.add_button("cancel", btn)
        btn.draw(self.background)

        btn = FixedTextButton((100, 24), "Try Again", callback=self.tryagain)
        btn.set_pos((msg_pos[0] + size[0] - 100, msg_pos[1] + size[1] + 4))
        btn.draw_border()
        self.add_button("start", btn)
        btn.draw(self.background)

        self.add_kbevent(KEYDOWN, K_ESCAPE, self.quit)
        self.upd = 1
示例#18
0
    def __init__(self, game):
        PopUpMenu.__init__(self, game.screen, GFX["airstrike.png"])
        self.offset = utils.center(GFX["airstrike.png"].get_size(), (800, 600))
        self.all = False
        self.game = game
        self.msgline = game.msgline
        self.msgline.set_msg("Select troops")
        self.msgline.draw(self.bg)
        self.avail = len(game.from_reg.get_available()["Jet"])
        self.avail_jets = game.from_reg.get_available()["Jet"]

        #add Slider
        x, y = (49 + self.offset[0], 51 + self.offset[1])
        self.slider = MoveSlider(self.avail, 0)
        self.slider.set_pos((x, y))
        self.widgets.append(self.slider)
        #add Sliderlinked Info
        link = SliderLinkedInfo((20, 7))  #number of units left behind
        link.set_pos((x - 25, y + 2))
        self.slider.add_link(link)
        size = self.slider.get_size()
        link = SliderLinkedInfo((20, 7), "right")  #number of units to move
        link.set_pos((x + size[0] + 5, y + 2))
        self.slider.add_link(link)

        #All-button
        img2 = GFX["all.png"]
        tmp = img2.copy()
        tmp.set_colorkey((255, 255, 0))
        img1 = pygame.Surface(img2.get_size())
        img1.fill((0, 0, 0))
        img1.blit(tmp, (0, 0))
        button = FlipButton(img1, img2, self.select_all)
        button.set_pos((110 + self.offset[0], 70 + self.offset[1]))
        self.widgets.append(button)

        #confirm button
        button = NamedFlipButton("confirm", callback=self.confirm)
        self.add_button(button, (34 + self.offset[0], 83 + self.offset[1]),
                        "confirm")

        #cancel button
        button = NamedFlipButton("cancel", callback=self.cancel)
        self.add_button(button, (151 + self.offset[0], 83 + self.offset[1]),
                        "cancel")

        self.add_kbevent(KEYDOWN, K_RETURN, self.confirm, arg=True)
        self.add_kbevent(KEYDOWN, K_ESCAPE, self.cancel, arg=True)
        self.add_kbevent(KEYDOWN, K_a, self.select_all)
    def __init__(self, surface, winsize=(400,300)):
        BaseState.__init__(self)
        self.background = surface

        self.scr_update = 1
        self.entry = None

        self.window = pygame.Surface(winsize)
        self.window.fill((10,10,10))

        self.winpos = utils.center(self.window.get_size(), \
            self.screen.get_size())

        #quit by pressing ESCAPE
        self.add_kbevent(KEYDOWN, K_ESCAPE, callback=self.quit)
示例#20
0
    def __init__(self, bgsurf):
        MsgState.__init__(self, bgsurf)
        wx, wy = self.winpos

        txt = TextLine("Load")
        x = utils.center(txt.get_size(), self.window.get_size())[0]
        y = 10
        self.window.blit(txt, (x, y))

        #get map files
        self.filenames = get_mapnames(MAP_folder)

        self.cur_page = 0
        self.max_lines = 10

        #file buttons
        x = 45
        y = 40
        img = pygame.Surface((300, 14))
        img.fill((0, 0, 150))
        self.file_buttons = []
        for i in xrange(self.max_lines):
            btn = ImgButton(img, callback=self.load_map, btn_nr=i)
            btn.set_pos((x + self.winpos[0], y + self.winpos[1]))
            self.file_buttons.append(btn)
            self.widgets.append(btn)
            y += 20

        #scroll buttons
        s = 25
        img = pygame.Surface((s, s))  #draw rectangle
        img.fill((10, 10, 10))
        pygame.draw.polygon(img, (255, 255, 255), [(0, 0), (s, s / 2), (0, s)],
                            1)

        y = y + self.winpos[1] + 20
        x = self.winpos[0] + 220
        btn = ImgButton(img, callback=self.scroll, dir=1)
        btn.set_pos((x, y))
        self.widgets.append(btn)

        x = x - s - 20
        img = pygame.transform.rotate(img, 180)
        btn = ImgButton(img, callback=self.scroll, dir=-1)
        btn.set_pos((x, y))
        self.widgets.append(btn)

        self.draw_filenames()
示例#21
0
    def __init__(self, img, map, mapname="", folder="custom"):
        BgState.__init__(self, img)
        self.map = map
        self.folder = folder
        pygame.mouse.set_visible(1)

        #background image + "save as"
        self.menu = StaticWidget((250, 100))
        self.menu.fill((0, 0, 0))
        txt = TextLine("Save as:", fontsize=15)
        self.menu.blit(txt, (10, 10))
        w, h = self.menu.get_size()
        pygame.draw.lines(self.menu, (0, 0, 255), True,
                          ((0, 0), (w - 4, 0), (w - 4, h - 4), (0, h - 4)), 4)
        x, y = utils.center((w, h), (800, 600))
        self.menu.set_pos((x, y))

        #text entry + ".map"
        self.entry = TextEntry(text=mapname[:-4])
        self.entry.set_pos((x + 10, y + 30))
        txt = TextLine(".map", fontsize=20)
        self.menu.blit(txt, (self.entry.get_size()[0] + 15, 30))

        #save/cancel buttons
        msg_pos = self.menu.get_pos()
        size = self.menu.get_size()
        btn = FixedTextButton((100, 24), "Cancel", callback=self.quit)
        btn.set_pos((msg_pos[0], msg_pos[1] + size[1] + 4))
        btn.draw_border()
        self.add_button("cancel", btn)
        btn.draw(self.background)

        btn = FixedTextButton((100, 24), "Save", callback=self.submit)
        btn.set_pos((msg_pos[0] + size[0] - 100, msg_pos[1] + size[1] + 4))
        btn.draw_border()
        self.add_button("save", btn)
        btn.draw(self.background)

        self.redraw()

        self.quit_timer = utils.Timer(20)
        self.quit_timer.deactivate()

        self.add_kbevent(KEYDOWN, K_ESCAPE, callback=self.quit)
        self.add_textentry_events(self.entry)
示例#22
0
    def __init__(self, game):
        PopUpMenu.__init__(self, game.screen, GFX["build.png"])
        self.game = game

        reg = self.game.map.selected
        self.region = reg

        self.troops = []
        for type in self.region.troops.keys():
            self.troops.append(len(self.region.troops[type]))

        #draw ui elements
        self.offset = utils.center(GFX["build.png"].get_size(), (800, 600))
        wx, wy = self.offset

        #submit button
        button = NamedFlipButton("confirm", callback=self.submit)
        self.add_button(button, (206 + wx, 227 + wy), "submit")
        self.widgets.append(button)

        #cancel button
        button = NamedFlipButton("cancel", callback=self.abort)
        self.add_button(button, (268 + wx, 227 + wy), "abort")
        self.widgets.append(button)

        #plus and minus buttons
        pos = [(110, 42), (110, 119), (110, 196), (284, 42), (284, 119)]
        snd = SFX["sldclick"]
        btns = ["plusplus", "plus", "minus", "minusminus"]
        for i in xrange(len(TYPES)):
            x, y = pos[i]
            for name in btns:
                img2 = GFX["btn_" + name + ".png"]
                tmp = img2.copy()
                tmp.set_colorkey((255, 255, 0))
                img1 = pygame.Surface(img2.get_size())
                img1.fill((0, 0, 0))
                img1.blit(tmp, (0, 0))
                id = (i, name)
                button = FlipButton(img1, img2, callback=self.clicked, \
                    args=id, snd=snd)
                self.add_button(button, (x + wx, y + wy), id)
                y += 11
        self.update_build()
    def __init__(self):
        BaseState.__init__(self)
        self.img = load_image("story/outro.png")
        self.background.blit(self.img, (0, 0))

        self.alpha = 0
        self.the_end = TextLine("The End.",
                                color=(255, 255, 255),
                                bgcolor=(255, 181, 145),
                                fontsize=16)
        self.the_end.set_alpha(0)
        self.the_end_pos = utils.center(self.the_end.get_size(), (800, 600))
        self.the_end_pos[1] = 140

        JB.play("beachwaves.ogg", -1)

        self.faded_in = False
        self.faded_out = False
        self.add_kbevent(KEYDOWN, K_ESCAPE, self.do_quit)
示例#24
0
    def redraw(self):
        #draw map
        self.background.fill((80, 80, 80))
        self.map.draw_items()
        self.map_pos = utils.center(self.map.get_size(),
                                    self.screen.get_size())
        self.background.blit(self.map, self.map_pos)

        #update map click rect
        self.map_rect.rect = pygame.Rect(self.map_pos, self.map.get_size())

        #draw grid
        grid = pygame.Surface(self.map.get_size())
        grid.set_colorkey((0, 0, 0))
        grid.blit(self.grid, (0, 0))
        self.background.blit(grid, self.map_pos)

        #draw buttons
        for k in self.buttons.keys():
            self.buttons[k].draw(self.background)
示例#25
0
    def submit(self):
        if self.quit_timer.active:
            return

        filename = self.entry.text + ".map"
        if not self.map.save(filename, self.folder):
            txt = "Ok, map saved."
            self.next = Editor(filename, folder=self.folder)
        else:
            txt = "ERROR: Could not save map."

        size = self.menu.get_size()
        msg = pygame.Surface((size[0] - 2, size[1] - 2))
        msg.fill((0, 0, 0))
        txt = TextLine(txt)
        msg.blit(txt, utils.center(txt.get_size(), msg.get_size()))
        self.menu.blit(msg, (1, 1))
        self.menu.draw(self.background)
        self.upd = 1

        self.quit_timer.activate()
示例#26
0
    def draw_img(self):  #TODO: fancy letter effect
        self.blit(self.bg, (0, 0))
        try:
            speaker, text = self.dialog[self.cur_page]
        except:
            self.done = 1
            return

        portraits = GLOBALS["portraits"]
        txt = TextArea(text, fontsize=15, length=self.txt_length)
        pos = utils.center(txt.get_size(), self.get_size())

        #self.blit(txt, self.txt_pos)
        self.blit(txt, (self.txt_pos[0], pos[1]))
        if portraits.has_key(speaker):
            self.blit(portraits[speaker], self.port_pos)
        if self.draw_textline:
            self.textline.draw(self)

        self.draw_border((255, 255, 255), 2)

        #update blink timer
        if self.blink_timer.update():
            self.draw_textline = not self.draw_textline
示例#27
0
    def __init__(self, dialog):
        self.done = 0
        size = (590, 140)
        pos = (utils.center(size, GLOBALS["screen_size"])[0], 30)
        StaticWidget.__init__(self, size)
        self.set_pos(pos)

        self.dialog = dialog
        self.cur_page = 0

        #txt and portrait placement
        self.txt_length = 45
        self.txt_pos = (130, 15)
        self.port_pos = (20, 15)

        #blinky <press space> textline
        self.blink_timer = utils.Timer(20)
        self.draw_textline = 0
        self.textline = TextLine("PRESS X", fontsize=12)
        x = size[0] - self.textline.get_size()[0] - 5
        y = size[1] - self.textline.get_size()[1] - 2
        self.textline.set_pos((x, y))

        self.bg = pygame.Surface(size)  #may add some border/decoration
示例#28
0
    def __init__(self, screen):
        BaseState.__init__(self)
        self.bg = screen.copy()
        filenames = os.listdir(MAP_PATH)
        filenames.sort()
        self.filenames = filenames

        self.page = 0

        img = pygame.Surface((200, 220))
        img.fill((20, 20, 20))
        img.blit(FONT["small"].print_line("Select map:"), (20, 20))
        pos = utils.center(img.get_size(), self.screen.get_size())
        self.bg.blit(img, pos)

        x = 10 + pos[0]
        y_add = 30 + pos[1]
        self.map_buttons = []
        for i in xrange(10):
            y = i * 15 + y_add
            button = TxtButton((180, 12),
                               "", (20, 20, 100),
                               callback=self.submit,
                               arg="")
            button.set_pos((x, y))
            button.draw(self.bg)
            self.widgets.append(button)
            self.map_buttons.append(button)
        self.show_buttons()

        button = TxtButton((50, 12),
                           "prev", (20, 100, 20),
                           callback=self.add_page,
                           arg=-1)
        button.set_pos((10 + pos[0], y_add + 150))
        button.draw(self.bg)
        self.widgets.append(button)

        button = TxtButton((50, 12),
                           "next", (20, 100, 20),
                           callback=self.add_page,
                           arg=1)
        button.set_pos((10 + pos[0] + 130, y_add + 150))
        button.draw(self.bg)
        self.widgets.append(button)

        button = TxtButton((50, 12),
                           "Cancel", (100, 20, 20),
                           callback=self.quit)
        button.set_pos((10 + pos[0], y_add + 170))
        button.draw(self.bg)
        self.widgets.append(button)

        button = TxtButton((50, 12),
                           "New map", (20, 20, 100),
                           callback=self.new)
        button.set_pos((10 + pos[0] + 70, y_add + 170))
        button.draw(self.bg)
        self.widgets.append(button)

        self.add_kbevent(KEYDOWN, K_ESCAPE, callback=self.quit)
示例#29
0
    def __init__(self,
                 img,
                 mapname,
                 score,
                 custom=False,
                 name="",
                 pacmode=False,
                 win=True):
        BgState.__init__(self, img)
        score_str = str(score)

        #background of message
        size = (300, 200)
        msg_bg = StaticWidget(size)
        #msg_bg.fill((0,0,128))
        draw_border(msg_bg)
        pos = utils.center(size, (800, 600))
        msg_bg.set_pos(pos)
        self.msg_bg = msg_bg
        msg_pos = pos

        #message
        if win:
            txt = "Map completed!"
        else:
            txt = "You were caught!"
        txt_img = TextLine(txt, fontsize=30)
        pos = (utils.center(txt_img.get_size(), size)[0], 10)
        msg_bg.blit(txt_img, pos)

        txt = "Score: " + score_str
        txt_img = TextLine(txt, fontsize=20)
        pos = (utils.center(txt_img.get_size(), size)[0], 60)
        msg_bg.blit(txt_img, pos)

        #check if highscore
        type = "camphigh"
        if custom:
            type = "custhigh"

        if pacmode:
            type = "pachighca"
            if custom:
                type = "pachighcu"

        scr_list = []
        if SAVE[type].has_key(mapname):
            scr_list = SAVE[type][mapname]
        else:
            SAVE[type][mapname] = []

        self.type = type
        self.mapname = mapname
        self.score = score
        self.scr_list = ScoreList()
        self.scr_list.set_list(scr_list)

        self.entry = None
        #add highscore entry
        if self.scr_list.check(score):
            txt = "New Highscore!"
            txt_img = TextLine(txt, fontsize=20)
            pos = (utils.center(txt_img.get_size(), size)[0], 120)
            msg_bg.blit(txt_img, pos)

            txt = "Enter name:"
            txt_img = TextLine(txt, fontsize=20)
            pos = (10, 150)
            msg_bg.blit(txt_img, pos)

            self.entry = TextEntry(text=name, size=(130, 22))
            self.entry.max = 10
            self.entry.set_pos(
                (msg_pos[0] + txt_img.get_size()[0] + 20, msg_pos[1] + 150))

            self.add_textentry_events(self.entry)
        btn = FixedTextButton((120, 25), "Continue", callback=self.submit)
        btn.draw_border()
        btn.set_pos((msg_pos[0] + size[0] - 120, msg_pos[1] + size[1] + 4))
        self.add_button("continue", btn)
        self.add_kbevent(KEYDOWN, K_RETURN, self.quit)
        self.redraw()

        #keys
        self.add_kbevent(KEYDOWN, K_ESCAPE, self.quit)
示例#30
0
    def restart(self):
        mapname = self.mapname
        folder = self.folder
        test = self.test

        self.upd = 1
        self.fps = 50
        self.win = False
        self.lost = False
        self.win_shown = False
        self.started = False
        self.custom = not folder == "lvl"

        self.screen = pygame.display.get_surface()
        self.background = pygame.Surface(self.screen.get_size())
        pygame.mouse.set_visible(False)

        self.cataway_timer = utils.Timer(100)
        self.cataway_timer.deactivate()

        #load map
        self.map = Map(mapname, edit=False, folder=folder)
        self.map_pos = utils.center(self.map.get_size(),
                                    self.screen.get_size())
        self.background.blit(self.map, self.map_pos)
        pygame.display.flip()

        #setup blocking spritegroup
        self.walls = pygame.sprite.Group()
        block = self.map.get_blocking()
        size = (32, 32)
        for b in block:
            pos = (b[0] * 32 + self.map_pos[0], b[1] * 32 + self.map_pos[1])
            s = pygame.sprite.Sprite()
            s.rect = pygame.Rect(pos, size)
            self.walls.add(s)

        #catnip pellets
        catnip = []
        self.catnip_rects = []
        for p in self.map.pellets:
            c = CatNip(p)
            c.set_pos(
                (p[0] * 32 + self.map_pos[0], p[1] * 32 + self.map_pos[1]))
            catnip.append(c)
            self.catnip_rects.append(c.rect)
        self.catnip = pygame.sprite.Group(catnip)

        #cataway
        cataway = []
        for c in self.map.cataway:
            x = CatAway(c)
            x.set_pos(
                (c[0] * 32 + self.map_pos[0], c[1] * 32 + self.map_pos[1]))
            cataway.append(x)
        self.cataway = pygame.sprite.Group(cataway)

        #catghosts
        cats = []
        for g in self.map.ghost_start:
            c = Cat(len(cats))
            c.set_pos(
                (g[0] * 32 + self.map_pos[0], g[1] * 32 + self.map_pos[1]))
            cats.append(c)
        self.catlist = cats
        self.cats = pygame.sprite.Group(cats)
        self.active_cat = 0
        self.set_active(0)

        #pacdogs
        dogs = []
        self.doglist = []
        for p in self.map.pac_start:
            d = PacDog()
            d.set_pos(
                (p[0] * 32 + self.map_pos[0], p[1] * 32 + self.map_pos[1]))
            d.ai.setup(self.map, self.catlist)
            self.doglist.append(d)
            dogs.append(d)
        self.dogs = pygame.sprite.Group(dogs)

        #player stats
        self.score = self.map.get_score()  #score
        self.score_img = Score(self.score)

        self.lives_img = StaticWidget((60, 32))
        self.lives_img.blit(GFX["ghost"], (0, 0))
        self.lives_img.blit(TextLine("x" + str(self.lives)), (32, 10))
        self.lives_img.set_pos((800 - self.lives_img.get_size()[0], 0))

        self.level_img = TextLine(self.mapname[:-4].upper())
        x = utils.center(self.level_img.get_size(), (800, 600))[0]
        self.level_img.set_pos((x, 2))

        #setup spritegroups
        self.sprites = pygame.sprite.RenderUpdates()
        self.sprites.add(self.cats)
        self.sprites.add(self.dogs)

        self.static_sprites = pygame.sprite.Group()
        self.static_sprites.add(self.catnip)
        self.static_sprites.add(self.cataway)

        self.start_paused = False