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
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()
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))
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)
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
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)
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)
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)
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
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
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
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)
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()
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)
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)
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)
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()
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
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
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)
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)
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