/* * POLYPHEMUS - Un sencillo juego tipo roguelike escrito en Java. * Copyright (c) 2014-2015, J. Francisco Martín <jfm.lisaso@gmail.com>. */ package jomali.polyphemus.utils; import java.awt.Color; /** * Interfaz con la que se define una terminal. Indica las diferentes operaciones * que debe implementar una terminal de texto. * * * @author J. Francisco Martín * @serial 2014/06/29 * */ public interface ITerminal { /** * Clase enumerada que define las diferentes alineaciones de texto posibles * además de varias abreviaturas para estas alineaciones. */ public enum Alignment { TOP_LEFT, TOP_CENTER, TOP_RIGHT, MIDDLE_LEFT, MIDDLE_CENTER, MIDDLE_RIGHT, BOTTOM_LEFT, BOTTOM_CENTER, BOTTOM_RIGHT, TL, TC, TR, ML, MC, MR, BL, BC, BR; } /** Ancho (en num. de casillas) si no se especifica uno en el constructor. */ public static final int DEFAULT_WIDTH = 80; /** Alto (en num. de casillas) si no se especifica uno en el constructor. */ public static final int DEFAULT_HEIGHT = 24; /** Color de frente si no se especifica uno en el constructor. */ public static final Color DEFAULT_FOREGROUND_COLOR = SColor.WHITE; /** Color de fondo si no se especifica uno en el constructor. */ public static final Color DEFAULT_BACKGROUND_COLOR = SColor.BLACK; // ///////////////////////////////////////////////////////////////////////// // acceso y modificación de atributos: /** * Retorna el ancho de la terminal en numero de casillas. * * @return ancho de la terminal en numero de casillas */ public int getGridWidth(); /** * Retorna el alto de la terminal en numero de casillas. * * @return alto de la terminal en numero de casillas */ public int getGridHeight(); /** * Retorna el color de frente utilizado por defecto por la terminal. * * @return color de frente utilizado por defecto por la terminal */ public Color getForegroundColor(); /** * Retorna el color de fondo utilizado por defecto por la terminal. * * @return color de fondo utilizado por defecto por la terminal */ public Color getBackgroundColor(); /** * Establece <em>foregroundColor</em> como color de frente por defecto. * * @param foregroundColor * color de frente que se utilizará por defecto */ public void setForegroundColor(Color foregroundColor); /** * Establece <em>backgroundColor</em> como color de fondo por defecto. * * @param backgroundColor * color de fondo que se utilizará por defecto */ public void setBackgroundColor(Color backgroundColor); // ///////////////////////////////////////////////////////////////////////// // escritura de caracteres: /** * Escribe un caracter en la terminal con los parámetros dados. * * @param alignment * Alineación del caracter en la terminal * @param character * Caracter a escribir * @param x * Posición del caracter en el eje horizontal * @param y * Posición del caracter en el eje vertical * @param foregroundColor * Color de frente con el que escribir el caracter * @param backgroundColor * Color de fondo con el que escribir el caracter * @return A si mismo, para facilitar la encadenación de llamadas */ public ITerminal write(Alignment alignment, char character, int x, int y, Color foregroundColor, Color backgroundColor); /** * Escribe un caracter en la terminal con los parámetros dados. * * @param alignment * Alineación del caracter en la terminal * @param character * Caracter a escribir * @param x * Posición del caracter en el eje horizontal * @param y * Posición del caracter en el eje vertical * @param foregroundColor * Color de frente con el que escribir el caracter * @return A si mismo, para facilitar la encadenación de llamadas */ public ITerminal write(Alignment alignment, char character, int x, int y, Color foregroundColor); /** * Escribe un caracter en la terminal con los parámetros dados. * * @param alignment * Alineación del caracter en la terminal * @param character * Caracter a escribir * @param x * Posición del caracter en el eje horizontal * @param y * Posición del caracter en el eje vertical * @return A si mismo, para facilitar la encadenación de llamadas */ public ITerminal write(Alignment alignment, char character, int x, int y); // ///////////////////////////////////////////////////////////////////////// // escritura de cadenas de caracteres: /** * Escribe una cadena de caracteres en la terminal con los parámetros dados. * * @param alignment * Alineación de la cadena de caracteres en la terminal * @param text * Cadena de caracteres a escribir * @param x * Posición del inicio de la cadena en el eje horizontal * @param y * Posición del inicio de la cadena en el eje vertical * @param foregroundColor * Color de frente con el que se imprime la cadena * @param backgroundColor * Color de fondo con el que se imprime la cadena * @return A si mismo, para facilitar la encadenación de llamadas */ public ITerminal write(Alignment alignment, String text, int x, int y, Color foregroundColor, Color backgroundColor); /** * Escribe una cadena de caracteres en la terminal con los parámetros dados. * * @param alignment * Alineación de la cadena de caracteres en la terminal * @param text * Cadena de caracteres a escribir * @param x * Posición del inicio de la cadena en el eje horizontal * @param y * Posición del inicio de la cadena en el eje vertical * @param foregroundColor * Color de frente con el que se imprime la cadena * @return A si mismo, para facilitar la encadenación de llamadas */ public ITerminal write(Alignment alignment, String text, int x, int y, Color foregroundColor); /** * Escribe una cadena de caracteres en la terminal con los parámetros dados. * * @param alignment * Alineación de la cadena de caracteres en la terminal * @param text * Cadena de caracteres a escribir * @param x * Posición del inicio de la cadena en el eje horizontal * @param y * Posición del inicio de la cadena en el eje vertical * @return A si mismo, para facilitar la encadenación de llamadas */ public ITerminal write(Alignment alignment, String text, int x, int y); // ///////////////////////////////////////////////////////////////////////// // escritura de vectores: /** * Escribe un vector de cadenas de caracteres en la terminal con los * parámetros dados. * * @param alignment * Alineación del vector en la terminal * @param array * Vector de cadenas de caracteres a escribir * @param x * Posición inicial del vector en el eje horizontal * @param y * Posición inicial del vector en el eje vertical * @param foregroundColor * Color de frente con el que se imprime el vector * @param backgroundColor * Color de fondo con el que se imprime el vector * @return A si mismo, para facilitar la encadenación de llamadas */ public ITerminal write(Alignment alignment, String[] array, int x, int y, Color foregroundColor, Color backgroundColor); /** * Escribe un vector de cadenas de caracteres en la terminal con los * parámetros dados. * * @param alignment * Alineación del vector en la terminal * @param array * Vector de cadenas de caracteres a escribir * @param x * Posición inicial del vector en el eje horizontal * @param y * Posición inicial del vector en el eje vertical * @param foregroundColor * Color de frente con el que se imprime el vector * @return A si mismo, para facilitar la encadenación de llamadas */ public ITerminal write(Alignment alignment, String[] array, int x, int y, Color foregroundColor); /** * Escribe un vector de cadenas de caracteres en la terminal con los * parámetros dados. * * @param alignment * Alineación del vector en la terminal * @param array * Vector de cadenas de caracteres a escribir * @param x * Posición inicial del vector en el eje horizontal * @param y * Posición inicial del vector en el eje vertical * @return A si mismo, para facilitar la encadenación de llamadas */ public ITerminal write(Alignment alignment, String[] array, int x, int y); // ///////////////////////////////////////////////////////////////////////// // métodos de rellenado y limpieza: /** * Rellena un rectángulo de la terminal con vértice superior izquierdo en * las coordenadas <em>(x,y)</em> de anchura <em>width</em> y altura * <em>height</em>, con el caracter y los colores de frente y fondo dados. * * @param character * Caracter con que se rellena el rectángulo * @param x * Coordenada en el eje horizontal del vértice superior izquierdo * @param y * Coordenada en el eje vertical del vértice superior izquierdo * @param width * Ancho del rectángulo * @param height * Alto del rectángulo * @param foregroundColor * Color de frente con el que se imprime el caracter * @param backgroundColor * Color de fondo con el que se imprime el caracter * @return A si mismo, para facilitar la encadenación de llamadas */ public ITerminal clear(char character, int x, int y, int width, int height, Color foregroundColor, Color backgroundColor); /** * Rellena un rectángulo de la terminal con vértice superior izquierdo en * las coordenadas <em>(x,y)</em> de anchura <em>width</em> y altura * <em>height</em>, con el caracter y el color de frente dado. Como color de * fondo utiliza el color de fondo por defecto de la terminal. * * @param character * Caracter con que se rellena el rectángulo * @param x * Coordenada en el eje horizontal del vértice superior izquierdo * @param y * Coordenada en el eje vertical del vértice superior izquierdo * @param width * Ancho del rectángulo * @param height * Alto del rectángulo * @param foregroundColor * Color de frente con el que se imprime el caracter * @return A si mismo, para facilitar la encadenación de llamadas */ public ITerminal clear(char character, int x, int y, int width, int height, Color foregroundColor); /** * Rellena un rectángulo de la terminal con vértice superior izquierdo en * las coordenadas <em>(x,y)</em> de anchura <em>width</em> y altura * <em>height</em>, con el caracter dado. Como colores de frente y fondo * utiliza los colores por defecto de la terminal. * * @param character * Caracter con que se rellena el rectángulo * @param x * Coordenada en el eje horizontal del vértice superior izquierdo * @param y * Coordenada en el eje vertical del vértice superior izquierdo * @param width * Ancho del rectángulo * @param height * Alto del rectángulo * @return A si mismo, para facilitar la encadenación de llamadas */ public ITerminal clear(char character, int x, int y, int width, int height); /** * Rellena un rectángulo de la terminal con vértice superior izquierdo en * las coordenadas <em>(x,y)</em> de anchura <em>width</em> y altura * <em>height</em>, con el color de fondo dado. * * @param x * Coordenada en el eje horizontal del vértice superior izquierdo * @param y * Coordenada en el eje vertical del vértice superior izquierdo * @param width * Ancho del rectángulo * @param height * Alto del rectángulo * @param color * Color con el que se rellena el rectángulo * @return A si mismo, para facilitar la encadenación de llamadas */ public ITerminal clear(int x, int y, int width, int height, Color color); /** * * Rellena un rectángulo de la terminal con vértice superior izquierdo en * las coordenadas <em>(x,y)</em> de anchura <em>width</em> y altura * <em>height</em>, con el color de fondo por defecto de la terminal. * * @param x * Coordenada en el eje horizontal del vértice superior izquierdo * @param y * Coordenada en el eje vertical del vértice superior izquierdo * @param width * Ancho del rectángulo * @param height * Alto del rectángulo * @return A si mismo, para facilitar la encadenación de llamadas */ public ITerminal clear(int x, int y, int width, int height); /** * Limpia completamente la terminal con el color de fondo dado. * * @param color * Color con el que se rellana la terminal * @return A si mismo, para facilitar la encadenación de llamadas */ public ITerminal clear(Color color); /** * Limpia completamente la terminal con el color de fondo por defecto. * * @return A si mismo, para facilitar la encadenación de llamadas */ public ITerminal clear(); // ///////////////////////////////////////////////////////////////////////// // métodos de escritura de columnas: /** * Escribe el caracter <em>character</em> a lo largo de toda la columna * <em>x</em> de la terminal utilizando los colores dados. * * @param character * Caracter a escribir en la columna * @param x * Columna de la terminal en la que se escribirá * @param foregroundColor * Color de frente con el que se escribirá el caracter * @param backgroundColor * Color de fondo con el que se escribirá el caracter * @return A si mismo, para facilitar la encadenación de llamadas */ public ITerminal writeColumn(char character, int x, Color foregroundColor, Color backgroundColor); /** * Escribe el caracter <em>character</em> a lo largo de toda la columna * <em>x</em> de la terminal utilizando el color de frente dado y el color * de fondo por defecto. * * @param character * Caracter a escribir en la columna * @param x * Columna de la terminal en la que se escribirá * @param foregroundColor * Color de frente con el que se escribirá el caracter * @return A si mismo, para facilitar la encadenación de llamadas */ public ITerminal writeColumn(char character, int x, Color foregroundColor); /** * Escribe el caracter <em>character</em> a lo largo de toda la columna * <em>x</em> de la terminal utilizando los colores por defecto. * * @param character * Caracter a escribir en la columna * @param x * Columna de la terminal en la que se escribirá * @return A si mismo, para facilitar la encadenación de llamadas */ public ITerminal writeColumn(char character, int x); /** * Escribe un <em>caracter bloque</em> a lo largo de toda la columna * <em>x</em> de la terminal utilizando los colores dados. * * @param x * Columna de la terminal en la que se escribirá * @param foregroundColor * Color de frente con el que se escribirá el caracter * @param backgroundColor * Color de fondo con el que se escribirá el caracter * @return A si mismo, para facilitar la encadenación de llamadas */ public ITerminal writeColumn(int x, Color foregroundColor, Color backgroundColor); /** * Escribe un <em>caracter bloque</em> a lo largo de toda la columna * <em>x</em> de la terminal utilizando el color de frente dado. Como color * de fondo utiliza el que tiene por defecto la terminal. * * @param x * Columna de la terminal en la que se escribirá * @param foregroundColor * Color de frente con el que se escribirá el caracter * @return A si mismo, para facilitar la encadenación de llamadas */ public ITerminal writeColumn(int x, Color foregroundColor); /** * Escribe un <em>caracter bloque</em> a lo largo de toda la columna * <em>x</em> de la terminal utilizando los colores por defecto. * * @param x * Columna de la terminal en la que se escribirá * @return A si mismo, para facilitar la encadenación de llamadas */ public ITerminal writeColumn(int x); // ///////////////////////////////////////////////////////////////////////// // métodos de escritura de filas: /** * Escribe el caracter <em>character</em> a lo largo de toda la fila * <em>y</em> de la terminal utilizando los colores dados. * * @param character * Caracter a escribir en la fila * @param y * Fila de la terminal en la que se escribirá * @param foregroundColor * Color de frente con el que se escribirá el caracter * @param backgroundColor * Color de fondo con el que se escribirá el caracter * @return A si mismo, para facilitar la encadenación de llamadas */ public ITerminal writeRow(char character, int y, Color foregroundColor, Color backgroundColor); /** * Escribe el caracter <em>character</em> a lo largo de toda la fila * <em>y</em> de la terminal utilizando el color de frente dado y el color * de fondo por defecto. * * @param character * Caracter a escribir en la fila * @param y * Fila de la terminal en la que se escribirá * @param foregroundColor * Color de frente con el que se escribirá el caracter * @return A si mismo, para facilitar la encadenación de llamadas */ public ITerminal writeRow(char character, int y, Color foregroundColor); /** * Escribe el caracter <em>character</em> a lo largo de toda la fila * <em>y</em> de la terminal utilizando los colores por defecto. * * @param character * Caracter a escribir en la fila * @param y * Fila de la terminal en la que se escribirá * @return A si mismo, para facilitar la encadenación de llamadas */ public ITerminal writeRow(char character, int y); /** * Escribe un <em>caracter bloque</em> a lo largo de toda la fila <em>y</em> * de la terminal utilizando los colores dados. * * @param y * Fila de la terminal en la que se escribirá * @param foregroundColor * Color de frente con el que se escribirá el caracter * @param backgroundColor * Color de fondo con el que se escribirá el caracter * @return A si mismo, para facilitar la encadenación de llamadas */ public ITerminal writeRow(int y, Color foregroundColor, Color backgroundColor); /** * Escribe un <em>caracter bloque</em> a lo largo de toda la fila <em>y</em> * de la terminal utilizando el color de frente dado. Como color de fondo * utiliza el que tiene por defecto la terminal. * * @param y * Fila de la terminal en la que se escribirá * @param foregroundColor * Color de frente con el que se escribirá el caracter * @return A si mismo, para facilitar la encadenación de llamadas */ public ITerminal writeRow(int y, Color foregroundColor); /** * Escribe un <em>caracter bloque</em> a lo largo de toda la fila <em>y</em> * de la terminal utilizando los colores por defecto. * * @param y * Fila de la terminal en la que se escribirá * @return A si mismo, para facilitar la encadenación de llamadas */ public ITerminal writeRow(int y); // ///////////////////////////////////////////////////////////////////////// // otros métodos: /** * Escribe un vector de cadenas de caracteres en un recuadro con los * parámetros dados. * * @param array * Vector de cadenas de caracteres a escribir * @param x * @param y * @param foregroundColor * @param backgroundColor * @return A si mismo, para facilitar la encadenación de llamadas */ public ITerminal writeBox(String[] array, int x, int y, Color foregroundColor, Color backgroundColor); }