def _draw_pulse(cls, canvas: tk.Canvas, tower_: SimpleTower): """Draws a pulse tower""" x, y = tower_.position x_diameter, y_diameter = tower_.grid_size top_left, bottom_right = tower_.get_bounding_box() cell_size = tower_.cell_size colour = tower_.colour body = canvas.create_oval(top_left, bottom_right, tag='tower', fill=colour) tags = [body] angle_step = math.pi / 2 for i in range(4): angle = i * angle_step dx = (x_diameter / 2) * cell_size * math.cos(angle) dy = (y_diameter / 2) * cell_size * math.sin(angle) tag = canvas.create_line(x + dx / 2, y + dy / 2, x + dx, y + dy, tag='tower') tags.append(tag) return tags
def _draw_simple(cls, canvas: tk.Canvas, tower_: SimpleTower): """Draws a simple tower""" x, y = tower_.position angle = tower_.rotation x_diameter, y_diameter = tower_.grid_size top_left, bottom_right = tower_.get_bounding_box() cell_size = tower_.cell_size colour = tower_.colour return [ canvas.create_oval(top_left, bottom_right, tag='tower', fill=colour), canvas.create_line( x, y, x + (x_diameter / 2) * cell_size * math.cos(angle), y + (y_diameter / 2) * cell_size * math.sin(angle), tag='tower') ]
def _left_click(self, event): """ Place tower when a grid is left clicked Parameter: event (tk.Event): Tkinter mouse event """ if self._lives != 0 and self._won == False: if self._coins >= int(self._current_tower.__class__.base_cost): self._coins -= int(self._current_tower.__class__.base_cost) self._set_gold(self._coins) self._view.delete("shadow") # retrieve position to place tower position = event.x, event.y cell_position = self._game.grid.pixel_to_cell(position) if self._game.place(cell_position, tower_type=self._current_tower.__class__): # Task 1.2 (Tower Placement): Attempt to place the tower being previewed pass elif not self._game.place(cell_position, tower_type=SimpleTower(self._game.grid.cell_size).__class__): # If a tower cannot be placed in that position, then a tower exists so call method upgrade_tower. self.upgrade_tower(event) self.refresh_view()