Actividad 6: Definiendo la primera ventana
Objetivo
Definir la primera ventana de la aplicación, incluyendo el título de la aplicación. Y los primeros componentes de la interfaz de usuario.
Instrucciones
Crear la ventana principal
Crea el paquete
ui.windowsdentro del paqueteorg.brick_breaker.Crea una nueva ventana mediante
Swing UI Designer.Haz clic derecho en el paquete
uiy seleccionaNew > Swing UI Designer > GUI Form.En caso de que no aparezca la opción
Swing UI Designer, asegúrate de que el pluginSwing UI Designerestá habilitado o en su defecto descárgalo.
En la ventana de diseño, nombra el panel inicial como
mainPanel.Para hacer esto puedes seleccionar el panel y en la parte derecha izquierda de la ventana, en el panel de propiedades cambiar el nombre del panel a
mainPanel.
Agrega dos paneles, uno para el área de juego y el otro para el área de controles.
Nombra el primero de estos paneles como
gamePanely el segundo comocontrolPanel.En la parte de la clase, haz que la misma herede de
JFrame.Define el constructor de la clase y dentro de este:
Llama al constructor de la clase padre.
Define el título de la ventana como
Brick Breaker.Define el tamaño de la ventana con la función
pack()Define el comportamiento de cierre de la ventana como
EXIT_ON_CLOSE.Agrega el panel principal a la ventana.
Haz que la ventana se centre en la pantalla con
setLocationRelativeTo(null).Haz visible la ventana.
Actualizando el constructor del borde
Abre la clase
Bordersy agrega el siguiente código al constructor:public Borders(String imageName, Point location) { super(location, imageName, new Dimension(0, 0)); addImageToCache(); }
Creando el panel de juego
Crea el paquete
ui.panelsdentro del paqueteorg.brick_breaker.Crea la clase
GamePaneldentro del paqueteui.game.Haz que la clase
GamePanelherede deJPanely define lo siguiente:public static final int INITIAL_LIVES = 15; public static final int INITIAL_SCORE = 0; public static final int INITIAL_LEVEL = 1; public static final int MAX_LEVEL = 5; private static final Borders LEFT_BORDER = Borders.LEFT_BAR; private static final Borders RIGHT_BORDER = Borders.RIGHT_BAR; private static final Borders TOP_BORDER = Borders.TOP_BAR; private static final Borders BOTTOM_BORDER = Borders.BOTTOM_BAR; private static Level level; private static final ArrayList<Ball> balls = new ArrayList<>(); private final Paddle paddle; public static Timer timer; private static boolean gameRunning = true; private boolean bricksDestroyed = false; private static int lives = INITIAL_LIVES; private int score = INITIAL_SCORE; private int levelNumber = INITIAL_LEVEL; private static ArrayList<Sprite> gameObjects = new ArrayList<>();Define la función
initPanelSize()que inicializa el tamaño del panel de juego de la siguiente manera:El ancho de la ventana es igual a la suma del ancho de la barra superior y las barras laterales.
El alto de la ventana es igual al alto de alguna de las barras laterales.
Haz que el tamaño preferido, mínimo y máximo del panel de juego sea igual al tamaño del panel.
Asegúrate de que el panel de juego no se pueda redimensionar.
private void initPanelSize() { int width = (int) (2 * LEFT_BORDER.getSize().getWidth() + TOP_BORDER.getSize().getWidth()); int height = (int) (LEFT_BORDER.getSize().getHeight()); setSize(width, height); setPreferredSize(getSize()); setMinimumSize(getSize()); setMaximumSize(getSize()); }Define la función
registerObjectsde la siguiente manera:private void registerObjects() { if (level != null) { for (Brick[] row : level.getBricks()) { Collections.addAll(gameObjects, row); } } gameObjects.add(LEFT_BORDER); gameObjects.add(RIGHT_BORDER); gameObjects.add(TOP_BORDER); gameObjects.add(BOTTOM_BORDER); gameObjects.add(paddle); gameObjects.addAll(balls); }Define el constructor de la clase de la siguiente manea:
public GamePanel() { initPanelSize(); level = FileManager.readLevel(Level.levelNumber); this.paddle = new Paddle(PaddleType.MEDIUM); balls.add(new Ball()); registerObjects(); }Define la función
paintComponentde la siguiente manera:@Override protected void paintComponent(Graphics g) { super.paintComponent(g); Graphics2D g2d = (Graphics2D) g; g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON); g2d.setRenderingHint(RenderingHints.KEY_RENDERING, RenderingHints.VALUE_RENDER_QUALITY); g2d.setRenderingHint(RenderingHints.KEY_INTERPOLATION, RenderingHints.VALUE_INTERPOLATION_BILINEAR); g2d.setRenderingHint(RenderingHints.KEY_TEXT_ANTIALIASING, RenderingHints.VALUE_TEXT_ANTIALIAS_ON); BufferedImage background = SpriteLoader.loadImage(level.getBackgroundName() + ".png"); g2d.drawImage(background, 0, 0, this.getWidth(), this.getHeight(), null); for (Sprite sprite : gameObjects) { sprite.draw(g2d); } }Define la función
updatede la siguiente manera:public void update() { if (gameRunning) { for (Sprite sprite : gameObjects) { sprite.update(); } repaint(); } }
Implementando el panel en la ventana
Abre el editor visual de la ventana principal, y selecciona el panel de la izquierda.
En la lista de propiedades selecciona la opción
Custom Create.En la clase
MainWindownotarás que se ha creado un métodocreateUIComponents().Agrega la siguiente línea de código al método
createUIComponents():gamePanel = new GamePanel();En la parte superior de la clase
MainWindowagrega el siguiente import:import org.brick_breaker.ui.panels.GamePanel;Ejecuta la aplicación y verifica que la ventana se abra correctamente.
Verifica que el panel de juego se muestre correctamente.
Actividad
Para esta actividad, deberás implementar la tanto el panel de juego como la ventana principal. Asegúrate de que la ventana principal tenga el título Brick Breaker y que el panel de juego se muestre correctamente. Además, asegúrate de que el panel de juego tenga el tamaño correcto y que los objetos se dibujen correctamente.
Entrega
Para entregar la actividad, deberás crear un archivo .zip con el siguiente contenido:
Archivos
.zipdel proyecto.Portada con datos de identificación.
Evidencias de ejecución de la creación de la ventana principal y el panel de juego.
Para ello, deberás crear una clase
Mainque cree la ventana principal y muestre el panel de juego.
Criterios de evaluación
Criterio | Descripción | Puntaje |
|---|---|---|
Portada | Contiene los datos de identificación del equipo | 5% |
Funcionalidad | La clase | 20% |
Funcionalidad | La clase | 20% |
Funcionalidad | La clase | 20% |
Evidencias | Muestra evidencias de la creación de al menos un nivel | 35% |
Total | Cumple con lo establecido en la actividad | 100% |
Fecha de entrega
Fecha límite de entrega: viernes 11 de abril de 2025 a las 11:59 p.m.