movement and delete de last row complete
							parent
							
								
									46e529ad6b
								
							
						
					
					
						commit
						64229b3c67
					
				| 
						 | 
					@ -1,8 +1,14 @@
 | 
				
			||||||
import curses
 | 
					import curses
 | 
				
			||||||
from _curses import error as CursesException
 | 
					from _curses import error as CursesException
 | 
				
			||||||
 | 
					from random import choice
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import numpy as np
 | 
					import numpy as np
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					from afutc.pieces import PIECES
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					WIDTH = 20
 | 
				
			||||||
 | 
					HEIGHT = 25
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
def catch(func, default=..., args=[], kwargs={}):
 | 
					def catch(func, default=..., args=[], kwargs={}):
 | 
				
			||||||
    try:
 | 
					    try:
 | 
				
			||||||
| 
						 | 
					@ -23,34 +29,86 @@ class Afutc:
 | 
				
			||||||
        self.stdscr = stdscr
 | 
					        self.stdscr = stdscr
 | 
				
			||||||
        self.print = stdscr.addstr
 | 
					        self.print = stdscr.addstr
 | 
				
			||||||
        self.input = stdscr.getkey
 | 
					        self.input = stdscr.getkey
 | 
				
			||||||
        self.board = np.zeros(shape=(20, 10))
 | 
					        self.board = np.zeros(shape=(HEIGHT, WIDTH))
 | 
				
			||||||
        self.current_move = np.zeros(shape=(20, 10))
 | 
					        self.current_move = np.zeros(shape=(HEIGHT, WIDTH))
 | 
				
			||||||
 | 
					        self.board_center = WIDTH // 2
 | 
				
			||||||
 | 
					        self.current_piece = None
 | 
				
			||||||
 | 
					        self.char = " "
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    def get_size(self):
 | 
					    def get_size(self):
 | 
				
			||||||
        return self.stdscr.getmaxyx()
 | 
					        return self.stdscr.getmaxyx()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    def draw_board(self):
 | 
					    def draw_board(self):
 | 
				
			||||||
        _, heigth = self.get_size()
 | 
					        _, height = self.get_size()
 | 
				
			||||||
        heigth_start = (heigth // 2) - (self.board.shape[1] // 2)
 | 
					        height_start = (height // 2) - (WIDTH // 2)
 | 
				
			||||||
        print = lambda x: self.print((" " * heigth_start) + x + "\n")
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        try:
 | 
					        try:
 | 
				
			||||||
 | 
					            print = lambda x: self.print((" " * height_start) + x + "\n")
 | 
				
			||||||
            row = "═" * (self.board.shape[1])
 | 
					            row = "═" * (self.board.shape[1])
 | 
				
			||||||
 | 
					            print("ANOTHER F TETRIS CLONE")
 | 
				
			||||||
            print(f"╔{row}╗")
 | 
					            print(f"╔{row}╗")
 | 
				
			||||||
            for n, row in enumerate(self.board):
 | 
					            for n, row in enumerate(self.board + self.current_move):
 | 
				
			||||||
                row = "".join("▣" if field else " " for field in row)
 | 
					                row = "".join("▣" if field else " " for field in row)
 | 
				
			||||||
                print(f"║{row}║")
 | 
					                print(f"║{row}║")
 | 
				
			||||||
            row = "═" * (self.board.shape[1])
 | 
					            row = "═" * (self.board.shape[1])
 | 
				
			||||||
            print(f"╚{row}╝")
 | 
					            # print(f"╚{row}╝")
 | 
				
			||||||
 | 
					            print(str(self.pivot))
 | 
				
			||||||
        except CursesException:
 | 
					        except CursesException:
 | 
				
			||||||
            self.pause()
 | 
					            self.pause()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    def move(self):
 | 
					    def new_random_piece(self):
 | 
				
			||||||
        pass
 | 
					        if all(self.board[-1:, :].flat):
 | 
				
			||||||
 | 
					            new_row = np.zeros(shape=(1, WIDTH))
 | 
				
			||||||
 | 
					            self.board = np.concatenate((new_row, self.board[:-1, :]))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        self.current_move.fill(0.)
 | 
				
			||||||
 | 
					        new_piece = np.array(choice(PIECES))
 | 
				
			||||||
 | 
					        self.current_piece = new_piece.copy()
 | 
				
			||||||
 | 
					        position = self.board_center - (new_piece.shape[1] // 2)
 | 
				
			||||||
 | 
					        for i, row in enumerate(new_piece):
 | 
				
			||||||
 | 
					            for j, value in enumerate(row):
 | 
				
			||||||
 | 
					                self.current_move[i, position + j] = value
 | 
				
			||||||
 | 
					        self.pivot = [0, position]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    def move(self, direction):
 | 
				
			||||||
 | 
					        if direction == "down":
 | 
				
			||||||
 | 
					            if self.pivot[0] == HEIGHT - self.current_piece.shape[0]:
 | 
				
			||||||
 | 
					                self.board = self.board + self.current_move
 | 
				
			||||||
 | 
					                self.new_random_piece()
 | 
				
			||||||
 | 
					                return
 | 
				
			||||||
 | 
					            temp_board = self.current_move.copy()
 | 
				
			||||||
 | 
					            temp_board = temp_board[:-1, :]
 | 
				
			||||||
 | 
					            new_row = np.zeros(shape=(1, WIDTH))
 | 
				
			||||||
 | 
					            temp_board = np.concatenate((new_row, temp_board))
 | 
				
			||||||
 | 
					            if any(filter(lambda x: x == 2, (temp_board + self.board).flat)):
 | 
				
			||||||
 | 
					                self.board = self.board + self.current_move
 | 
				
			||||||
 | 
					                self.new_random_piece()
 | 
				
			||||||
 | 
					            else:
 | 
				
			||||||
 | 
					                self.current_move = temp_board
 | 
				
			||||||
 | 
					                self.pivot[0] += 1
 | 
				
			||||||
 | 
					        elif direction == "left" and self.pivot[1] > 0:
 | 
				
			||||||
 | 
					            temp_board = self.current_move.copy()
 | 
				
			||||||
 | 
					            temp_board = temp_board[:, 1:]
 | 
				
			||||||
 | 
					            new_column = np.zeros(shape=(HEIGHT, 1))
 | 
				
			||||||
 | 
					            temp_board = np.concatenate((temp_board, new_column), axis=1)
 | 
				
			||||||
 | 
					            if any(filter(lambda x: x == 2, (temp_board + self.board).flat)):
 | 
				
			||||||
 | 
					                return
 | 
				
			||||||
 | 
					            self.current_move = temp_board
 | 
				
			||||||
 | 
					            self.pivot[1] -= 1
 | 
				
			||||||
 | 
					        elif direction == "right" and self.pivot[1] < (
 | 
				
			||||||
 | 
					                WIDTH - self.current_piece.shape[1]):
 | 
				
			||||||
 | 
					            temp_board = self.current_move.copy()
 | 
				
			||||||
 | 
					            temp_board = temp_board[:, :-1]
 | 
				
			||||||
 | 
					            new_column = np.zeros(shape=(HEIGHT, 1))
 | 
				
			||||||
 | 
					            temp_board = np.concatenate((new_column, temp_board), axis=1)
 | 
				
			||||||
 | 
					            if any(filter(lambda x: x == 2, (temp_board + self.board).flat)):
 | 
				
			||||||
 | 
					                return
 | 
				
			||||||
 | 
					            self.current_move = temp_board
 | 
				
			||||||
 | 
					            self.pivot[1] += 1
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    def start(self):
 | 
					    def start(self):
 | 
				
			||||||
        scr = self.stdscr
 | 
					        scr = self.stdscr
 | 
				
			||||||
        input = self.input
 | 
					        input = self.input
 | 
				
			||||||
 | 
					        self.new_random_piece()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        scr.timeout(1000)
 | 
					        scr.timeout(1000)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -60,15 +118,17 @@ class Afutc:
 | 
				
			||||||
            scr.clear()
 | 
					            scr.clear()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            if not char:
 | 
					            if not char:
 | 
				
			||||||
                self.pivot[0] += 1
 | 
					                self.move("down")
 | 
				
			||||||
            elif char == "q":
 | 
					            elif char == "q":
 | 
				
			||||||
                self.running = False
 | 
					                self.running = False
 | 
				
			||||||
            elif char == "C":  # Left
 | 
					            elif char == "C":  # Right
 | 
				
			||||||
                self.pivot[1] += 1
 | 
					                self.char = char
 | 
				
			||||||
            elif char == "D":  # Rigth
 | 
					                self.move("right")
 | 
				
			||||||
                self.pivot[1] -= 1
 | 
					            elif char == "D":  # Left
 | 
				
			||||||
 | 
					                self.char = char
 | 
				
			||||||
 | 
					                self.move("left")
 | 
				
			||||||
            elif char == "B":  # Down
 | 
					            elif char == "B":  # Down
 | 
				
			||||||
                self.pivot[0] += 1
 | 
					                self.move("down")
 | 
				
			||||||
            elif char == "A":  # Rotate
 | 
					            elif char == "A":  # Rotate
 | 
				
			||||||
                pass
 | 
					                pass
 | 
				
			||||||
            elif char == " ":  # Rotate
 | 
					            elif char == " ":  # Rotate
 | 
				
			||||||
| 
						 | 
					@ -77,6 +137,8 @@ class Afutc:
 | 
				
			||||||
            self.draw_board()
 | 
					            self.draw_board()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    def pause(self):
 | 
					    def pause(self):
 | 
				
			||||||
 | 
					        self.stdscr.refresh()
 | 
				
			||||||
 | 
					        self.stdscr.clear()
 | 
				
			||||||
        self.print("PAUSE\n")
 | 
					        self.print("PAUSE\n")
 | 
				
			||||||
        self.print("Press <SPACE>")
 | 
					        self.print("Press <SPACE>")
 | 
				
			||||||
        while True:
 | 
					        while True:
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
		Reference in New Issue