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