def create_widgets(self): # Using 'frame_main' to pack all subframes frame_main = tk.Frame(self.root) frame_main.grid(row=0, column=0) ### Frame - Dice select frame_dice_select = tk.Frame(frame_main) frame_dice_select.grid(row=0, column=0, padx=(5, 5), pady=(15, 0)) ## Subframe - Die1 & Die2 frame_dice_only = tk.Frame(frame_dice_select) frame_dice_only.grid(row=0, column=0) frame_die1 = tk.Frame(frame_dice_only) frame_die1.grid(row=0, column=1) frame_die2 = tk.Frame(frame_dice_only) frame_die2.grid(row=1, column=1) frame_submit = tk.Frame(frame_dice_select) frame_submit.grid(row=0, column=1) label_die1 = tk.Label(frame_dice_only, text="Die 1: ") label_die1.grid(row=0, column=0) label_die2 = tk.Label(frame_dice_only, text="Die 2: ") label_die2.grid(row=1, column=0) # Loop to create frames and bind actions for Dice selection for i in range(6): def make_lambda(die, index): return lambda v: self.select_die(die, index + 1) frame_die_x = tk.Canvas(frame_die1, width=37, height=37) self.canvas1_dice.append(frame_die_x) self.canvas1_dice[i].bind('<Button-1>', make_lambda(1, i)) frame_die_y = tk.Canvas(frame_die2, width=37, height=37) self.canvas2_dice.append(frame_die_y) self.canvas2_dice[i].bind('<Button-1>', make_lambda(2, i)) die = Die(i + 1) die.draw(self.canvas1_dice[i]) die.draw(self.canvas2_dice[i]) button_submit = tk.Button( frame_submit, text="Submit", command=lambda: self.submit_dice(self.die1value, self.die2value), height=3, width=8) button_submit.grid(padx=(5, 5), pady=(5, 5)) ### Frame - Statistics frame_statistics = tk.Frame(self.root) frame_statistics.grid(row=0, column=1, padx=(0, 15), pady=(5, 5)) label_statistics = tk.Label(frame_statistics, text="Statistics") label_statistics.grid(row=0, column=0, columnspan=3) label_pass = tk.Label(frame_statistics, text="Pass") label_pass.grid(row=1, column=1) label_dontpass = tk.Label(frame_statistics, text="Don't") label_dontpass.grid(row=1, column=2) label_first = tk.Label(frame_statistics, text="R1", anchor="w") label_first.grid(row=2, column=0) label_rest = tk.Label(frame_statistics, text="R2+", anchor="w") label_rest.grid(row=3, column=0) self.label_r1_pass_win = tk.Label(frame_statistics, textvariable=self.strvar_r1pw) self.label_r1_pass_win.grid(row=2, column=1) self.label_r1_dont_win = tk.Label(frame_statistics, textvariable=self.strvar_r1dw) self.label_r1_dont_win.grid(row=2, column=2) self.label_after_pass_win = tk.Label(frame_statistics, textvariable=self.strvar_apw) self.label_after_pass_win.grid(row=3, column=1) self.label_after_dont_win = tk.Label(frame_statistics, textvariable=self.strvar_adw) self.label_after_dont_win.grid(row=3, column=2) label_die_frequencies = tk.Label(frame_statistics, text="Die Frequencies") label_die_frequencies.grid(row=5, column=0, columnspan=4) self.label_count_1 = tk.Label(frame_statistics, text="1") self.label_count_1.grid(row=6, column=1) self.label_count_2 = tk.Label(frame_statistics, text="2") self.label_count_2.grid(row=7, column=1) self.label_count_3 = tk.Label(frame_statistics, text="3") self.label_count_3.grid(row=8, column=1) self.label_count_4 = tk.Label(frame_statistics, text="4") self.label_count_4.grid(row=9, column=1) self.label_count_5 = tk.Label(frame_statistics, text="5") self.label_count_5.grid(row=10, column=1) self.label_count_6 = tk.Label(frame_statistics, text="6") self.label_count_6.grid(row=11, column=1) self.label_c1 = tk.Label(frame_statistics, textvariable=self.strvar_c1) self.label_c1.grid(row=6, column=2) self.label_c2 = tk.Label(frame_statistics, textvariable=self.strvar_c2) self.label_c2.grid(row=7, column=2) self.label_c3 = tk.Label(frame_statistics, textvariable=self.strvar_c3) self.label_c3.grid(row=8, column=2) self.label_c4 = tk.Label(frame_statistics, textvariable=self.strvar_c4) self.label_c4.grid(row=9, column=2) self.label_c5 = tk.Label(frame_statistics, textvariable=self.strvar_c5) self.label_c5.grid(row=10, column=2) self.label_c6 = tk.Label(frame_statistics, textvariable=self.strvar_c6) self.label_c6.grid(row=11, column=2) label_sum_frequencies = tk.Label(frame_statistics, text="Sum Frequencies") label_sum_frequencies.grid(row=12, column=0, columnspan=4) self.label_dash = tk.Label(frame_statistics, text="-") self.label_dash.grid(row=13, column=0) self.label_sum_2 = tk.Label(frame_statistics, text="2") self.label_sum_2.grid(row=14, column=0) self.label_sum_3 = tk.Label(frame_statistics, text="3") self.label_sum_3.grid(row=15, column=0) self.label_sum_4 = tk.Label(frame_statistics, text="4") self.label_sum_4.grid(row=16, column=0) self.label_sum_5 = tk.Label(frame_statistics, text="5") self.label_sum_5.grid(row=17, column=0) self.label_sum_6 = tk.Label(frame_statistics, text="6") self.label_sum_6.grid(row=18, column=0) self.label_sum_7 = tk.Label(frame_statistics, text="7") self.label_sum_7.grid(row=13, column=2) self.label_sum_8 = tk.Label(frame_statistics, text="8") self.label_sum_8.grid(row=14, column=2) self.label_sum_9 = tk.Label(frame_statistics, text="9") self.label_sum_9.grid(row=15, column=2) self.label_sum_10 = tk.Label(frame_statistics, text="10") self.label_sum_10.grid(row=16, column=2) self.label_sum_11 = tk.Label(frame_statistics, text="11") self.label_sum_11.grid(row=17, column=2) self.label_sum_12 = tk.Label(frame_statistics, text="12") self.label_sum_12.grid(row=18, column=2) self.label_s2 = tk.Label(frame_statistics, textvariable=self.strvar_s2) self.label_s2.grid(row=14, column=1) self.label_s3 = tk.Label(frame_statistics, textvariable=self.strvar_s3) self.label_s3.grid(row=15, column=1) self.label_s4 = tk.Label(frame_statistics, textvariable=self.strvar_s4) self.label_s4.grid(row=16, column=1) self.label_s5 = tk.Label(frame_statistics, textvariable=self.strvar_s5) self.label_s5.grid(row=17, column=1) self.label_s6 = tk.Label(frame_statistics, textvariable=self.strvar_s6) self.label_s6.grid(row=18, column=1) self.label_s7 = tk.Label(frame_statistics, textvariable=self.strvar_s7) self.label_s7.grid(row=13, column=3) self.label_s8 = tk.Label(frame_statistics, textvariable=self.strvar_s8) self.label_s8.grid(row=14, column=3) self.label_s9 = tk.Label(frame_statistics, textvariable=self.strvar_s9) self.label_s9.grid(row=15, column=3) self.label_s10 = tk.Label(frame_statistics, textvariable=self.strvar_s10) self.label_s10.grid(row=16, column=3) self.label_s11 = tk.Label(frame_statistics, textvariable=self.strvar_s11) self.label_s11.grid(row=17, column=3) self.label_s12 = tk.Label(frame_statistics, textvariable=self.strvar_s12) self.label_s12.grid(row=18, column=3) ### Frame - Text console self.frame_console = tk.Frame(frame_main) self.frame_console.grid(row=1, padx=(10, 10), pady=(10, 10)) self.text_console = st.ScrolledText(self.frame_console) self.text_console.configure(state="disabled", font=("Arial", 9)) self.text_console.pack()
class LD26Main: def __init__(self, width=800,height=600): pygame.init() self.width = width self.height = height self.screen = pygame.display.set_mode((self.width, self.height)) self.state = "menu" pygame.display.set_caption("Shoot Guys") def load_sprites(self): self.player_group = CameraSpriteGroup() self.player_bullet_group = CameraSpriteGroup() self.player_max_hp = 20 self.player_healthbar = HealthBar(self.player_max_hp, self.player_max_hp, "res/player_healthbar.png", (128, 16)) self.player_healthbar.rect.x = -55 self.player_healthbar.rect.y = 10 self.player_hb_group = CameraSpriteGroup() self.player_hb_group.add(self.player_healthbar) self.enemy_group = CameraSpriteGroup() self.enemy_bullet_group = CameraSpriteGroup() self.health_bar_sprites = CameraSpriteGroup() self.max_badguys = 0 self.guys_killed = 0 self.levels = [{"img":"res/levels/level1.png", "badguys":2, "goal":6}, {"img":"res/levels/level2.png", "badguys":5, "goal":10}] self.cur_level = 0 self.load_level(0) self.menu = Menu() self.win = Win() self.die = Die() def load_level(self, levelnum): if levelnum >= len(self.levels): self.state = "win" else: leveldict = self.levels[levelnum] self.player = Player((self.width, self.height)) self.player_group.add(self.player) self.level = Level((self.width, self.height), leveldict["img"]) self.bdrop1 = Backdrop(self.level.dims, 1) self.bdrop2 = Backdrop(self.level.dims, 2) self.max_badguys = leveldict["badguys"] self.guys_killed = 0 self.kill_goal = leveldict["goal"] self.player_healthbar.set_hp(self.player_max_hp) def go(self): self.load_sprites() self.clock = pygame.time.Clock() while 1: self.clock.tick(60) self.screen.fill((0, 0, 0)) for event in pygame.event.get(): if event.type == pygame.QUIT: sys.exit() elif event.type == pygame.KEYDOWN: if event.key == K_ESCAPE: if self.state == "game": self.state = "menu" else: sys.exit() elif event.key == K_RETURN: if self.state == "menu": self.state = "game" elif self.state == "win" or self.state == "die": self.load_level(0) self.state = "game" if self.state == "menu": self.do_menu() elif self.state == "game": self.do_main_game() elif self.state == "win": self.do_win() else: self.do_die() pygame.display.flip() def do_die(self): self.die.update() self.die.draw(self.screen) def do_win(self): self.win.update() self.win.draw(self.screen) def do_menu(self): self.menu.update() self.menu.draw(self.screen) def do_main_game(self): if self.guys_killed > self.kill_goal: self.cur_level += 1 self.player.kill() self.load_level(self.cur_level) offset = (self.width / 2) - self.player.rect.x, (self.height / 1.5) - self.player.rect.y while len(self.enemy_group) < self.max_badguys: xpos = random.randint(0, self.width-64) - offset[0] ypos = random.randint(0, self.height-64) - offset[1] h = HealthBar(4, 4, "res/healthbar.png", (32, 4)) b = BadGuy((self.width, self.height), 4, h, (xpos, ypos)) self.health_bar_sprites.add(h) self.enemy_group.add(b) keys = pygame.key.get_pressed() if keys[pygame.K_d]: self.player.move(pygame.K_d) elif keys[pygame.K_a]: self.player.move(pygame.K_a) if keys[pygame.K_SPACE] or keys[pygame.K_UP]: self.player.move(pygame.K_SPACE) if keys[pygame.K_RIGHT]: if self.player.can_shoot(): bullet = Bullet("right", self.level.size, self.player.rect) self.player_bullet_group.add(bullet) self.player.shoot(pygame.K_RIGHT) elif keys[pygame.K_LEFT]: if self.player.can_shoot(): bullet = Bullet("left", self.level.size, self.player.rect) self.player_bullet_group.add(bullet) self.player.shoot(pygame.K_LEFT) for guy in self.enemy_group: if guy.is_shooting(): bullet = Bullet(guy.shoot_dir, self.level.size, guy.rect) self.enemy_bullet_group.add(bullet) # remove bullets that hit terrain pygame.sprite.groupcollide(self.enemy_bullet_group, self.level, True, False) pygame.sprite.groupcollide(self.player_bullet_group, self.level, True, False) damaged_guys = pygame.sprite.groupcollide(self.enemy_group, self.player_bullet_group, False, True) for d in damaged_guys: d.damage(1) if d.hp == 0: self.guys_killed += 1 d.kill() if pygame.sprite.groupcollide(self.player_group, self.enemy_bullet_group, False, True): self.player_healthbar.set_hp(self.player_healthbar.cur_hp-1) if self.player_healthbar.cur_hp <= 0: self.state = "die" self.player.kill() guys = self.enemy_group.sprites() + self.player_group.sprites() for guy in guys: if guy.rect.top > self.level.bottom(): guy.kill() if isinstance(guy, Player): self.state = "die" else: guy.collide_with(self.level.collisions_for(guy)) self.bdrop2.update() self.bdrop2.draw(self.screen, (offset[0]/4, offset[1]/4)) self.bdrop1.update() self.bdrop1.draw(self.screen, (offset[0]/2, offset[1]/2)) self.player_bullet_group.update() self.player_bullet_group.draw(self.screen, offset) self.enemy_bullet_group.update() self.enemy_bullet_group.draw(self.screen, offset) self.enemy_group.update(self.player.rect) self.enemy_group.draw(self.screen, offset) self.player_group.update() self.player_group.draw(self.screen, offset) self.health_bar_sprites.update() self.health_bar_sprites.draw(self.screen, offset) self.level.update() self.level.draw(self.screen, offset) self.player_hb_group.update() self.player_hb_group.draw(self.screen)