summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorOlivier Gayot <olivier.gayot@sigexec.com>2021-11-12 18:25:20 +0100
committerOlivier Gayot <olivier.gayot@sigexec.com>2021-11-12 18:29:29 +0100
commitf9666c85abb56b8fd1ce8b7574066543148c8316 (patch)
tree8b9c16cd722b561ccad7c751ac8bd0b6391418f0
parent71ff729b4d42a28d300c62ac4b436d8143e6a8cc (diff)
Move playfield outside the Player class
Signed-off-by: Olivier Gayot <olivier.gayot@sigexec.com>
-rw-r--r--cameltris/playfield.py17
-rw-r--r--cameltris/screens/in_game.py26
2 files changed, 24 insertions, 19 deletions
diff --git a/cameltris/playfield.py b/cameltris/playfield.py
new file mode 100644
index 0000000..d1f4e9d
--- /dev/null
+++ b/cameltris/playfield.py
@@ -0,0 +1,17 @@
+class PlayField:
+ def __init__(self):
+ self.grid = [[None for _ in range(10)] for _ in range(20)]
+
+ def burn_rows(self) -> int:
+ """ Burn rows that can be filled and return how many of them were burnt """
+ rows_to_burn = []
+
+ for row in self.grid:
+ if all(map(lambda element: element is not None, row)):
+ rows_to_burn.append(row)
+
+ for row in rows_to_burn:
+ self.grid.insert(0, [None for _ in range(10)])
+ self.grid.remove(row)
+
+ return len(rows_to_burn)
diff --git a/cameltris/screens/in_game.py b/cameltris/screens/in_game.py
index 5596ddb..87b080a 100644
--- a/cameltris/screens/in_game.py
+++ b/cameltris/screens/in_game.py
@@ -8,6 +8,7 @@ import pygame
from .screen import Screen
from ..piece import *
+from ..playfield import PlayField
from ..controller import Input, Controller, KeyboardController, JoystickController
from ..misc import Pause
@@ -25,7 +26,7 @@ right_pane_canvas.fill((255, 255, 255))
class Player:
def __init__(self, controller: Controller, starting_level: int):
self.controller = controller
- self.grid = [[None for _ in range(10)] for _ in range(20)]
+ self.playfield = PlayField()
self.current_piece, self.current_piece_position = self.generate_piece()
self.next_piece, self.next_piece_position = self.generate_piece()
@@ -54,23 +55,10 @@ class Player:
break
initial_y_position = -row_id
- initial_x_position = (len(self.grid[0]) // 2) - (len(piece.elements[0]) // 2)
+ initial_x_position = (len(self.playfield.grid[0]) // 2) - (len(piece.elements[0]) // 2)
return (piece, [initial_y_position, initial_x_position])
- def burn_rows(self) -> int:
- rows_to_burn = list()
-
- for row in self.grid:
- if all(map(lambda element: element is not None, row)):
- rows_to_burn.append(row)
-
- for row in rows_to_burn:
- self.grid.insert(0, [None for _ in range(10)])
- self.grid.remove(row)
-
- return len(rows_to_burn)
-
def lock_piece(self) -> None:
if self.has_collision(self.current_piece_position[0], self.current_piece_position[1]):
raise WouldCollide()
@@ -79,9 +67,9 @@ class Player:
for col_id, element in enumerate(row):
if element is None:
continue
- self.grid[row_id + self.current_piece_position[0]][col_id + self.current_piece_position[1]] = element
+ self.playfield.grid[row_id + self.current_piece_position[0]][col_id + self.current_piece_position[1]] = element
- count = self.burn_rows()
+ count = self.playfield.burn_rows()
if count == 1:
print("Single")
@@ -121,7 +109,7 @@ class Player:
if col_id + x < 0:
return True
- if self.grid[row_id + y][col_id + x] is not None:
+ if self.playfield.grid[row_id + y][col_id + x] is not None:
return True
except IndexError:
@@ -223,7 +211,7 @@ class Player:
def refresh_grid_canvas(self) -> None:
self.grid_canvas.fill(black)
- for row_idx, row in enumerate(self.grid):
+ for row_idx, row in enumerate(self.playfield.grid):
for col_idx, element in enumerate(row):
if element is not None:
self.grid_canvas.blit(element, (col_idx * 50 + 1, row_idx * 50 + 1))