def change_tetri(self): for canv in self.next_tetri_canv: canv.delete('all') self.current_tetri = Tetrimino((4, -1), self.canvas, form=self.next_tetri[0].form) self.update_predict() for i in range(len(self.next_tetri) - 1): self.next_tetri[i] = Tetrimino((0, 0), self.next_tetri_canv[i], form=self.next_tetri[i + 1].form, previsualization=True) self.next_tetri[-1] = Tetrimino((0, 0), self.next_tetri_canv[-1], previsualization=True)
def hold(self): """Permet de sauvegarder le tetrimino actuel pour l'echanger avec celui sauvegarder avant (passe au suivant si il n'y a pas eu de sauvegarde avant)""" if not self.holded: self.hold_canvas.delete('all') self.holded = True if not self.hold_tetri: self.current_tetri.destroy() self.hold_tetri = Tetrimino((0,0), self.hold_canvas, form=self.current_tetri.base_form, previsualization=True) self.next() else: hold_form = self.hold_tetri.form pos = self.current_tetri.position self.hold_tetri = Tetrimino((0,0), self.hold_canvas, form=self.current_tetri.base_form, previsualization=True) self.current_tetri.destroy() self.current_tetri = Tetrimino(pos, self.canvas, form=hold_form)
def start_game(self): self.playing = True self.music.play() self.master.bind("<Key>", self.__controls) self.master.bind("<KeyRelease>", self.__controls_released) self.board = self.__create_board(Config.GRID_WIDTH, Config.GRID_HEIGHT) self.message_queue = list() self.message_up = False self.message_timer = 0 self.predict = None self.next_tetri = [Tetrimino((0, 0), self.next_tetri_canv[i], previsualization=True) for i in range(5)] self.change_tetri() self.soft_droping = False self.spining = False self.holded = False self.hold_tetri = None self.spin_count = 0 self.tetri_count = 0 self.speed = Config.SPEED self.level = 0 self.level_var.set("Level : " + str(self.level)) self.score = 0 self.score_var.set(str(self.score)) self.turn = 0 self.__draw_grid() self.update() self.master.mainloop()
def controls(self, inp, shift=False, control=False): delta = 2 if shift else 1 if control: if inp == 'w': self.jump(np.array([-1, 0])) elif inp == 'a': self.jump(np.array([0, -1])) elif inp == 's': self.jump(np.array([1, 0])) elif inp == 'd': self.jump(np.array([0, 1])) elif inp == 'a': if not self.stop_check(rng=delta, direction=np.array([0, -1])): self.move_tetrimino(np.array([0, -delta])) elif inp == 'd': if not self.stop_check(rng=delta, direction=np.array([0, 1])): self.move_tetrimino(np.array([0, delta])) elif inp == 'e': rotated = self.tetrimino.rotate(clockwise=True) if shift: rotated = Tetrimino(rotated).rotate(clockwise=True) if len( list( filter(lambda x: x[1] + self.focus[1] in [-1, 10], rotated))) == 0: self.draw_tetrimino(clean=True) self.tetrimino.squares = rotated self.draw_tetrimino() elif inp == 'q': rotated = self.tetrimino.rotate(clockwise=False) if shift: rotated = Tetrimino(rotated).rotate(clockwise=False) if len( list( filter(lambda x: x[1] + self.focus[1] in [-1, 10], rotated))) == 0: self.draw_tetrimino(clean=True) self.tetrimino.squares = rotated self.draw_tetrimino() elif inp == 's': self.jump(np.array([1, 0])) elif inp == 'f': self.draw_tetrimino(clean=True) self.set_tetrimino(random.choice(DEFAULTS)())
def update_predict(self): if self.predict: self.canvas.delete('predict') self.predict = Tetrimino(self.current_tetri.pos, self.canvas, form=self.current_tetri.form, predict=True, predictParent=self.current_tetri) self.predict.go_down()