From cda443d33f74557f280c1f1a4fca7a62e68c3c97 Mon Sep 17 00:00:00 2001
From: kirbylife <gabriel13m@gmail.com>
Date: Thu, 7 Nov 2019 12:46:20 -0600
Subject: [PATCH] added score and new delete all the row completed

---
 afutc/game.py | 37 ++++++++++++++++++++++---------------
 1 file changed, 22 insertions(+), 15 deletions(-)

diff --git a/afutc/game.py b/afutc/game.py
index bb9cc0b..f7a40a0 100644
--- a/afutc/game.py
+++ b/afutc/game.py
@@ -33,14 +33,15 @@ class Afutc:
         self.current_move = np.zeros(shape=(HEIGHT, WIDTH))
         self.board_center = WIDTH // 2
         self.current_piece = None
+        self.score = 0
         self.char = "▣"
         self.debug = ""
 
     def is_valid(self, board):
         for field in (board + self.board).flat:
             if field == 2:
-                return True
-        return False
+                return False
+        return True
 
     def get_size(self):
         return self.stdscr.getmaxyx()
@@ -50,7 +51,7 @@ class Afutc:
         height_start = (height // 2) - (WIDTH // 2)
         try:
             print = lambda x: self.print((" " * height_start) + x + "\n")
-            row = "═" * (self.board.shape[1])
+            row = str(self.score).center(self.board.shape[1], "═")
             print("ANOTHER F TETRIS CLONE")
             print(f"╔{row}╗")
             for n, row in enumerate(self.board + self.current_move):
@@ -64,10 +65,18 @@ class Afutc:
             self.pause()
 
     def new_random_piece(self):
-        if all(self.board[-1:, :].flat):
-            new_row = np.zeros(shape=(1, WIDTH))
-            self.board = np.concatenate((new_row, self.board[:-1, :]))
-
+        # Clear rows completed
+        count = 0
+        for i, row in enumerate(self.board):
+            if all(row):
+                count += 1
+                upper = self.board[:i]
+                down = self.board[i + 1:]
+                new_row = np.zeros(shape=(1, WIDTH))
+                self.board = np.concatenate((new_row, upper, down))
+        if count:
+            self.score += 100 if count < 3 else 150
+        # Generate a new piece
         self.current_move.fill(0.)
         new_piece = np.array(choice(PIECES))
         self.current_piece = new_piece.copy()
@@ -75,6 +84,8 @@ class Afutc:
         for i, row in enumerate(new_piece):
             for j, value in enumerate(row):
                 self.current_move[i, position + j] = value
+        if not self.is_valid(self.current_move):
+            self.running = False
         self.pivot = [0, position]
 
     def move(self, direction):
@@ -87,7 +98,7 @@ class Afutc:
             temp_board = temp_board[:-1, :]
             new_row = np.zeros(shape=(1, WIDTH))
             temp_board = np.concatenate((new_row, temp_board))
-            if self.is_valid(temp_board):
+            if not self.is_valid(temp_board):
                 self.board = self.board + self.current_move
                 self.new_random_piece()
             else:
@@ -98,7 +109,7 @@ class Afutc:
             temp_board = temp_board[:, 1:]
             new_column = np.zeros(shape=(HEIGHT, 1))
             temp_board = np.concatenate((temp_board, new_column), axis=1)
-            if self.is_valid(temp_board):
+            if not self.is_valid(temp_board):
                 return
             self.current_move = temp_board
             self.pivot[1] -= 1
@@ -108,16 +119,12 @@ class Afutc:
             temp_board = temp_board[:, :-1]
             new_column = np.zeros(shape=(HEIGHT, 1))
             temp_board = np.concatenate((new_column, temp_board), axis=1)
-            if self.is_valid(temp_board):
+            if not self.is_valid(temp_board):
                 return
             self.current_move = temp_board
             self.pivot[1] += 1
 
     def rotate(self):
-        # if not self.debug:
-        #     self.debug = "-1"
-
-        # self.debug = str(int(self.debug) + 1)
         temp_board = self.current_move.copy()
         temp_board.fill(0.)
         temp_piece = self.current_piece.copy()
@@ -136,7 +143,7 @@ class Afutc:
                 self.rotate()
             return
 
-        if not self.is_valid(temp_board):
+        if self.is_valid(temp_board):
             self.current_move = temp_board.copy()
             self.current_piece = temp_piece.copy()