JAVA master se hace cargo——Programa de juego Gomoku para dos jugadores
Crea una nueva clase de ajedrez con el siguiente código
paquete de trabajo;
import java.awt.Color;
clase pública de ajedrez {
public static final int diamter=30;
private int x;//Índice en la grilla, 0~15
private int y;/ / Índice en la cuadrícula, 0~15
color privado color;
color público getColor() {
color de retorno;
}
public void setColor(Color color) {
this.color = color;
}
public int getX( ) {
return x;
}
public void setX(int x) {
this.x = x;
p >}
public int getY() {
return y;
}
public void setY(int y) {
this.y = y;
}
Ajedrez público(int x, int y, Color color) {
super ();
this.x = x;
this.y = y;
this.color = color;
}
}
Luego cree una nueva clase FirstFrame en el mismo paquete.
El código es el siguiente
paquete de trabajo;
importar java.awt.event.ActionEvent;
importar java.awt.event.ActionListener;
importar javax.swing.JFrame;
importar javax.swing.JMenu;
importar javax.swing.JMenuBar;
importar javax.swing .JMenuItem;
//Función principal
clase pública FirstFrame{
public static void main(String[] args) {
FirstFrame1 f= new FirstFrame1();
f.setVisible(true);
}
}
//Función de formulario
la clase FirstFrame1 extiende JFrame implementa ActionListener{
JMenuBar menuBar;
JMenu sysMenu;
JMenuItem startMenuItem;
JMenuItem backMenuItem ;
JMenuItem exitMenuItem;
DrawPanel myPanel=new DrawPanel();
public FirstFrame1(){
super(" Wahaha" );
add(myPanel);
menuBar=new JMenuBar();
setJMenuBar(menuBar);
sysMenu =new JMenu("Sistema(s)");
sysMenu.setMnemonic('s');
menuBar.add(sysMenu);
startMenuItem =new JMenuItem("Inicio");
backMenuItem=new JMenuItem("Arrepentirse");
exitMenuItem=new JMenuItem("Salir");
sysMenu.add(startMenuItem);
sysMenu.add(backMenuItem);
sysMenu.addSeparator();
sysMenu.add(exitMenuItem); p>
startMenuItem.addActionListener(este);
backMenuItem.addActionListener(este);
exitMenuItem.addActionListener(este);
super.setSize (600,650 );
super.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
acción nula pública realizada (ActionEvent e){
Objeto obj =e.getSou
rce();
if(obj==startMenuItem){
myPanel.start(); //DrawPanel p=new DrawPanel();
}else if(obj==backMenuItem){
myPanel.back();
}else{
System.exit(0); /p>
}
}
}
Finalmente cree un nuevo código de clase DrawPanel de la siguiente manera
paquete de trabajo;
p>importar java.awt.Color;
importar java.awt.Cursor;
importar java.awt.Graphics;
importar java.awt.event.ActionEvent;
importar java.awt.event.ActionListener;
importar java.awt.event.MouseEvent;
importar java. .awt.event.MouseListener;
importar java.awt.event.MouseMotionListener;
importar javax.swing.JFrame;
importar javax.swing.JMenu ;
p>importar javax.swing.JMenuBar;
importar javax.swing.JMenuItem;
importar javax.swing.JOptionPane;
importar javax.swing.JPanel;
importar sun.awt.geom.AreaOp.AddOp;
//Handle;
la clase DrawPanel extiende los implementos de JPanel MouseListener,MouseMotionListener{
final int MARGIN_TOP=60;
final int MARGIN_LEFT=30;
final int CELL_WIDTH=35;
final int COLS= 15;
final int FILAS=15;
Ajedrez[] chessList=new Ajedrez[(COLS+1)*(FILAS+1)];
int chessCount=0;
boolean isBlack=true;
boolean gameOver=false;
public DrawPanel(){ //Constructor p>
Color color=new Color(200,250,200);
setBackground(color);
this.addMouseMotionListener(this);
this.addMouseListener (esto);
}
inicio vacío público(){
para
(int i=0;i chessList[i]=null; isBlack=true; gameOver=false; chessCount=0; repintar(); } public void back(){ if (chessCount==0||gameOver==true) return; chessList[chessCount-1]=null; chessCount--; isBlack=!isBlack; repaint(); } @Override protected void paintComponent( Gráficos g) { //Anulación de método // TODO Código auxiliar de método generado automáticamente super.paintComponent(g); for(int i= 0 ;i<=ROWS;i++){ g.drawLine(MARGIN_LEFT, MARGIN_TOP+i*CELL_WIDTH, MARGIN_LEFT+COLS*CELL_WIDTH, MARGIN_TOP+i*CELL_WIDTH); } for(int i=0;i<=COLS;i++){ g.drawLine(MARGIN_LEFT+i*CELL_WIDTH, MARGIN_TOP, MARGIN_LEFT+i*CELL_WIDTH, MARGIN_TOP+ROWS * CELL_WIDTH); } for(int i=0;i Ajedrez chess=chessList[ i]; int xPos=MARGIN_LEFT+CELL_WIDTH*chess.getX()-Chess.diamter/2; int yPos=MARGIN_TOP+CELL_WIDTH*chess.getY()-Ajedrez .diamter/2; g.setColor(chess.getColor()); g.fillOval(xPos,yPos, Chess.diamter, Chess.diamter); if(i==chessCount-1){ g.setColor(Color.red); g.drawRect(xPos, yPos, Chess.diamter, Chess .diamter); } } if(isBlack) g.setColor(Color.black); > else g.setColor(Color.blanco); g.fillOval(8*CELL_WIDTH, CELL_WIDTH/2,Chess.diamter, Chess.diamter); String colorStr=isBlack==false?"Movimientos blancos":"Movimientos negros"; g.setColor(Color.blue); g .drawString (colorStr+" "+chessCount/2+"step", 9*CELL_WIDTH, CELL_WIDTH); } public void mouseClicked(MouseEvent e) {} public void mouseEntered(MouseEvent e) {} public void mouseExited(MouseEvent e) {} public void mouseReleased(MouseEvent e) {} public void mouseDragged(MouseEvent e) {} public void mouseMoved(MouseEvent e) { // TODO Código auxiliar de método generado automáticamente super. Cursor(Cursor.HAND_CURSOR)); int x=(e.getX()-MARGIN_LEFT+Chess.diamter/2)/CELL_WIDTH; int y=( e.getY ()-MARGIN_TOP+Chess.diamter/2)/CELL_WIDTH; if(x<0||y<0||x>COLS||y>ROWS) //Excede el límite del tablero de ajedrez p> super.setCursor(new Cursor(Cursor.DEFAULT_CURSOR)); if(findChess(x,y)) //El lugar donde has descargado no se puede volver a descargar super.setCursor(nuevo Cursor(Cursor.DEFAULT_CURSOR)); if(gameOver) super.setCursor(nuevo Cursor(Cursor.DEFAULT_CURSOR)); } public void mousePressed(MouseEvent e) { int x=(e.getX()-MARGIN_LEFT+Chess.diamter/2)/CELL_WIDTH; p > int y=(e.getY()-MARGIN_TOP+Chess.diamter/2)/CELL_WIDTH; if(x<0||y<0||x>COLS|| y >ROWS) //Excede el límite del tablero p> return; Color color=Color.black; if(!isBlack) // Cambiar color color=Color.white; if(findChess(x,y)) //El lugar donde has jugado no se puede volver a jugar return; if(gameOver) return ; chessList[chessCount]=new Chess(x,y,color); repaint(); //Repintar isBlack=! isBlack; chessCount++; String colorStr=color==Color.white?"White":"Negro"; int[] count={0 ,0,0,0}; for(int i=x-1;i>=0;i--){ if(findChess(i,y,color )){ count[0]++; } else break; } for(int i=x+1;i<=COLS;i++){ if(findChess(i,y,color)){ contar[0]++; } más romper; } for(int i=y-1;i>=0;i--){ if(findChess(x,i,color)){ count[1]++; } else romper; } for(int i=y+1;i< =FILAS;i++){ if(findChess(x,i,color)){ count[2]++; } else descanso; } for(int i=x+1,j=y+1;i<=COLS&&j<= FILAS;i++,j++){ if(findChess(i,j,color)){ count[3]++; } p> else descanso; } for(int i=x-1,j=y-1;i>=0&&j> =0;i--,j--){ if(findChess(i,j,color)){ count[3]++; } más romper; } para (en t i=x+1,j=y-1;i<=COLS&&j>=0;i++,j--){ if(findChess(i,j,color)){ contar[3]++; } más romper; } for(int i=x-1,j=y+1;i>=0&&j<=ROWS;i--,j++){ if(findChess(i,j,color)){ contar[3]++; } más romper; } for(int i=0;i<4;i++){ if(count[i]>=4){ gameOver=true; JOptionPane.showMessageDialog(this, "Felicitaciones"+colorStr+"Victoria"); return; } } System.out.println(e.getX()+","+e.getY()); } público booleano findChess(int x,int y){ for(int i=0;i if(chessList[i].getX()==x && chessList[i].getY() ==y) devuelve verdadero; } devuelve falso; } público booleano findChess (int x,int y,Color color){ for(int i=0;i if(chessList[i].getX()= =x && chessList[i].getY()==y && chessList[i].getColor()==color) devuelve verdadero; } return false; } } Hola si no funciona