Java implementa un minijuego de backgammon
paquete Gomoku; import java.awt.Toolkit; import javax.swing.JFrame; public class GomokuFrame extends JFrame { //Definir un panel de operación OperadorPane op=null; public GomokuFrame() { //Establecer el nombre this.setTitle("Gomoku " ); //Establece el tamaño de la ventana this.setSize(510,510); //Establece la posición de la ventana//Obtiene el tamaño de la pantalla de la computadora int computer_width=Toolkit.getDefaultToolkit().getScreenSize().width; int computer_height=Toolkit.getDefaultToolkit().getScreenSize().height System.out.println("El ancho de la pantalla de la computadora:/n"+computer_width+"/ ncomputer Altura de la pantalla:/n"+computer_height); //Centrar this.setLocation((computer_width-510)/2, (computer_height-510)/2); //Crear una instancia de la cortina op=new OperatorPane(); //Importar la cortina this.add(op); Agregar mouse escuchando this.addMouseListener(op); //Establecer la visualización de la ventana this.setVisible(true); //Establece el cierre normal de la ventana this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); } //Ejecuta la prueba public static void main(String[] args) { new GomokuFrame();
paquete Gomoku; importar java.awt.Color; importar java.awt.Font; importar java.awt.Graphics; importar java.awt.Image; importar java.awt.event.MouseEvent; importar java.awt.event.MouseListener; java.awt.image.BufferedImage; importar java.awt.image.BufferedImageFilter; javax.swing.ImageIcon;import javax.swing.JOptionPane;import javax.swing.JPanel; public class OperatorPane extiende JPanel implements MouseListener,Runnable{ //Definir el objeto de imagen de fondo Image imageBackground = null; the checkerboard grid int boardrows=18 //definir el número de columnas de la cuadrícula del tablero de ajedrez int boardcols=18 //definir el tamaño de la cuadrícula del tablero de ajedrez int; boardsize=20; //Guarda las coordenadas de las piezas de ajedrez int x=0,y=0; //Guarda las coordenadas de todas las piezas de ajedrez jugadas antes//El contenido de los datos 0: significa que no hay ninguna pieza de ajedrez en este momento. punto, 1: significa que este punto es una pieza negra, 2: indica que este punto es una pieza blanca int allchess[][]=new int [19][19] //Marca si el siguiente paso es negro; o white boolean isBlack=true //Juzga si el juego puede continuar boolean canPlay=true; //Guardar la información mostrada String message="El negro va primero"; //Guardar el tiempo máximo (segundos) int maxTime = 0; //Clase de hilo para la cuenta regresiva Thread t = new Thread(this); with White int blackTime = 0; int whiteTime = 0 // Guarda la información de visualización del tiempo restante de ambas partes String blackMessage = "Unlimited" String whiteMessage = "Unlimited"; @SuppressWarnings("deprecation") public OperatorPane() { t.start(); t.suspend(); imageBackground=new ImageIcon("image/background.jpg").getImage(); public void paint(Gráficos g) { //Tecnología de doble buffer BufferedImage b1=new BufferedImage(495,475,BufferedImage.TYPE_INT_ARGB); Gráficos g2=b1.createGraphics(); //Dibuja la imagen de fondo g2.drawImage(imageBackground, 0, 0,495,475,null); //Dibuja la línea del tablero de ajedrez Color c=g2.getColor( ); g2.setColor(Color.NEGRO); i=0;i<=boardrows;i++) { g2.drawLine(10,50+boardsize*i,10+boardsize*boardrows,50+boardsize*i } for(int i=0;i<=boardcols; i++) { g2.drawLine(10+tamaño del tablero*i,50,10+tamaño del tablero*i,50+tamaño del tablero*cols del tablero } //Dibuja la posición tres-tres g2.fillOval(67, 107, 6, 6); g2.fillOval(67, 347, 6, 6); ( 307, 347, 6, 6); //Dibuja puntos adicionales g2.fillOval(67, 227, 6, 6); g2.fillOval(307, 227, 6, 6); g2.fillOval(187, 107, 6, 6); g2.fillOval(187, 347, 6, 6); fillOval(187, 227, 6, 6); //Dibujar mensaje de texto/*Fuente f=new Fuente("黑体", Font.BOLD, 24); g.setFont(f);*/ g2.setFont(new Font("黑体", Font.BOLD, 20)); g2.drawString("Información del juego:"+mensaje, 130, 40); g2.setFont(new Font("宋体", Font.ITALIC, 15)); g2.drawString("Tiempo negro:"+blackMessage,25, 445); g2.drawString("Tiempo blanco:"+whiteMessage,245, 445); //Dibuja todas las piezas de ajedrez para(int i= 0); ;i<=boardrows;i++) { for(int j=0;j<=boardcols;j++) { //Almacenamiento de ajedrez negro if(allchess[i][j]==1) { int tempX=i*20-10; int tempY=j*20+30; //Dibujar negro g2.setColor(Color.BLACK); g2.fillOval(tempX+12, tempY+13, 15, 15) ; //Almacenamiento de ajedrez blanco if(allchess[i][j]==2) { int tempX=i*20-10; tempY=j*20+30; //Dibuja la pieza blanca g2.setColor(Color.BLACK); g2.drawOval(tempX+12, tempY+13, 15, 15); .fillOval(tempX+12, tempY+13, 15, 15); g2.setColor(c); g.drawImage(b1,0,0,this); } private boolean checkWin() { boolean flag=false; int color = allchess[x][y]; igual Cuántas piezas de ajedrez del color están conectadas int count1=1; int count2=1; int count3=1; int count4=1 // Determina si hay 5 piezas de ajedrez conectadas en la dirección horizontal. las características son las mismas. Es decir, los valores de y en allChess[x][y] son los mismos // Use un bucle para determinar si las piezas de ajedrez están conectadas int i = 1 while (color == allchess[x+i][y; ]) { count1++; i++; } //Restablecer el valor i = 1; while (color == allchess[xi][y]) { count1++; i++; // Juzga la dirección vertical, es decir, los valores de x en allChess[x][y] son los mismos int j = 1 while (color == allchess[x][y+j]) { count2++; ; } //Restablece el valor de j j = 1; while (color == allchess[x][yj]) { count2++; j++ } if(count2>= 5) { flag = true; "/" entero m1=1; int n1=1; mientras (color == todo ajedrez[x+m1][y+n1]) { cuenta3++; n1++ } m1=1; -m1][y-n1]) { count3++; m1++; n1++ } if(count3>= 5) { flag = true } //Juzga la dirección oblicua "/" int m2=1; int n2=1; mientras (color == todo ajedrez[x+m2][y-n2]) { cuenta4++; n2++ } m2=1; x-m2][y+n2]) { cuenta4++; m2++; n2++ } if(cuenta4>= 5) { bandera = verdadero } */ int cuenta; // Recuento de juicio horizontal=this.checkCount(1, 0, color); if(count>=5) { flag = true } else { // Recuento de juicio vertical=this.checkCount(0, 1, color); (cuenta>=5) { bandera = verdadero; } else { //Inclinado "/" cuenta=this.checkCount(1, 1, color); if(cuenta>=5) { bandera = verdadero; inclinado "/" cuenta=this.checkCount(1, -1, color); if(count>=5) { bandera = verdadero; } } } } return bandera } private int checkCount(int xChange,int yChange,int color) { int cuenta; =1; int tempX=xChange; int tempY=yChange; mientras (color==allchess[x+xChange][y+yChange]) { contar++; if(xChange!=0) { xChange++ } if(yChange!=0) { if(yChange<0) { yChange-- } else { yChange++ } } } //Restablecer xChange=tempX; (color==allchess[x-xChange][y-yChange]) { cuenta++ if(xChange!=0) { xChange++; } if(yChange!=0) { if(yChange<0) { yChange--; } else { yChange++; } } } return count } public void mouseClicked(MouseEvent e) { System.out.println("x:" +e.getX()+"y:"+e.getY()); x=e.getX(); y=e.getY(); if(x>=10&&x<=(10+boardsize*boardrows+20)&&y>=50&&y<=(50+boardsize*boardcols+40)) { //System.out.println("El punto está en el tablero. "); ==0) { if(isBlack==true) { allchess[x][y]=1; isBlack=false; message="El turno de las blancas"; } else { allchess[x][y]=2; esNegro =verdadero; message="El turno de las negras"; } // Determina si esta pieza de ajedrez está conectada con otras piezas de ajedrez en una conexión de 5, es decir, si el juego ha terminado. boolean winFlag=this.checkWin(); true) { JOptionPane.showMessageDialog (this,"¡Se acabó el juego!"+ (allchess[x][y]==1?"Black":"White")+"Gana."); canPlay=false; JOptionPane.showMessageDialog(this, "Ya hay una pieza de ajedrez en la posición actual, ¡coloquela nuevamente!"); } } this.repaint() } //Haga clic en el botón de inicio del juego //Reinicie un nuevo juego si( e.getX() >=400&&e.getX()<=470&&e.getY()>=80&&e.getY()<=110) { int result=JOptionPane.showConfirmDialog(this, "Configuración completada, ¿quieres reiniciar el juego?"); if(result==0) { //Reiniciar la operación, toda la información en la matriz allchess[][] es 0 // Limpiar el tablero de ajedrez for (int i = 0; i < 19; i++) { for (int j = 0; j < 19; j++) { allchess[i][j] = 0; //Otra forma allChess = new int[19][19]; blackTime = maxTime; whiteTime = maxTime; if (maxTime > 0) { blackMessage = maxTime / 3600 + ":" + (maxTime / 60 - maxTime / 3600 * 60) + ":" + (tiempomáx - tiempomáx / 60 * 60 mensajeblanco = tiempomáx / 3600 + ":" +); (maxTime / 60 - maxTime / 3600 * 60) + ":" + (maxTime - maxTime / 60 * 60); t.resume() } else { blackMessage = "Ilimitado" whiteMessage = "Ilimitado" } mensaje; "El negro va primero"; isBlack = true; this.canPlay = true; this.repaint(); //Haz clic en el botón de configuración del juego if(e.getX()>=400&&e.getX()<=470&&e.getY()>=130&&e.getY()<=160) { String input = JOptionPane .showInputDialog("Por favor, ingresa el juego El tiempo máximo (unidad: minutos), si ingresa 0, significa que no hay límite de tiempo: "); intente { maxTime = Integer.parseInt(input) * 60; if (maxTime < 0) { JOptionPane.showMessageDialog(this, "Ingrese la información correcta, ¡no se permiten números negativos!"); completado, ¿Reiniciar el juego?"); if (resultado == 0) { for (int i = 0; i < 19; i++) { for (int j = 0; j < 19; j++) { allchess[i][j] = 0; } } // Otra forma allChess = new int[19][19]; blackTime = maxTime; whiteTime = maxTime; blackMessage = "Sin límite"; whiteMessage = "Sin límite"; this.canPlay = true; 0) { int resultado = JOptionPane.showConfirmDialog(this, "Configuración completada, ¿quieres reiniciar el juego?"); if (resultado == 0) { for (int i = 0; i < 19; i++) { for (int j = 0; j < 19; j++) { allchess[i][j] = 0 } } // Otra forma allChess = new; int[19][19]; mensaje = "El negro va primero"; isBlack = true; blackTime = maxTime; whiteTime = maxTime / 3600 * 60 ) + ":" + (tiempomáx - tiempomáx / 60 * 60 mensajeblanco = tiempomáx / 3600 + ":" + (tiempomáx / 60); - maxTime / 3600 * 60) + ":" + (maxTime - maxTime / 60 * 60); t.resume(); this.canPlay = true; / TODO Bloque de captura generado automáticamente JOptionPane.showMessageDialog(this, "¡Ingrese la información correctamente!"); //Haz clic en el botón de descripción del juego if(e.getX()>=400&&e.getX()<=470&&e.getY()>=180&&e.getY()<=210) { JOptionPane.showMessageDialog(this, "Este es un Programa de juego de backgammon, los lados blanco y negro se turnan para jugar al ajedrez. Cuando un lado llega a cinco piezas seguidas, el juego termina. "); } //Haga clic en el botón admitir derrota if(e.getX()>=400&&e.getX()<=470&&e.getY()>=280&&e.getY()<=310) { int result=JOptionPane.showConfirmDialog (this, "¿Estás seguro de que quieres admitir la derrota?"); if (resultado == 0) { if (isBlack) { JOptionPane.showMessageDialog(this, "¡Las negras han cedido, el juego ha terminado!"); } else { JOptionPane.showMessageDialog(this, "¡Las blancas han cedido, el juego ha terminado!" } canPlay = false; //Haz clic en el botón Acerca de if(e.getX()>=400&&e.getX()<=470&&e.getY()>=330&&e.getY()<=360) { JOptionPane.showMessageDialog(this,"Este juego se proporciona por Nanmu Producido por el estudio, si tiene preguntas relacionadas, visite www.yiyiinformation.com"); } //Haz clic en el botón Salir if(e.getX()>=400&&e.getX()<=470&&e.getY()>=380&&e.getY()<=410) { JOptionPane.showMessageDialog(this, "Game Over") ; System.exit(0); } } //************************// @Override public void mouseEntered(MouseEvent arg0) { // TODO Código auxiliar de método generado automáticamente } @Override public void mouseExited(MouseEvent arg0) { // TODO Código auxiliar de método generado automáticamente } @Override public void mousePressed(MouseEvent arg0) { // TODO Código auxiliar de método generado automáticamente } @Override public void mouseReleased (MouseEvent arg0) { // TODO Código auxiliar de método generado automáticamente } @Override public void run() { if (maxTime > 0) { while (true) { if (isBlack) { blackTime--; if (blackTime == 0) { JOptionPane.showMessageDialog(this, "Black ha agotado el tiempo de espera, ¡el juego ha terminado! "); } } else { whiteTime--; if (whiteTime == 0) { JOptionPane.showMessageDialog(this, "¡Las blancas han agotado el tiempo de espera, el juego ha terminado!"); } } blackMessage = blackTime / 3600 + ":" + (blackTime / 60 - blackTime / 3600 * 60) + ":" + (blackTime - blackTime / 60 * 60 whiteMessage = whiteTime / 3600 + ":" + (whiteTime / 60 - whiteTime); / 3600 * 60) + ":" + (horablanca - horablanca / 60 * 60); this.repaint(); try { Thread.sleep(1000); } catch (InterruptedException e) { // TODO Bloque de captura generado automáticamente e.printStackTrace() } System.out.println(blackTime + " -- " + horablanca); } } } }
Imagen de demostración:
Lo anterior es el contenido completo de este artículo. Espero que sea útil para todos dominar Java con fluidez.