| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224 |
- """
- All tetrominos and their rotations
- """
- import collections
- import numpy as np
- def convert_to_array(tetromino):
- rows = len(tetromino)
- cols = len(tetromino[0])
- array_tetromino = np.zeros(shape=(rows,cols),
- dtype=np.byte, order="C")
- for row_index, row in enumerate(tetromino):
- for col_index, col in enumerate(row):
- array_tetromino[row_index,col_index] = 0 if col == '.' else 1
- return array_tetromino
- def crop_col_right_once(tetromino):
- if not np.any(tetromino[:,-1]):
- return tetromino[:,0:-1]
- return None
- def crop_col_right(tetromino):
- while True:
- new_tetromino = crop_col_right_once(tetromino)
- if new_tetromino is None:
- return tetromino
- tetromino = new_tetromino
- def crop_row_bottom_once(tetromino):
- if not np.any(tetromino[-1,:]):
- return tetromino[0:-1,:]
- return None
- def crop_row_bottom(tetromino):
- while True:
- new_tetromino = crop_row_bottom_once(tetromino)
- if new_tetromino is None:
- return tetromino
- tetromino = new_tetromino
- def crop_col_left_once(tetromino):
- if not np.any(tetromino[:,0]):
- return tetromino[:,1:]
- return None
- def crop_col_left(tetromino):
- col_offset = 0
- while True:
- new_tetromino = crop_col_left_once(tetromino)
- if new_tetromino is None:
- return (tetromino, col_offset)
- tetromino = new_tetromino
- col_offset += 1
- def crop_row_top_once(tetromino):
- if not np.any(tetromino[0,:]):
- return tetromino[1:,:]
- return None
- def crop_row_top(tetromino):
- row_offset = 0
- while True:
- new_tetromino = crop_row_top_once(tetromino)
- if new_tetromino is None:
- return (tetromino, row_offset)
- tetromino = new_tetromino
- row_offset += 1
- Tetromino = collections.namedtuple('Tetromino',
- ['data', 'col_offset', 'row_offset'])
- def crop(tetromino):
- new_tetromino = crop_col_right(crop_row_bottom(tetromino))
- new_tetromino, c_off = crop_col_left(new_tetromino)
- new_tetromino, r_off = crop_row_top(new_tetromino)
- return Tetromino(data=new_tetromino, col_offset=c_off, row_offset=r_off)
- def convert_to_tuples(tetrominos):
- return list(map(lambda x: crop(convert_to_array(x)), tetrominos))
- I_RAW = [['..........',
- '...0000...',
- '..........',
- '..........'],
- ['.....0....',
- '.....0....',
- '.....0....',
- '.....0....'],
- ['..........',
- '..........',
- '...0000...',
- '..........'],
- ['....0.....',
- '....0.....',
- '....0.....',
- '....0.....']]
- O_RAW = [['..........',
- '....00....',
- '....00....',
- '..........'],
- ['..........',
- '....00....',
- '....00....',
- '..........'],
- ['..........',
- '....00....',
- '....00....',
- '..........'],
- ['..........',
- '....00....',
- '....00....',
- '..........']]
- T_RAW = [['....0.....',
- '...000....',
- '..........',
- '..........'],
- ['....0.....',
- '....00....',
- '....0.....',
- '..........'],
- ['..........',
- '...000....',
- '....0.....',
- '..........'],
- ['....0.....',
- '...00.....',
- '....0.....',
- '..........']]
- S_RAW = [['....00....',
- '...00.....',
- '..........',
- '..........'],
- ['....0.....',
- '....00....',
- '.....0....',
- '..........'],
- ['..........',
- '....00....',
- '...00.....',
- '..........'],
- ['...0......',
- '...00.....',
- '....0.....',
- '..........']]
- Z_RAW = [['...00.....',
- '....00....',
- '..........',
- '..........'],
- ['.....0....',
- '....00....',
- '....0.....',
- '..........'],
- ['..........',
- '...00.....',
- '....00....',
- '..........'],
- ['....0.....',
- '...00.....',
- '...0......',
- '..........']]
- J_RAW = [['...0......',
- '...000....',
- '..........',
- '..........'],
- ['....00....',
- '....0.....',
- '....0.....',
- '..........'],
- ['..........',
- '...000....',
- '.....0....',
- '..........'],
- ['....0.....',
- '....0.....',
- '...00.....',
- '..........']]
- L_RAW = [['.....0....',
- '...000....',
- '..........',
- '..........'],
- ['....0.....',
- '....0.....',
- '....00....',
- '..........'],
- ['..........',
- '...000....',
- '...0......',
- '..........'],
- ['...00.....',
- '....0.....',
- '....0.....',
- '..........']]
- I = convert_to_tuples(I_RAW)
- O = convert_to_tuples(O_RAW)
- T = convert_to_tuples(T_RAW)
- S = convert_to_tuples(S_RAW)
- Z = convert_to_tuples(Z_RAW)
- J = convert_to_tuples(J_RAW)
- L = convert_to_tuples(L_RAW)
- SHAPES = [S, Z, I, O, J, L, T]
- SHAPES_RAW = [S_RAW, Z_RAW, I_RAW, O_RAW, J_RAW, L_RAW, T_RAW]
- SHAPE_COLORS = [(0, 255, 0), (255, 0, 0), (0, 255, 255), (255, 255, 0),
- (255, 165, 0), (0, 0, 255), (128, 0, 128)]
|