Remove class Color
This commit is contained in:
parent
a445955399
commit
27439076b0
@ -9,6 +9,8 @@ except ImportError:
|
||||
You can install it on Windows with:
|
||||
pip install --user windows-curses"""
|
||||
)
|
||||
else:
|
||||
curses.COLOR_ORANGE = 8
|
||||
import random
|
||||
import sched
|
||||
import time
|
||||
@ -44,18 +46,6 @@ class Rotation:
|
||||
COUNTERCLOCKWISE = -1
|
||||
|
||||
|
||||
class Color:
|
||||
BLACK = 0
|
||||
WHITE = 1
|
||||
YELLOW = 2
|
||||
RED = 3
|
||||
GREEN = 4
|
||||
BLUE = 5
|
||||
MAGENTA = 6
|
||||
CYAN = 7
|
||||
ORANGE = 8
|
||||
|
||||
|
||||
class Point:
|
||||
def __init__(self, x, y):
|
||||
self.x = x
|
||||
@ -73,9 +63,11 @@ class Movement:
|
||||
|
||||
|
||||
class Mino:
|
||||
color_pairs = [None for _ in range(9)]
|
||||
|
||||
def __init__(self, position, color):
|
||||
self.position = position
|
||||
self.color = color
|
||||
self.color_pair = self.color_pairs[color]
|
||||
|
||||
|
||||
class Tetromino:
|
||||
@ -196,7 +188,7 @@ class Tetromino:
|
||||
|
||||
class O(Tetromino):
|
||||
MINOES_POSITIONS = (Point(0, 0), Point(1, 0), Point(0, -1), Point(1, -1))
|
||||
COLOR = Color.YELLOW
|
||||
COLOR = curses.COLOR_YELLOW
|
||||
|
||||
def rotate(self, direction):
|
||||
return False
|
||||
@ -221,11 +213,11 @@ class I(Tetromino):
|
||||
},
|
||||
)
|
||||
MINOES_POSITIONS = (Point(-1, 0), Point(0, 0), Point(1, 0), Point(2, 0))
|
||||
COLOR = Color.CYAN
|
||||
COLOR = curses.COLOR_CYAN
|
||||
|
||||
class T(Tetromino):
|
||||
MINOES_POSITIONS = (Point(-1, 0), Point(0, 0), Point(0, -1), Point(1, 0))
|
||||
COLOR = Color.MAGENTA
|
||||
COLOR = curses.COLOR_MAGENTA
|
||||
T_SLOT = (Point(-1, -1), Point(1, -1), Point(1, 1), Point(-1, 1))
|
||||
|
||||
def t_spin(self):
|
||||
@ -242,19 +234,19 @@ class T(Tetromino):
|
||||
|
||||
class L(Tetromino):
|
||||
MINOES_POSITIONS = (Point(-1, 0), Point(0, 0), Point(1, 0), Point(1, -1))
|
||||
COLOR = Color.ORANGE
|
||||
COLOR = curses.COLOR_ORANGE
|
||||
|
||||
class J(Tetromino):
|
||||
MINOES_POSITIONS = (Point(-1, -1), Point(-1, 0), Point(0, 0), Point(1, 0))
|
||||
COLOR = Color.BLUE
|
||||
COLOR = curses.COLOR_BLUE
|
||||
|
||||
class S(Tetromino):
|
||||
MINOES_POSITIONS = (Point(-1, 0), Point(0, 0), Point(0, -1), Point(1, -1))
|
||||
COLOR = Color.GREEN
|
||||
COLOR = curses.COLOR_GREEN
|
||||
|
||||
class Z(Tetromino):
|
||||
MINOES_POSITIONS = (Point(-1, -1), Point(0, -1), Point(0, 0), Point(1, 0))
|
||||
COLOR = Color.RED
|
||||
COLOR = curses.COLOR_RED
|
||||
|
||||
|
||||
class Window:
|
||||
@ -270,22 +262,22 @@ class Window:
|
||||
self.window.erase()
|
||||
self.window.border()
|
||||
if self.TITLE:
|
||||
self.window.addstr(0, self.title_begin_x, self.TITLE, curses.A_BOLD)
|
||||
self.window.addstr(0, self.title_begin_x, self.TITLE)
|
||||
|
||||
def draw_piece(self):
|
||||
if self.piece:
|
||||
if self.piece.lock_timer:
|
||||
attr = curses.A_BLINK | curses.A_REVERSE | curses.A_BOLD
|
||||
attr = Mino.color_pairs[self.piece.COLOR] | curses.A_BLINK | curses.A_REVERSE
|
||||
else:
|
||||
attr = curses.A_BOLD
|
||||
attr = Mino.color_pairs[self.piece.COLOR]
|
||||
for mino in self.piece.minoes:
|
||||
position = mino.position + self.piece.position
|
||||
self.draw_mino(position.x, position.y, self.piece.COLOR, attr)
|
||||
self.draw_mino(position.x, position.y, attr)
|
||||
|
||||
def draw_mino(self, x, y, color=Color.WHITE, attr=curses.A_BOLD):
|
||||
def draw_mino(self, x, y, color):
|
||||
if y >= 0:
|
||||
if self.has_colors:
|
||||
self.window.addstr(y, x*2+1, "██", curses.color_pair(color)|attr)
|
||||
self.window.addstr(y, x*2+1, "██", color)
|
||||
else:
|
||||
self.window.addstr(y, x*2+1, "██")
|
||||
|
||||
@ -303,7 +295,7 @@ class Matrix(Window):
|
||||
begin_y += (game.HEIGHT - self.HEIGHT) // 2
|
||||
self.game = game
|
||||
self.cells = [
|
||||
[Color.BLACK for x in range(self.NB_COLS)]
|
||||
[curses.COLOR_BLACK for x in range(self.NB_COLS)]
|
||||
for y in range(self.NB_LINES)
|
||||
]
|
||||
Window.__init__(self, self.WIDTH, self.HEIGHT, begin_x, begin_y)
|
||||
@ -331,7 +323,7 @@ class Matrix(Window):
|
||||
for mino in self.piece.minoes:
|
||||
position = mino.position + self.piece.position
|
||||
if position.y >= 0:
|
||||
self.cells[position.y][position.x] = mino.color
|
||||
self.cells[position.y][position.x] = mino.color_pair
|
||||
else:
|
||||
self.game.over()
|
||||
return
|
||||
@ -340,7 +332,7 @@ class Matrix(Window):
|
||||
for y, line in enumerate(self.cells):
|
||||
if all(mino for mino in line):
|
||||
self.cells.pop(y)
|
||||
self.cells.insert(0, [Color.BLACK for x in range(self.NB_COLS)])
|
||||
self.cells.insert(0, [curses.COLOR_BLACK for x in range(self.NB_COLS)])
|
||||
nb_lines_cleared += 1
|
||||
self.game.stats.piece_locked(nb_lines_cleared, t_spin)
|
||||
self.game.new_piece()
|
||||
@ -560,7 +552,7 @@ class ControlsParser(configparser.SafeConfigParser):
|
||||
except FileNotFoundError:
|
||||
subprocess.call(["notepad.exe", self.FILE_PATH])
|
||||
else:
|
||||
os.system("${EDITOR:-vi}"+" "+self.FILE_PATH)
|
||||
os.system("${EDITOR:-nano}"+" "+self.FILE_PATH)
|
||||
|
||||
|
||||
class ControlsWindow(Window, ControlsParser):
|
||||
@ -590,51 +582,25 @@ class Game:
|
||||
WIDTH = 80
|
||||
HEIGHT = Matrix.HEIGHT
|
||||
AUTOREPEAT_DELAY = 0.02
|
||||
COLOR_PAIRS = {
|
||||
16: {
|
||||
Color.ORANGE: (curses.COLOR_YELLOW, curses.COLOR_WHITE),
|
||||
Color.RED: (curses.COLOR_RED+8, curses.COLOR_WHITE),
|
||||
Color.GREEN: (curses.COLOR_GREEN+8, curses.COLOR_WHITE),
|
||||
Color.YELLOW: (curses.COLOR_YELLOW+8, curses.COLOR_WHITE),
|
||||
Color.BLUE: (curses.COLOR_BLUE+8, curses.COLOR_WHITE),
|
||||
Color.MAGENTA: (curses.COLOR_MAGENTA+8, curses.COLOR_WHITE),
|
||||
Color.CYAN: (curses.COLOR_CYAN+8, curses.COLOR_WHITE),
|
||||
Color.WHITE: (curses.COLOR_WHITE+8, curses.COLOR_WHITE)
|
||||
},
|
||||
8: {
|
||||
Color.ORANGE: (curses.COLOR_YELLOW, curses.COLOR_WHITE),
|
||||
Color.RED: (curses.COLOR_RED, curses.COLOR_WHITE),
|
||||
Color.GREEN: (curses.COLOR_GREEN, curses.COLOR_WHITE),
|
||||
Color.YELLOW: (curses.COLOR_WHITE, curses.COLOR_WHITE),
|
||||
Color.BLUE: (curses.COLOR_BLUE, curses.COLOR_WHITE),
|
||||
Color.MAGENTA: (curses.COLOR_MAGENTA, curses.COLOR_WHITE),
|
||||
Color.CYAN: (curses.COLOR_CYAN, curses.COLOR_WHITE),
|
||||
Color.WHITE: (curses.COLOR_WHITE, curses.COLOR_WHITE)
|
||||
}
|
||||
}
|
||||
|
||||
def __init__(self, scr):
|
||||
self.scr = scr
|
||||
|
||||
if curses.has_colors():
|
||||
curses.use_default_colors()
|
||||
curses.start_color()
|
||||
if curses.COLORS >= 16:
|
||||
nb_colors = 16
|
||||
Mino.color_pairs[curses.COLOR_BLACK] = curses.color_pair(curses.COLOR_BLACK)
|
||||
for color in range(1, 8):
|
||||
curses.init_pair(color, color, curses.COLOR_WHITE)
|
||||
Mino.color_pairs[color] = curses.color_pair(color)|curses.A_BOLD
|
||||
if curses.can_change_color():
|
||||
curses.init_color(curses.COLOR_YELLOW, 1000, 500, 0)
|
||||
else:
|
||||
nb_colors = 8
|
||||
for color, (fg, bg) in self.COLOR_PAIRS[nb_colors].items():
|
||||
curses.init_pair(color, fg, bg)
|
||||
|
||||
Mino.color_pairs[curses.COLOR_ORANGE] = curses.color_pair(curses.COLOR_YELLOW)
|
||||
try:
|
||||
curses.curs_set(0)
|
||||
except curses.error:
|
||||
pass
|
||||
|
||||
self.scr.timeout(0)
|
||||
self.scr.getch()
|
||||
scr.timeout(0)
|
||||
scr.getch()
|
||||
self.scr = scr
|
||||
|
||||
left_x = (curses.COLS-self.WIDTH) // 2
|
||||
top_y = (curses.LINES-self.HEIGHT) // 2
|
||||
@ -742,10 +708,8 @@ class Game:
|
||||
for y, word in enumerate((("GA", "ME") ,("OV", "ER")), start=Matrix.NB_LINES//2):
|
||||
for x, char in enumerate(word, start=Matrix.NB_COLS//2-1):
|
||||
color = self.matrix.cells[y][x]
|
||||
if color == Color.BLACK:
|
||||
color = curses.color_pair(Color.BLACK) | curses.A_BOLD
|
||||
else:
|
||||
color = curses.color_pair(color) | curses.A_REVERSE | curses.A_BOLD
|
||||
if color != Mino.color_pairs[curses.COLOR_BLACK]:
|
||||
color |= curses.A_REVERSE
|
||||
self.matrix.window.addstr(y, x*2+1, char, color)
|
||||
self.matrix.window.refresh()
|
||||
curses.beep()
|
||||
|
Loading…
x
Reference in New Issue
Block a user