Este artigo descreve o código do jogo de xadrez Gozi implementado em Java. É compartilhado com você para sua referência. O código específico é o seguinte
1. Objetivos práticos
1. Domine o design da interface Javagui
2. Domine o monitoramento de eventos de mouse (Mouselistener, MousemotionListener)
2. Conteúdo prático
Projete um programa simples de gochi que possa realizar o processo de jogo de xadrez de gochi. Como mostrado na figura abaixo
1. Placa de xadrez Gozi
pacote cn.edu.ouc.fiveChess; importar java.awt.color; importar java.awt.cursor; importar java.awt.dimension; importar java.awt.graphics; importar java.awt.graphics2d; importar java.awt.image; importar java.awt.RadialGradientPaint; importar java.awt.renderinghints; importar java.awt.toolkit; importar java.awt.event.mouseevent; importar java.awt.event.mouselistener; importar java.awt.event.mousemotionListener; importar java.awt.geom.ellipse2d; importar javax.swing.*; /*** goziqi-chess-chess-placa classe*/classe de xadrez da classe pública estende JPanel implementa mouselistener {public static final int margin = 30; // margem public static final int grid_span = 35; // spacing grade public static final int = 15; // chessboard robs staty static int staks int 15; Ponto [(linhas+1)*(cols+1)]; // inicial cada elemento da matriz é nulo booleano isblack = true; // O padrão começa com o primeiro jogo booleano de xadrez preto = false; // é o jogo terminado int bessCount; // o número atual de peças de xadrez int xindex, yindex; // o índice do sweet; Sombras de imagem; ColorLorMP colorido; public ChessBoard () {// Setbackground (color.blue); // Defina a cor do fundo para Orange IMG = Toolkit.getDefaultToolkit (). getImage ("Board.jpg"); Shadows = Toolkit.getDefaultToolkit (). getImage ("shokows.jpg"); addmouseListener (isto); addMousEmotionListener (new MouseMotionListener () {public void Mousedragged (mouseevent e) {} public void mouseMoved (mouseevent e) {int x1 = (e.getx ()-margin+grid_span/2)/grid_span; // convert the colainate the colar Y1 = (e.gety ()-margem+grid_span/2)/grid_span; setCursor (novo cursor (cursor.default_cursor)); } // desenhe public void PaintComponent (gráficos g) {super.paintcomponent (g); // desenhe xadrez int imgwidth = img.getwidth (this); int imgheight = img.getHeight (this); // obtenha a largura e a altura da imagem int fwidth = getWidth (); int fHeight = getHeight (); // obtenha a largura e a altura da janela int x = (fwidth-imgwidth)/2; int y = (fHeight-imgheight)/2; G.Drawimage (IMG, X, Y, NULL); para (int i = 0; i <= linhas; i ++) {// desenhe linha horizontal g.drawline (margem, margem+i*grid_span, margem+cols*grid_span, margem+i*grid_span); } para (int i = 0; i <= cols; i ++) {// desenhe linha vertical g.drawline (margem+i*grid_span, margem, margem+i*grid_span); } // desenhe peças de xadrez para (int i = 0; i <chessCount; i ++) {// interseção da grade x, y coordenada int xpos = chesslist [i] .getx ()*grid_span+margem; int ypos = chesslist [i] .gety ()*grid_span+margem; g.setColor (ChessList [i] .getColor ()); // Definir cores // 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 pint = new radialgradientpaint (xpos-Point.diameter/2+25, ypospoint.diameter/2+10, 20, novo float [] {0f, 1f}, nova cor [] {color.white, cor.black}); ((Graphics2d) G) .SetPaint (tinta); ((Graphics2d) g) .SetRanderingHint (renderinghints.key_antialiasing, renderinghints.value_antialias_on); ((Graphics2d) g) .SetRanderingHint (renderinghints.key_alpha_interpolation, renderinghints.value_alpha_interpolation_default); } else if (colortemp == color.white) {radialgradientpaint pint = new radialgradientpaint (xpos-ponto.diameter/2+25, ypospoint.diameter/2+10, 70, novo float [] {0f, 1f}, nova cor [] ((Graphics2d) G) .SetPaint (tinta); ((Graphics2d) g) .SetRanderingHint (renderinghints.key_antialiasing, renderinghints.value_antialias_on); ((Graphics2d) g) .SetRanderingHint (renderinghints.key_alpha_interpolation, renderinghints.value_alpha_interpolation_default); } Elipse2d e = new ellipse2d.float (xpos-Point.diameter/2, ypospoint.diameter/2, 34, 35); ((Graphics2d) g) .Fill (e); // a caixa retangular vermelha marcando a última peça de xadrez if (i == CHESSCOUNT-1) {// se for a última peça de xadrez G.setColor (color.red); G.DrawRect (XPOS-PONT.DIAMETER/2, YPOS-PONT.DIAMETER/2, 34, 35); }}} public void mousePressed (mouseevent e) {// O mouse é chamado quando pressionado no componente // o jogo não pode mais jogar se (caça) retornar; String colorname = isblack? "Black": "White Chess"; // Converta a posição de coordenada do mouse clique no índice da grade xindex = (e.getx ()-margem+grid_span/2)/grid_span; yindex = (e.gety ()-margem+grid_span/2)/grid_span; // Se você estiver fora do tabuleiro de xadrez, não poderá colocá -lo se (xindex <0 || xindex> linhas || yindex <0 || yindex> cols) retornar; // Se houver uma peça de xadrez na posição X e Y, você não poderá colocá -la se (FindChess (xindex, yindex)) retornar; // Se você puder fazê -lo quando for feito, não pode colocá -lo quando for feito. Ponto (xindex, yindex, isblack? Color.black: color.white); ChessList [ChessCount ++] = CH; Repaint (); // Notifique o sistema para re-despertar // Se você vencer, faça uma mensagem rápida e não pode continuar jogando xadrez se (iswin ()) {string msg = string.format ("Parabéns, %s won!", Colorname); JoptionPane.showMessagedialog (isto, msg); gameover = true; } isblack =! isblack; } // Method to overwrite mouseListener public void mouseClicked(MouseEvent e){ // Called when the mouse button clicks on the component} public void mouseEntered(MouseEvent e){ //Called when the mouse enters the component} public void mouseExited(MouseEvent e){ //Called when the mouse leaves the component} public void MouseReledEd (mouseevent e) {// chamado quando o botão do mouse é liberado no componente} // chamado na matriz de xadrez para ver se existem peças de xadrez com índice x e y que existem private boolean findchess (int x, int y) {para (ponto c: chesslist) {if (c! } retornar false; } private boolean iswin () {int continueCount = 1; // o número de peças de xadrez contínuo // parece horizontalmente oeste para (int x = xindex-1; x> = 0; x-) {color c = isblack? color.black: color.white; if (getChess (x, yindex, c)! = null) {continuaCount ++; } mais quebrar; } // Procure horizontalmente para o leste para (int x = xindex+1; x <= cols; x ++) {color c = isblack? Color.black: color.white; if (getChess (x, yindex, c)! = null) {continuaCount ++; } mais quebrar; } if (continuaCount> = 5) {return true; } else ContinueCount = 1; // Continue outra pesquisa verticalmente // Pesquise para cima (int y = yindex-1; y> = 0; y-) {color c = isblack? Color.black: color.white; if (getChess (xindex, y, c)! = null) {continuaCount ++; } mais quebrar; } // Procure para baixo para (int y = yindex+1; y <= linhas; y ++) {color c = isblack? Color.black: color.white; if (getChess (xindex, y, c)! = nulo) continuaCount ++; mais quebrar; } if (continuaCount> = 5) retorna true; else ContinueCount = 1; // Continue pesquise outra situação: obliquamente // Pesquisa nordeste (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) {continuaCount ++; } mais quebrar; } // Southwest Search for (int x = xindex-1, y = yindex+1; x> = 0 && y <= linhas; x-, y ++) {color c = isblack? Color.black: color.white; if (getChess (x, y, c)! = null) {continuaCount ++; } mais quebrar; } if (continuaCount> = 5) retorna true; else ContinueCount = 1; // Continue pesquise em outra situação: oblíquo // Northwest Search por (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)! = nulo) continuaCount ++; mais quebrar; } // Southeast Procure por (int x = xindex+1, y = yindex+1; x <= cols && y <= linhas; x ++, y ++) {color c = isblack? Color.black: color.white; if (getChess (x, y, c)! = nulo) continuaCount ++; mais quebrar; } if (continuaCount> = 5) retorna true; else ContinueCount = 1; retornar falso; } ponto privado getchess (int xindex, int yindex, cor cor) {for (ponto p: chesslist) {if (p! = null && p.getx () == xindex && p.gety () == yindex && p.getColor () == cor) retorna p; } retornar nulo; } public void rebartGame () {// Limpe as peças de xadrez para (int i = 0; i <chessList.length; i ++) {chessList [i] = null; } // restaurar o valor variável relacionado ao jogo isblack = true; gameover = false; // é o jogo que termina o chessCount = 0; // o número atual de peças de xadrez repaint (); } // Responda ao xadrez public void goback () {if (chesscount == 0) return; ChessList [ChessCount-1] = NULL; ChessCount--; if (ChessCount> 0) {xindex = chessList [ChessCount-1] .getx (); yindex = chesslist [chessCount-1] .gety (); } isblack =! isblack; repintar (); } // dimensão retângulo Public Dimension getPreferredSize () {retorna nova dimensão (margem*2 +grid_span*cols, margem*2 +grid_span*linhas); }} 2. Peças de xadrez
pacote cn.edu.ouc.fiveChess; importar java.awt.color; /*** Classe de xadrez*/Ponto de classe pública {private int x; // X ÍNDICE NO COMPRIMENTO DE CHESS PRIVADO INT Y; // Y ÍNDICE NA PLACA DE CHESSO COLOR PRIVADA CO cor; // Color public static final int diâmetro = 30; // Diâmetro ponto público (int x, int y, cor) {this.x = x; this.y = y; this.color = cor; } public int getx () {// Obtenha o índice de x na placa de xadrez retorna x; } public int gety () {return y; } public color getColor () {// Obtenha a cor da peça de retorno da peça de xadrez; }} 3.
pacote cn.edu.ouc.fiveChess; importar java.awt.event.*; importar java.awt.*; importar javax.swing.*; /* GOJI PROCTAMENTO PRINCIPAL, PROGRAMA*/ Public Class StartChessjFrame estende JFRame {Private Chessboard Wearsboard; barra de ferramentas privada jpanel; Private Jbutton StartButton, BackButton, Exitbutton; Privado Jmenubar Menubar; Sysmenu privado jmenu; Privado Jmenuitem Startmenuitem, Exitmenuitem, Backmenuitem; // reiniciar, sair e arrependir o item de menu public startChessjframe () {Settitle ("Goji independente"); // defina o título de chessboard = new chessboard (); Contêiner contentpane = getContentPane (); contentpane.add (tabuleiro de xadrez); chessboard.setOpaque (true); // crie e adicione menu menubar = new jmenubar (); // Inicialize a barra de menu Sysmenu = new Jmenu ("Sistema"); // Inicialize o menu // Inicialize o item do menu startMenuitem = new Jmenuitem ("reiniciar"); exitmenuitem = new jmenuitem ("exit"); backmenuitem = novo jmenuitem ("arrependimento"); // Adicione três itens de menu ao menu sysmenu.add (startmenuitem); sysmenu.add (exitmenuitem); sysmenu.add (backmenuitem); // inicialize a classe interna myitemListener lis = new myItemListener (); // Registre três menus ao ouvinte do evento this.startMenuitem.addactionListener (LIS); backmenuitem.addactionListener (LIS); exitmenuitem.addactionListener (LIS); Menubar.add (Sysmenu); // Adicione o menu do sistema à barra de menu Setjmenubar (Menubar); // Defina Menubar para Menubar Toolbar = new JPanel (); // instanciar o painel da ferramenta // Três botões Initialize StartButton = novo JButton ("Start Restart"); exitbutton = new jbutton ("exit"); backbutton = new jbutton ("arrependimento"); // layout Os botões do painel da ferramenta com FlowLayout ToolBar.setLayout (new FlowLayout (FlowLayout.Left)); // Adicione três botões à barra de ferramentas do painel da ferramenta.add (startbutton); ToolBar.add (Exitbutton); ToolBar.add (BackButton); // Registre os três botões para ouvir o evento StartButton.addactionListener (LIS); exitbutton.addactionListener (LIS); backbutton.addactionListener (LIS); backbutton.addactionListener (LIS); // Coloque o painel da ferramenta para a interface "sul", ou seja, add (barra de ferramentas, borderlayout.south); Add (ChessBoard); // Adicione o objeto do painel ao formulário // Defina a interface Close Event SetDefaultCloseoperation (jframe.exit_on_close); // SetSize (800.800); pack (); // tamanho adaptativo} classe privada myiTemListener implementa ActionListener {public void ActionPerformed (ActionEvent e) {object obj = e.getSource (); // obtenha a fonte do evento se (obj == startchessjframe.this.startMenuitem || System.out.println ("start"); ChessBoard.restartGame (); } else if (obj == exitmenuitem || obj == exitbutton) system.exit (0); caso contrário, if (obj == backmenuitem || obj == backbutton) {system.out.println ("arrependimento do xadrez ..."); chessboard.goback (); }}} public static void main (string [] args) {startchessjframe f = new startchessjframe (); // crie o quadro principal f.setVisible (true); // mostra o quadro principal}} 3. Resumo
1. Design e implementação de menus?
2. Como desenhar peças de xadrez depois que o mouse clica no tabuleiro de xadrez? Como desenhar uma caixa vermelha para a peça de xadrez que você acabou de configurar?
3. O que é uma estrutura de dados para pontuações de xadrez?
O exposto acima é tudo sobre este artigo, espero que seja útil para todos aprenderem a programação Java.