Esempio n. 1
0
    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()
Esempio n. 2
0
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)