Red de conocimiento informático - Aprendizaje de programación - JAVA master se hace cargo——Programa de juego Gomoku para dos jugadores

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);

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

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

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;

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]++;

}

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