Este artículo describe el código de juego de ajedrez Gozi implementado en Java. Se comparte con usted para su referencia. El código específico es el siguiente
1. Objetivos prácticos
1. Master el diseño de la interfaz de Javagui
2. Dominar el monitoreo de eventos de ratón (MouseListener, MousemotionListener)
2. Contenido práctico
Diseñe un programa simple de Gochi que pueda realizar el proceso de juego de ajedrez de Gochi. Como se muestra en la figura a continuación
1. Gozi Tard de ajedrez
paquete cn.edu.ounc.fivechess; import java.awt.color; import java.awt.cursor; import java.awt.dimension; import java.awt.graphics; import java.awt.graphics2d; import java.awt.image; import java.awt.RadialGradientPaint; import java.awt.renderinghints; import java.awt.toolkit; import java.awt.event.mousevent; import java.awt.event.mouselistener; import java.awt.event.MousemotionListener; import java.awt.geom.ellipse2d; import javax.swing.*; /*** Goziqi-Chess-Class-Board Class*/Public Class Chessboard extiende jpanel implementos mouseListener {public static static int margin = 30; // margen público static final int grid_span = 35; // Grid espacios de espacios publicitarios intencionales intenciones intencionales = 15;/frente Punto [(filas+1)*(cols+1)]; // Inicial Cada elemento de matriz es nulo boolean isblack = verdadero; // El valor predeterminado comienza con el ajedrez negro First boolean Gameover = false; // es el juego terminado int Chesscount; // el número actual de piezas de ajedrez int xindex, yindex; // El índice de la pieza de juego finalizó IMG; Sombras de imagen; Color colortemp; public Chessboard () {// setbackground (color.blue); // Establezca el color de fondo en naranja img = herramientakit.getdefaultToolkit (). getImage ("board.jpg"); Shadows = Toolkit.getDefaultToolkit (). getImage ("shadows.jpg"); addMouselistener (esto); addMouseMotionListener (new MouseMotionListener () {public void MouseDragged (MouseEvent E) {} public void MouseMoved (MouseEvent e) {int x1 = (e.getx ()-margen+grid_span/2)/grid_span; // Convertir la posición coordenada de la mada de mrousos al índice grid y1 = (e.gety ()-margen+grid_span/2)/grid_span; setCursor (nuevo cursor (cursor.default_cursor)); } // dibujar public void PaintComponent (Graphics g) {super.paintComponent (g); // dibujar ajedrez en int imgwidth = img.getWidth (this); int imgheight = img.getheight (this); // Obtener el ancho y la altura de la imagen int fwidth = getWidth (); int fheight = getheight (); // Obtener el ancho y la altura de la ventana int x = (fwidth-imgwidth)/2; int y = (fheight-imgheight)/2; G.Drawimage (img, x, y, nulo); for (int i = 0; i <= filas; i ++) {// dibujar línea horizontal g.drawline (margen, margen+i*grid_span, margen+cols*grid_span, margen+i*grid_span); } para (int i = 0; i <= cols; i ++) {// dibujar línea vertical G.Drawline (margen+i*grid_span, margen, margen+i*grid_span); } // Dibuja piezas de ajedrez para (int i = 0; i <ChessCount; i ++) {// Intersección de la cuadrícula x, y coordenada int xpos = ChessList [i] .getx ()*grid_span+margin; int yPos = ChessList [i] .gety ()*grid_span+margin; G.SetColor (ChessList [i] .getColor ()); // establecer color // g.filloval (xPOS-Point.Diameter/2, YPOS-Point.Diameter/2, //point.diameter, Point.Diameter); //g.DrawImage(Shadows, xPos-Point.Diameter/2, yPOS-Point.Diameter/2, Point.Diameter, Point.Diameter, NULL); colorteMp = ChessList [i] .getColor (); if (colortemp == color.black) {radialGradientPaint Paint = new RadialGradientPaint (XPOS-Point.Diameter/2+25, YPOS-Point.Diameter/2+10, 20, New Float [] {0f, 1f}, nuevo color [] {color.white, color.black}); ((Graphics2d) g) .SetPaint (pintura); ((Graphics2d) g) .setRenderingHint (renderinghints.key_antialiasing, renderinghints.value_antialias_on); ((Graphics2d) g) .setRenderingHint (renderinghints.key_alpha_interpolation, renderinghints.value_alpha_interpolation_default); } else if (colortemp == color.white) {radialGradientPaint Paint = new RadialGradientPaint (XPOS-Point.Diameter/2+25, YPOS-Point.Diameter/2+10, 70, New Float [] {0f, 1f}, nuevo color [] {color.white, color.black}); ((Graphics2d) g) .SetPaint (pintura); ((Graphics2d) g) .setRenderingHint (renderinghints.key_antialiasing, renderinghints.value_antialias_on); ((Graphics2d) g) .setRenderingHint (renderinghints.key_alpha_interpolation, renderinghints.value_alpha_interpolation_default); } Ellipse2d e = new ellipse2d.float (xPOS-Point.Diameter/2, YPOS-Point.Diameter/2, 34, 35); ((Graphics2d) g) .Fill (e); // La caja rectangular roja que marca la última pieza de ajedrez si (i == ChessCount-1) {// Si es la última pieza de ajedrez G.SetColor (color.red); G.Drawrect (XPOS-Point.Diameter/2, YPOS-Point.Diameter/2, 34, 35); }}} public void mousePressed (mouseEvent e) {// El mouse se llama cuando se presiona en el componente // El juego ya no puede jugar si (gameover) return; Cadena colorname = isblack? "Negro": "ajedrez blanco"; // Convierta la posición de coordenadas del clic del mouse en el índice de cuadrícula xindex = (e.getx ()-margen+grid_span/2)/grid_span; yindex = (e.gety ()-margen+grid_span/2)/grid_span; // Si cae fuera del tablero de ajedrez, no puede ponerlo si (xindex <0 || xindex> filas || yindex <0 || yindex> cols) return; // Si hay una pieza de ajedrez en la posición X e Y, no puede ponerla si (FindChess (xindex, yindex)) return; // Si puede hacerlo cuando esté listo, no puede ponerlo cuando esté listo. Punto (xindex, yindex, isblack? Color.black: color.white); Listra de ajedrez [ChessCount ++] = ch; repinter (); // notifica al sistema que vuelva a draw // si gana, da un mensaje de inmediato y no puede continuar jugando al ajedrez if (iswin ()) {string msg = string.format ("¡Felicitaciones, %s won!", Colorname); JOptionPane.ShowMessEdialog (this, msg); GameOver = True; } isblack =! Isblack; } // método para sobrescribir mouseListener public void mouseClicked (mouseevent e) {// llamado cuando el botón del mouse hace clic en el componente} public void mouseentered (mouseEvent e) {// Mousereleaded (MouseEvent E) {// llamado cuando el botón del mouse se libera en el componente} // llamado en la matriz de ajedrez para ver si hay piezas de ajedrez con índice x e y que existen boolean private findchess (int x, int y) {para (punto c: list de ajedrez) {si (c! = null && c.getx () == x && c.gety () == y) return; } return false; } private boolean iswin () {int continúount = 1; // El número de piezas de ajedrez continuas // busca horizontalmente hacia el oeste para (int x = xindex-1; x> = 0; x-) {color c = isblack? color.black: color.white; if (getChess (x, yindex, c)! = null) {continuecount ++; } el más ruptura; } // Mira horizontalmente hacia el este para (int x = xindex+1; x <= cols; x ++) {color c = isblack? Color.black: color.white; if (getChess (x, yindex, c)! = null) {continuecount ++; } el más ruptura; } if (continúaunt> = 5) {return true; } else continúauecount = 1; // Continuar otra búsqueda verticalmente // buscar hacia arriba para (int y = yindex-1; y> = 0; y-) {color c = isblack? Color.black: color.white; if (getChess (xindex, y, c)! = null) {continuecount ++; } el más ruptura; } // Mira hacia abajo hacia abajo (int y = yindex+1; y <= filas; y ++) {color c = isblack? Color.black: color.white; if (getChess (xindex, y, c)! = null) continuandount ++; de lo contrario rompe; } if (continúaunt> = 5) return true; else continúa sintú = 1; // Continuar buscando otra situación: Oblicly // Northeast Buscar para (int x = xindex+1, y = yindex-1; y> = 0 && x <= cols; x ++, y-) {color c = isblack? Color.black: color.white; if (getChess (x, y, c)! = null) {continuecount ++; } el más ruptura; } // búsqueda suroeste para (int x = xindex-1, y = yindex+1; x> = 0 && y <= shows; x-, y ++) {color c = isblack? Color.black: color.white; if (getChess (x, y, c)! = null) {continuecount ++; } el más ruptura; } if (continúaunt> = 5) return true; else continúa sintú = 1; // Continuar buscando en otra situación: Oblique // Search del noroeste (int x = xindex-1, y = yindex-1; x> = 0 && y> = 0; x-, y-) {color c = isblack? Color.black: color.white; if (getChess (x, y, c)! = null) continuandount ++; de lo contrario rompe; } // Southeast Busque para (int x = xindex+1, y = yindex+1; x <= cols && y <= filas; x ++, y ++) {color c = isblack? Color.black: color.white; if (getChess (x, y, c)! = null) continuandount ++; de lo contrario rompe; } if (continúaunt> = 5) return true; else continúa sintú = 1; devolver falso; } Point privado getChess (int xindex, int yindex, color color) {for (punto p: ChessList) {if (p! = null && p.getx () == xindex && p.gety () == yindex && p.getColor () == color) return p; } return null; } public void reintartgame () {// claro las piezas de ajedrez para (int i = 0; i <ChessList.length; i ++) {ChessList [i] = null; } // restaurar el valor variable relacionado con el juego isblack = true; GameOver = falso; // es el juego que finaliza ChessCount = 0; // El número actual de piezas de ajedrez repintado (); } // Responder al ajedrez public void Goack () {if (ChessCount == 0) return; Lista de ajedrez [ChessCount-1] = NULL; Chesscount--; if (ChessCount> 0) {xIndex = ChessList [CHESSCOUNT-1] .getx (); yIndex = ChessList [ChessCount-1] .gety (); } isblack =! Isblack; repintado (); } // dimensión de rectángulo dimensión public getPreferredSize () {return New Dimension (margen*2 +grid_span*cols, margen*2 +grid_span*filas); }} 2. Piezas de ajedrez
paquete cn.edu.ounc.fivechess; import java.awt.color; /*** clase de ajedrez*/Public Class Point {private int x; // x Índice en el tablero de ajedrez private int y; // y Índice en el tablero de ajedrez color privado color color; // color public static final int diameter = 30; // diámetro punto público (int x, int y, color color) {this.x = x; this.y = y; this.color = color; } public int getx () {// Obtener el índice de x en la devolución del tablero de ajedrez x; } public int gety () {return y; } Color público getColor () {// Obtenga el color del color de retorno de la pieza de ajedrez; }} 3. Clase de marco principal de Gozi
paquete cn.edu.ounc.fivechess; import java.awt.event.*; import java.awt.*; import javax.swing.*; /* Marco principal de Goji, programa*/ clase pública StartchessjFrame extiende jframe {placa de ajedrez de ajedrez privado; barra de herramientas de jpanel privada; Privado JButton StartButton, BackButton, ExitButton; Privado JMenubar Menubar; Privado JMenu Sysmenu; Jmenuitem privado StartMenuitem, ExitMenuitem, Backmenuitem; // reiniciar, salir y arrepentir el elemento de menú public startchessjFrame () {settitle ("stand-eLone goji"); // establece el título de ajedrez = nuevo Chessboard (); Contenedor contentPane = getContentPane (); contentpane.add (tablero de ajedrez); Chessboard.SetOpaque (verdadero); // Crear y agregar menú Menubar = new JMenubar (); // Inicializar la barra de menú sysmenu = new JMenu ("Sistema"); // Inicializar menú // Inicializar el elemento del menú startMenuitem = new JMenuitem ("reiniciar"); ExitMenuitem = new JMenuitem ("Salir"); backmenuitem = new JMenuitem ("Arrepentir"); // Agregar tres elementos de menú al menú sysmenu.add (startMenuitem); sysmenu.add (ExitMenuitem); sysmenu.add (backmenuitem); // Inicializar la clase interna myitemListener lis = new MyItemListener (); // Registre tres menús al oyente del evento this.StartMenuitem.AddactionListener (LIS); BackMenuitem.AddactionListener (LIS); ExitMenuitem.AddactionListener (LIS); Menubar.add (sysmenu); // Agregue el menú del sistema a la barra de menú setJMenubar (menuBar); // Establezca Menubar en Menubar Tool Bar = new JPanel (); // Instanciar el panel de herramientas // Tres botones Inicializar inicioButton = new JButton ("Inicio de reinicio"); exitButton = new JButton ("Exit"); backButton = new JButton ("Arrepent"); // Diseño los botones del panel de herramientas con FlowLayout Tool Bar.SetLayout (nuevo FlowLayout (FlowLayout.Lft)); // Agregar tres botones a la barra de herramientas del panel de herramientas.Add (StartButton); Barra de herramientas.Add (ExitButton); Barra de herramientas.Add (BackButton); // Registre los tres botones para escuchar el evento StartButton.AddactionListener (LIS); ExitButton.AddactionListener (LIS); BackButton.AddactionListener (LIS); BackButton.AddactionListener (LIS); // coloca el panel de herramientas a la interfaz "sur" es decir, agregar (barra de herramientas, borderLayout.South); Agregar (Chessboard); // Agregar objeto Panel al formulario // Establezca el evento de interfaz Cerrar setDefaultCloseOperation (jframe.exit_on_close); // setSize (800,800); paquete (); // tamaño adaptativo} clase privada myItEmListener implementa ActionListener {public void ActionPerformed (ActionEvent e) {Object obj = e.getSource (); // Obtener la fuente de eventos if (obj == startChessjFrame.This.StartMenuitem || obj == startButton) System.out.println ("inicio"); Chessboard.RestartGame (); } else if (obj == ExitMenuitem || obj == ExitButton) System.exit (0); else if (obj == backmenuitem || obj == backButton) {System.out.println ("Arrepentir ajedrez ..."); Chessboard.goback (); }}} public static void main (string [] args) {startchessjFrame f = new startChessJFrame (); // Cree el marco principal F.SetVisible (true); // Muestre el marco principal}} 3. Resumen
1. Diseño e implementación de menús?
2. ¿Cómo dibujar piezas de ajedrez después de que el mouse haga clic en el tablero de ajedrez? ¿Cómo dibujar una caja roja para la pieza de ajedrez que acabas de configurar?
3. ¿Qué es una estructura de datos para los puntajes de ajedrez?
Lo anterior se trata de este artículo, espero que sea útil para todos aprender la programación de Java.