def __init__(self): super().__init__() self.w, self.h = self.screen.get_size() self.sound_queue.append(sounds['menu']) bg = Animation(frames_path['play-background'], (0, 0), self.screen) tree1 = Animation(frames_path['tree'], (150, self.h/2), self.screen) tree1.reduce_scale(4) tree1.centralize() tree1.flip() tree2 = Animation(frames_path['tree'], (self.w-150, self.h/2), self.screen) tree2.reduce_scale(4) tree2.centralize() title = Animation(frames_path['title'], (self.w/2,200), self.screen) title.reduce_scale(3) title.centralize() self.ship = Animation(frames_path['ship'], ((self.w/16)*2, 200), self.screen) self.ship.reduce_scale(4) self.ship.centralize() self.ship_speed = -1 self.next_state self.menu = Menu(self.screen) ''' O botao criado no menu inicial recebe como parametro o nome do proximo estado que sera executado assim que este aqui acabar ''' self.menu.add_button('start', frames_path['start-button'], (self.w/2, self.h/2), 'SELECTCHAR') self.menu.buttons['start'].reduce_scale(1.5) self.menu.buttons['start'].centralize() self.menu.add_button('htp', frames_path['htp-button'], (self.w/2, self.h/2 + 100), 'HOWTOPLAY') self.menu.buttons['htp'].reduce_scale(1.5) self.menu.buttons['htp'].centralize() self.menu.add_button('sound', frames_path['sound'],(int((self.w/16)*15), int((self.h/10)*1)),self.switch_sound) self.menu.buttons['sound'].reduce_scale(5) self.menu.buttons['sound'].centralize() self.elements = [bg, self.ship, self.menu, tree1, tree2, title]
def start_screen(): menu = Menu(SCREEN) menu.add_button('iniciar 1', ['img/button_frame_1.png', 'img/button_frame_2.png'], play) #menu.add_button('iniciar 2', ['img/button_frame_1.png', 'img/button_frame_2.png'], print_click) bg = Animation([ "img/start_background_frame_1.jpg", "img/start_background_frame_2.jpg" ], (0, 0), SCREEN) bg.set_fps(15) tree1 = Animation(["img/tree_frame_1.png", "img/tree_frame_2.png"], (150, h / 2), SCREEN) tree1.reduce_scale(4) tree1.centralize() tree1.flip() tree2 = Animation(["img/tree_frame_1.png", "img/tree_frame_2.png"], (w - 150, h / 2), SCREEN) tree2.reduce_scale(4) tree2.centralize() title = Animation(["img/title_frame_1.png"], (w / 2, 200), SCREEN) title.reduce_scale(3) title.centralize() while True: for event in pygame.event.get(): if event.type == QUIT: pygame.quit() exit() if event.type == MOUSEBUTTONUP: menu.check_click(pygame.mouse.get_pos()) bg.draw() tree1.draw() tree2.draw() title.draw() menu.draw() pygame.display.update() clock.tick(27)
class StartScreen(State): def __init__(self): super().__init__() self.w, self.h = self.screen.get_size() self.sound_queue.append(sounds['menu']) bg = Animation(frames_path['play-background'], (0, 0), self.screen) tree1 = Animation(frames_path['tree'], (150, self.h/2), self.screen) tree1.reduce_scale(4) tree1.centralize() tree1.flip() tree2 = Animation(frames_path['tree'], (self.w-150, self.h/2), self.screen) tree2.reduce_scale(4) tree2.centralize() title = Animation(frames_path['title'], (self.w/2,200), self.screen) title.reduce_scale(3) title.centralize() self.ship = Animation(frames_path['ship'], ((self.w/16)*2, 200), self.screen) self.ship.reduce_scale(4) self.ship.centralize() self.ship_speed = -1 self.next_state self.menu = Menu(self.screen) ''' O botao criado no menu inicial recebe como parametro o nome do proximo estado que sera executado assim que este aqui acabar ''' self.menu.add_button('start', frames_path['start-button'], (self.w/2, self.h/2), 'SELECTCHAR') self.menu.buttons['start'].reduce_scale(1.5) self.menu.buttons['start'].centralize() self.menu.add_button('htp', frames_path['htp-button'], (self.w/2, self.h/2 + 100), 'HOWTOPLAY') self.menu.buttons['htp'].reduce_scale(1.5) self.menu.buttons['htp'].centralize() self.menu.add_button('sound', frames_path['sound'],(int((self.w/16)*15), int((self.h/10)*1)),self.switch_sound) self.menu.buttons['sound'].reduce_scale(5) self.menu.buttons['sound'].centralize() self.elements = [bg, self.ship, self.menu, tree1, tree2, title] def check_event(self, event): if event.type == pygame.QUIT: self.quit = True ''' Assim que o mouse for clicado o handler de evento deste estado chama a funcao do menu que verifica se este click ocorreu em algum dos botoes presentes no menu ''' elif event.type == pygame.MOUSEBUTTONUP: if(self.menu.check_click(pygame.mouse.get_pos())): ''' Colocar o som de selecao de botão aqui ''' self.sound_queue.append(sounds['button-switch']) if(callable(self.menu.last_clicked_state)): self.menu.last_clicked_state() self.menu.last_clicked_state = None return ''' Se algum botao foi clicado e conter um estado como callback, o status desse evento e marcado como 'done' (self.done = True) e o ponteiro para o proximo estado vira o valor que havia sido armazenado como next_state, do botão em questão ''' self.next_state = self.menu.last_clicked_state self.done = True def switch_sound(self): super().switch_sound() if (State.volume == 0): self.menu.buttons['sound'].switch_state('off') elif(State.volume == 1): self.menu.buttons['sound'].switch_state('on') def draw(self): for element in self.elements: element.draw() def update(self): self.ship.update_pos((self.ship.rect.x + self.ship_speed, self.ship.rect.y)) if(self.ship.rect.x == 0 or self.ship.rect.x == self.w): self.ship_speed *= -1 print('ship speed is now ' + str(self.ship_speed)) self.ship.rect.x + self.ship_speed * 1000 self.ship.flip()