[java] ¿Ver impresión de copias normal?
Paquete cn.edu.ouc.fivechess;
Importar Java.awt.color;
Importar Java.awt.cursor;
Importar Java .awt .dimensión;
Importar Java .awt . ;
Importar Java . awt .pintura de gradiente radial;
Importar Java . p>Importar Java .evento .evento del mouse;
Importar evento Java . p>Importar Java.awt.geom.ellipse2d;
Importar javax.swing.*;
/**
*Tablero de ajedrez Gomoku
p>*/
El tablero de ajedrez de clase pública extiende JPanel para implementar MouseListener {
Public static final int MARGIN = 30 //Margen
public static final int GRID_SPAN = 35; // Espaciado de la cuadrícula
Public static final int ROWS = 15; //Número de filas del tablero de ajedrez
Public static final int COLS = 15; //Número de filas del tablero de ajedrez columnas
Punto[]lista de ajedrez = nuevo punto[(ROWS+1)*(COLS+1)] //Inicialmente, cada elemento de la matriz está vacío.
boolean isBlack = true//El inicio predeterminado es negro.
Boolean gameOver = false//¿Se acabó el juego?
int chessCount//El número actual de tableros de ajedrez
int xIndex, yIndex//El índice de la pieza de ajedrez que acaba de colocar.
Imagen img
Sombra de imagen;
Color colortemp
Tablero de ajedrez público(){
//set background(color . blue); //Establece el color de fondo en naranja.
img=Toolkit.getDefaultToolkit(). getImage(" tablero . jpg ");
sombras = kit de herramientas .
getImage(" sombras . jpg ");
addmouse listener(this);
addMouseMotionListener(new MouseMotionListener(){
ratón vacío público arrastrado (evento del mouse) e){
}
ratón vacío público movido (evento del mouse e){
int x 1 =(e . getx()-MARGIN+GRID _ SPAN/2)/GRID _ SPAN;
//Convierte la posición de coordenadas del clic del mouse en un índice de cuadrícula
int y 1 =(e . gety()-MARGIN+. . GRID _ SPAN/2)/GRID _ SPAN;
//El juego ha terminado, no puedes salir del juego
//No puedes jugar si soltar el tablero
//Ya hay piezas de ajedrez en las posiciones X e Y y no se pueden eliminar
if(x 1 <0 | | 1> COLS | | juego terminado | encontrar ajedrez(x 1, y1))
setCursor(new cursor(cursor.DEFAULT_cursor));
//Establecer es el estado predeterminado
else setCursor(new cursor(cursor.hand_cursor));
}
});
}
//Dibujar
componente de pintura vacía pública(Gráficos g){
super .componente de pintura (g); //Dibuja un tablero de ajedrez
int img ancho = img. (this);
int img height = img . get height(this); //Obtiene el ancho y alto de la imagen.
int FWidth = getWidth();
int FH height = getHeight() //Obtiene el ancho y alto de la ventana.
int x =(FWidth-img ancho)/2;
int y =(FH alto-img alto)/2
g.drawImage( img,x,y,null);
for(int I = 0;i<=line;I++){//Dibuja una línea horizontal
g.drawLine(MARGIN, MARGIN +i*GRID_SPAN,MARGIN+COLS*GRID_SPAN,MARGIN+I *GRID_SPAN);
}
for(int I = 0;i<= COLSI++){ //Dibuja una vertical line
g.drawLine(MARGIN+i*GRID_SPAN, MARGIN, MARGIN+i*GRID_SPAN, MARGIN+ROWS * GRID _ SPAN
} p>
//Dibujar piezas de ajedrez
for(int I = 0; I & ltchessCounti++){
//Intersección de cuadrícula coordenadas x, y
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- Punto/2, yPos-Point.DIAMETER/2,
//Punto Diámetro, Punto Diámetro);
//g.drawImage(Sombra, xPos-Point. .DIAMETER/2, yPos-Point.DIAMETER/2, diámetro del punto, diámetro del punto, vacío
colortemp=chessList[i]. getColor();
if(colortemp==Color.black){
pintura de degradado radial pintura = nueva pintura de degradado radial (xPos-Point. Diámetro/2+25, yPos- Point.DIAMETER/2+10, 20, nuevo flotador[]{0f, 1f}
, nuevo color[]{color.white,color.black});
( (Gráficos2D) g). setPaint(pintura);
((Graphics2D) g). setRenderingHint(sugerencias de renderizado. KEY_Anti-aliasing, sugerencias de renderizado. VALUE_ANTIALIAS_ON);
((Graphics2D) g). setRenderingHint(sugerencias de renderizado. KEY _ ALPHA _ interpolación, sugerencias de renderizado. VALUE _ ALPHA _ interpolación _ default
}
else if(color temp = = color . white){
pintura de degradado radial = nueva pintura de degradado radial (xPos-Point. Diámetro/2+25, yPos-Point.DIAMETER/2+10, 70, nuevo flotador[]{0f, 1f} p>
, nuevo color[]{color.white,color.black});
((Graphics2D) g). setPaint(pintura);
((Graphics2D) g). setRenderingHint(sugerencias de renderizado. KEY_Anti-aliasing, sugerencias de renderizado. VALUE_ANTIALIAS_ON);
((Graphics2D) g). setRenderingHint(sugerencias de renderizado. KEY _ ALPHA _ interpolación, sugerencias de renderizado. VALUE _ ALPHA _ interpolación _ default
}
Ellipse2D e = new Ellipse2D). Float(xPos-Point.DIAMETER/2, yPos-Point.DIAMETER/2, 34, 35);
((Graphics2D) g). Fill(e);
//El cuadro rectangular rojo que marca la última pieza de ajedrez.
If(i==chessCount-1){//Si es la última pieza de ajedrez,
g set color(color . red). > g.drawRect(xPos-Point.
Diámetro/2, yPos-Point.DIAMETER/2,
34, 35);
}
}
} p>
mouse vacío público presionado (evento del mouse e){// Se llama cuando se presiona el mouse sobre el componente.
//El juego ha terminado y ya no se puede descargar.
if(gameOver) devuelve;
String colorName=isBlack? "Ajedrez negro": "Ajedrez blanco";
//Convierte la posición de las coordenadas del clic del mouse en un índice de cuadrícula.
xIndex =(e . getx()-MARGIN+GRID _ SPAN/2)/GRID _ SPAN
yIndex =(e . gety()-MARGIN+GRID _ SPAN; /2)/GRID _ SPAN;
//No puedes jugar si dejas caer el tablero de ajedrez.
if(xIndex & lt; 0 | | xIndex & gtnúmero de filas | | yIndex & lt0 | Si una pieza ya existe en las posiciones X e Y, no se puede eliminar.
if(findChess(xIndex, yIndex)) regresa;
//Procesamiento que se puede completar en curso
Punto ch = nuevo punto (xIndex, yIndex) , isBlack? Color.black: color.white);
lista de ajedrez[ches count++]= ch
repintar();
//Si ganas, se te avisará y no podrás seguir jugando al ajedrez.
if(isWin()){
String msg=String.format("¡Felicitaciones, %s ganó!", nombre del color);
joptionpane . showmessagedialog(this, msg);
gameOver = true
}
isBlack=! isBlack
}
//Anular el método mouseListener
se hace clic con el mouse en vacío público (evento del mouse e){
//Se llama cuando se hace clic con el botón del mouse en el componente.
}
public void mouse enter(mouse event e){
//Se llama cuando el mouse ingresa al componente.
}
public void mouse salió (evento del mouse e){
//Se llama cuando el mouse sale del componente.
}
mouse public void liberado (evento del mouse e){
//Se llama cuando se suelta el botón del mouse en el componente.
}
// Descubra si hay una pieza de ajedrez con índice x, y en la matriz de piezas de ajedrez.
buscar ajedrez booleano privado(int x, int y){
for(c punto:lista de ajedrez){
if (c!= null & amp& ampgetx( )= = x & & ampc.getY()==y)
Devuelve verdadero
}
Devuelve falso
}
Booleano privado isWin(){
int continue count = 1; //El número de segmentos consecutivos
//Mirando hacia el oeste horizontalmente
for(int x = xIndex-1; x & gt=0;x - ){
Color c=esNegro? Color.Negro:Color.Blanco;
if(getChess(x,yIndex,c)!=null){
continuar contando++;
}else
Descanso;
}
//Mira hacia el este horizontalmente
for(int x = xIndex+1; x & lt= COLSx++ ) {
Color c=esNegro? Color.Negro:Color.Blanco;
if(getChess(x,yIndex,c)!=null){
continuar contando++;
}else
Romper;
}
if(continuar contando & gt;=5){
devuelve verdadero
} De lo contrario
continuar contando = 1;
//Continuar otra búsqueda vertical.
//Buscar hacia arriba
for(int y = yIndex-1; y & gt=0;y - ){
Color c=isBlack? Color.Negro:Color.Blanco;
if(getChess(xIndex, y, c)!=null){
continuar contando++;
}else
Descanso;
}
//Mira verticalmente hacia abajo
for(int y = yIndex+1; y & lt=line ; y++){
Color c=esNegro? Color.Black:Color.White;
if(getChess(xIndex, y, c)!=null)
continuar contando++;
Otros
Romper;
}
if(continuar contando & gt;=5)
Devuelve verdadero
Otro p> p>
continuar conteo = 1;
//Continuar la búsqueda en otro caso: diagonal.
//Buscar noreste
for(int x=xIndex+1, y = yIndex-1; y & gt= 0 & amp& ampx & lt= COLSx++, y - ){
¿Color c=esNegro? Color.Negro:Color.Blanco;
if(getChess(x, y, c)!=null){
continuar contando++;
} p>
else break
}
//Buscar suroeste
for(int x=xIndex-1, y = yIndex+1; x & gt= 0 &&y<=line;x-,y++){
Color c=esNegro? Color.Negro:Color.Blanco;
if(getChess(x, y, c)!=null){
continuar contando++;
} p>
de lo contrario romper
}
si(continuar contando & gt;=5)
devolver verdadero
de lo contrario continuar count = 1;
//Continuar buscando en otro caso: diagonal.
//Buscar noroeste
for(int x=xIndex-1, y = yIndex-1; x & gt= 0 & amp& ampy & gt=0; x -, y - ){
Color c=esNegro? Color.Negro: Color.Blanco;
if(getChess(x, y, c)!=null)
continuar contando++;
si no, romper p> p>
}
//Encuentra la dirección sureste
for(int x=xIndex+1, y = yIndex+1; x & lt= COLS & amp& ampy & lt =row;x++,y++){
Color c=isBlack? Color.Negro: Color.Blanco;
if(getChess(x, y, c)!=null)
continuar contando++;
si no, romper p> p>
}
if(continuar contando & gt;=5)
Devuelve verdadero
De lo contrario continuar contando = 1;
Devuelve falso
}
Punto privado getChess(int xIndex, int yIndex, Color color){
for(point p:chessList){ p>
if (p!= null & amp& ampp . getx()= xIndex & & ampp.getY()==yIndex
& amp& ampp.getColor()==color)
Devolver p;
}
Devolver nulo
}
reiniciar juego vacío público(){ p>
//Borrar piezas de ajedrez
for(int I = 0;i<chess list . length;i++){
lista de ajedrez[I]= null;
p>}
//Restaurar valores de variables relacionadas con el juego
isBlack = true
gameOver = false//¿Se acabó el juego?
ches count = 0; //Número actual de tableros de ajedrez
repaint();
}
//Arrepentimiento del ajedrez
p>
Public void goback(){
if(chessCount==0)
Regresar;
lista de ajedrez[ cuenta de ajedrez-1]= null;
cuenta de ajedrez-;
if (cuenta de ajedrez & gt; 0){
xIndex = lista de ajedrez[cuenta de ajedrez -1]. getX();
yIndex = lista de ajedrez[cuenta de ajedrez-1]. getY();
}
isBlack=! isBlack
repaint();
}
//Dimensión rectangular
Dimensión pública getPreferredSize(){
Devolver nuevas dimensiones (MARGIN*2+GRID_SPAN*COLS, MARGIN*2
+GRID_SPAN*ROWS);
}
}