Update terminis.py

This commit is contained in:
adrienmalin 2019-02-11 20:19:29 +01:00
parent 998cf18eb4
commit bfd70d443a

View File

@ -12,7 +12,11 @@ import random
import sched import sched
import time import time
import os import os
try:
import configparser import configparser
except ImportError:
import ConfigParser as configparser
DIR_NAME = "Terminis" DIR_NAME = "Terminis"
if sys.platform == "win32": if sys.platform == "win32":
@ -50,9 +54,6 @@ class Point:
def __add__(self, other): def __add__(self, other):
return Point(self.x+other.x, self.y+other.y) return Point(self.x+other.x, self.y+other.y)
def __repr__(self):
return "(%d,%d)" % (self.x, self.y)
class Movement: class Movement:
LEFT = Point(-1, 0) LEFT = Point(-1, 0)
@ -77,6 +78,8 @@ class Screen:
self.scr.leaveok(True) self.scr.leaveok(True)
self.scr.getch() self.scr.getch()
return self.scr return self.scr
if curses.has_colors():
self.init_colors()
def init_colors(self): def init_colors(self):
curses.start_color() curses.start_color()
@ -103,9 +106,6 @@ class Screen:
def __exit__(self, type, value, traceback): def __exit__(self, type, value, traceback):
curses.reset_shell_mode() curses.reset_shell_mode()
curses.nocbreak()
curses.echo()
self.scr.keypad(False)
curses.endwin() curses.endwin()
@ -439,7 +439,7 @@ class Stats(Window):
self.draw_border() self.draw_border()
self.window.addstr(2, 2, "SCORE\t%d" % self.score) self.window.addstr(2, 2, "SCORE\t%d" % self.score)
if self.score >= self.high_score: if self.score >= self.high_score:
self.window.addstr(3, 2, "HIGH\t%d" % self.high_score|curses.A_BLINK) self.window.addstr(3, 2, "HIGH\t%d" % self.high_score, curses.A_BLINK)
else: else:
self.window.addstr(3, 2, "HIGH\t%d" % self.high_score) self.window.addstr(3, 2, "HIGH\t%d" % self.high_score)
t = time.localtime(time.time() - self.time) t = time.localtime(time.time() - self.time)
@ -565,6 +565,11 @@ class Game:
def __init__(self, scr, level): def __init__(self, scr, level):
self.scr = scr self.scr = scr
if curses.has_colors():
self.init_colors()
self.scr.nodelay(True)
curses.curs_set(0)
self.scr.getch()
self.scheduler = sched.scheduler(time.time, self.process_input) self.scheduler = sched.scheduler(time.time, self.process_input)
self.random_bag = [] self.random_bag = []
left_x = (curses.COLS-self.WIDTH) // 2 left_x = (curses.COLS-self.WIDTH) // 2
@ -582,6 +587,33 @@ class Game:
self.playing = True self.playing = True
self.paused = False self.paused = False
self.new_piece() self.new_piece()
try:
self.play()
except KeyboardInterrupt:
self.quit()
def init_colors(self):
curses.start_color()
if curses.COLORS >= 16:
if curses.can_change_color():
curses.init_color(curses.COLOR_YELLOW, 1000, 500, 0)
curses.init_pair(Color.ORANGE, curses.COLOR_YELLOW, curses.COLOR_YELLOW)
curses.init_pair(Color.RED, curses.COLOR_RED+8, curses.COLOR_RED+8)
curses.init_pair(Color.GREEN, curses.COLOR_GREEN+8, curses.COLOR_GREEN+8)
curses.init_pair(Color.YELLOW, curses.COLOR_YELLOW+8, curses.COLOR_YELLOW+8)
curses.init_pair(Color.BLUE, curses.COLOR_BLUE+8, curses.COLOR_BLUE+8)
curses.init_pair(Color.MAGENTA, curses.COLOR_MAGENTA+8, curses.COLOR_MAGENTA+8)
curses.init_pair(Color.CYAN, curses.COLOR_CYAN+8, curses.COLOR_CYAN+8)
curses.init_pair(Color.WHITE, curses.COLOR_WHITE+8, curses.COLOR_WHITE+8)
else:
curses.init_pair(Color.ORANGE, curses.COLOR_YELLOW, curses.COLOR_YELLOW)
curses.init_pair(Color.RED, curses.COLOR_RED, curses.COLOR_RED)
curses.init_pair(Color.GREEN, curses.COLOR_GREEN, curses.COLOR_GREEN)
curses.init_pair(Color.YELLOW, curses.COLOR_WHITE, curses.COLOR_WHITE)
curses.init_pair(Color.BLUE, curses.COLOR_BLUE, curses.COLOR_BLUE)
curses.init_pair(Color.MAGENTA, curses.COLOR_MAGENTA, curses.COLOR_MAGENTA)
curses.init_pair(Color.CYAN, curses.COLOR_CYAN, curses.COLOR_CYAN)
curses.init_pair(Color.WHITE, curses.COLOR_WHITE, curses.COLOR_WHITE)
def random_piece(self): def random_piece(self):
@ -615,23 +647,23 @@ class Game:
except curses.error: except curses.error:
return return
else: else:
if key == self.config["CONTROLS"]["QUIT"]: if key == self.config.get("CONTROLS", "QUIT"):
self.quit() self.quit()
elif key == self.config["CONTROLS"]["PAUSE"]: elif key == self.config.get("CONTROLS", "PAUSE"):
self.pause() self.pause()
elif key == self.config["CONTROLS"]["HOLD"]: elif key == self.config.get("CONTROLS", "HOLD"):
self.swap() self.swap()
elif key == self.config["CONTROLS"]["MOVE LEFT"]: elif key == self.config.get("CONTROLS", "MOVE LEFT"):
self.matrix.piece.move(Movement.LEFT) self.matrix.piece.move(Movement.LEFT)
elif key == self.config["CONTROLS"]["MOVE RIGHT"]: elif key == self.config.get("CONTROLS", "MOVE RIGHT"):
self.matrix.piece.move(Movement.RIGHT) self.matrix.piece.move(Movement.RIGHT)
elif key == self.config["CONTROLS"]["SOFT DROP"]: elif key == self.config.get("CONTROLS", "SOFT DROP"):
self.matrix.piece.soft_drop() self.matrix.piece.soft_drop()
elif key == self.config["CONTROLS"]["ROTATE COUNTER"]: elif key == self.config.get("CONTROLS", "ROTATE COUNTER"):
self.matrix.piece.rotate(Rotation.COUNTERCLOCKWISE) self.matrix.piece.rotate(Rotation.COUNTERCLOCKWISE)
elif key == self.config["CONTROLS"]["ROTATE CLOCKWISE"]: elif key == self.config.get("CONTROLS", "ROTATE CLOCKWISE"):
self.matrix.piece.rotate(Rotation.CLOCKWISE) self.matrix.piece.rotate(Rotation.CLOCKWISE)
elif key == self.config["CONTROLS"]["HARD DROP"]: elif key == self.config.get("CONTROLS", "HARD DROP"):
self.matrix.piece.hard_drop() self.matrix.piece.hard_drop()
def pause(self): def pause(self):
@ -643,10 +675,10 @@ class Game:
self.scr.nodelay(False) self.scr.nodelay(False)
while True: while True:
key = self.scr.getkey() key = self.scr.getkey()
if key == self.config["CONTROLS"]["QUIT"]: if key == self.config.get("CONTROLS", "QUIT"):
self.quit() self.quit()
break break
elif key == self.config["CONTROLS"]["PAUSE"]: elif key == self.config.get("CONTROLS", "PAUSE"):
self.scr.nodelay(True) self.scr.nodelay(True)
self.hold.refresh() self.hold.refresh()
self.matrix.refresh() self.matrix.refresh()
@ -676,7 +708,7 @@ class Game:
self.matrix.window.addstr(11, 9, "OVER", curses.A_BOLD) self.matrix.window.addstr(11, 9, "OVER", curses.A_BOLD)
self.matrix.window.refresh() self.matrix.window.refresh()
self.scr.nodelay(False) self.scr.nodelay(False)
while self.scr.getkey() != self.config["CONTROLS"]["QUIT"]: while self.scr.getkey() != self.config.get("CONTROLS", "QUIT"):
pass pass
self.quit() self.quit()
@ -709,9 +741,7 @@ def main():
else: else:
level = 1 level = 1
with Screen() as scr: curses.wrapper(Game, level)
game = Game(scr, level)
game.play()
if __name__ == "__main__": if __name__ == "__main__":