Este pequeno jogo é o design do curso Java da minha irmã e eu, e também é o primeiro projeto Java que fiz. É adequado para iniciantes. Espero que possa ajudar as crianças que estão perturbadas pelo design do curso Java ~~~
1. O jogo precisa ser implementado
1. Projete o quadro e a interface principal.
2. Use a interface ActionListener para realizar o monitoramento dos eventos do botão.
3. Reinicie a implementação da função.
4. Implementação da função de xadrez.
5. Implementação da função de saída.
6. Definição de pontos de xadrez no tabuleiro de xadrez.
7. Use a interface MouseListener para implementar o monitoramento de eventos e implementar todos os métodos na interface.
8. Quando o mouse se move para o ponto de interseção na placa e não há peças de xadrez no ponto, ele pode se tornar uma pequena forma de mão.
9. Ao clicar no quadro de xadrez, use a instrução IF para determinar se o ponto está no cruzamento e use a instrução foreach e getx () e gety () método na classe de xadrez para atravessar a posição de cada peça de xadrez para determinar se o ponto tem peças de xadrez.
10. Quando estiver determinado que você pode colocar um submarino no ponto clicado, ao desenhar uma peça, use o loop for para atravessar todos os pontos existentes e usar o SetColor da classe Graphics para definir a cor e usar o método de preenchimento da classe gráfica para definir o tamanho da forma.
11. Ao desenhar a peça de xadrez, você deve julgar o vencedor e perder a tempo. Use o índice e o loop para atravessar as instruções da última peça de xadrez. Se houver peças de xadrez na mesma linha reta, com várias peças de xadrez maiores ou iguais a cinco, esse é o representado pela peça de xadrez atual.
12. Quando o vencedor é decidido, as informações correspondentes podem ser exibidas.
2. Implementação de código funcional
2.1 Digite o jogo
public static void main (string [] args) {startchessjframe f = new startchessjframe (); // crie o quadro principal f.setVisible (true); // mostra o quadro principal}2.2 Inicialização, defina algumas quantidades a serem usadas.
tabuleiro de xadrez particular de xadrez; // Painel de luta na barra de ferramentas do painel privado; // Botão privado do painel da barra de ferramentas StartButton; // Defina o botão Iniciar Botão Privado Backbutton; // Defina o botão de arrependimento Private Button Exitbutton; // Defina o botão de saída
2.3 Método de construção da interface (estrutura de jogo)
public startChessjFrame () {Settitle ("Standalone goji"); // Defina o título de xadrez = new ChessBoard (); // Inicialize o objeto do painel, crie e adicione o menu MyItemListener lis = new MyItemListener (); // Inicialize o evento do Button, ouvinte de Button, (); backbutton = new Button ("Responder"); exitbutton = new Button ("Exit"); // Initialize ToolBar.setLayout (new FlowLayout (FlowLayout.Left)); // Use FlowLayout para layout Toolbar.add (Backbutton); ToolBar.add (StartButton); ToolBar.add (exitbutton); // Adicione três botões ao painel da ferramenta StartButton.addactionListener (LIS); backbutton.addactionListener (LIS); exitbutton.addactionListener (LIS); // Registre os três eventos de botão para ouvir o evento Add (barra de ferramentas, borderlayout.south); // layout o painel de ferramentas ao sul da interface, ou seja, interface (hout); tamanho}2.4 Implementação e monitoramento do botão (método de construção interno)
MyItemListener lis = new MyItemListener (); // Inicialize a classe interna do evento de botão. backbutton = new Button ("Responder"); exitbutton = new Button ("Exit"); // Initialize ToolBar.setLayout (new FlowLayout (FlowLayout.left)); // layout the Toolbar.add (backbutton); ToolBar.add (StartButton); ToolBar.add (exitbutton); // Adicione três botões ao painel da ferramenta StartButton.addactionListener (LIS); backbutton.addactionListener (LIS); exitbutton.addactionListener (LIS); // Registre os três eventos de botão para ouvir eventos2.5 Ouvindo eventos de botão
classe privada myiTemListener implementa ActionListener {public void actionPerformed (ActionEvent e) {object obj = e.getSource (); // Obtenha a fonte do evento if (obj == startButton) {System.this.println ("start ..."); // rewrtart // jframe.this inner. } else if (obj == exitbutton) {System.exit (0); // encerre o aplicativo} else if (obj == backbutton) {System.out.println ("Repent Chess ..."); // arrependimento de xadrez.goback (); }}}2.6 Reiniciar a implementação da função do botão
public void rebartGame () {// Limpe as peças de xadrez para (int i = 0; i <chessList.length; i ++) chesslist [i] = null; /*Restaure valores variáveis relacionados ao jogo*/ isback = true; gameover = false; // se o jogo termina o chessCount = 0; // o número de peças de xadrez na placa atual é repaint (); }2.7 Função Implementação do botão de xadrez
public void goback () {if (ChessCount == 0) retornar; ChessList [ChessCount-1] = NULL; ChessCount--; if (ChessCount> 0) {xindex = chessList [ChessCount-1] .getx (); yindex = chesslist [chessCount-1] .gety (); } isback =! isback; repintar (); }2.8 Quando o quadro de xadrez se torna maior ou menor conforme necessário, a janela deve mudar de acordo.
// dimensão: dentro da classe de xadrez retangular, dimensão pública getPreferredSize () {retorna nova dimensão (margem*2+grid_span*cols, margem*2+grid_span*linhas); } pack (); // tamanho adaptativo dentro da classe StartChessboard2.9 Definindo peças de xadrez
importar java.awt.*; Ponto de classe pública {private int x; // X Valor do índice da peça de xadrez na placa de xadrez Private Int Y; // Y ÍNDICE Valor da peça de xadrez na placa de xadrez Color privada cor; // colorir public static int diâmetro = 30; // diâmetro Public Point (int x, int y, cor) {this.x = x; this.y = y; this.color = cor; } // Obtenha x Valor do índice da peça de xadrez na placa de xadrez public int getx () {return x; } // Obtenha o valor do índice y da peça de xadrez no quadro de xadrez public int gety () {return y; } // Obtenha a peça de xadrez colorida color getColor () {return color; }} 3. Implementação de código de peça funcional
3.1 Inicialização, defina algumas quantidades a serem usadas.
public static int margin = 30; // casamento public static int grid_span = 35; // espaçamento de grade public static int linhas = 18; // número de linhas de xadrez linhas públicas estática int cols = 18; // número de slots de manto de xadrez/inarners); Para Black Chess First Gameover = False; // O jogo termina Int ChessCount; // O número de peças de xadrez no quadro de xadrez atual int xindex, yindex; // Índice da peça de xadrez acaba de jogar
3.2 Método de construção do objeto de tabuleiro de xadrez
public Chessboard () {Sensentbackground (color.light_gray); // Defina a cor de fundo para acrescedores cinza addMouseListener (this); // Adicione o ouvinte de evento AddMouSousemOtionListener (novo MouseMotionListener () {// INTERNO INTERNO INTERNO @Override Public Void MouseMoved (Mousevent E) { x1 = (e.getx ()-margem+grid_span/2)/grid_span; se (x1 <0 || x1> linhas || y1 <0 || y1> cols || gameover || findchess (x1, y1)) {// o jogo terminou e não pode ser descartado; forma} else {setCursor (new Cursor (cursor.hand_cursor)); // define como forma de mão}} @Override public void mousedragged (mouseevent e) {}}); }3.3 Configure o ouvinte do mouse e diminua a mão (dentro do método de construção)
addmousememotionListener (novo mouseMotionListener () {// classe interna anônima @Override public void mouseMoved (mouseevent e) {int x1 = (e.getx ()-margin+grid_span/2)/grid_span; int y1 = (e.getsp ()-margin+grid_span/2)/grid_span; int y1 = (e.getsp ()-margin+grid_span/2) O mouse clica em um índice de grade se (x1 <0 || x1> linhas || y1 <0 || y1> cols || gameover || findChess (x1, y1)) {// O jogo acabou e não pode ser lançado; Cursor (cursor.default_cursor)); // Defina como padrão padrão} else {SetCursor (new Cursor (cursor.hand_cursor)); // definido como forma de mão}} @Override public void mousedragged (mouseEvent e) {}});3.4 Evento de pressão do mouse ao clicar no quadro de xadrez
public void MousePressed (mouseevent e) {// if (gameover) é chamado quando o botão do mouse é pressionado no componente // o jogo terminou e não pode ser devolvido; String colorname = isback? "Preto": "xadrez branco"; xindex = (e.getx ()-margem+grid_span/2)/grid_span; yindex = (e.gety ()-margem+grid_span/2)/grid_span; // Converta a posição de coordenadas do mouse clica em um índice de grade se (xindex <0 || xindex> linhas fora || yindex <0 || yindex> cols) // as queda da peça de xadrez para fora do xadrez e não podem ser retornadas; se (findChess (xindex, yindex)) // a peça de xadrez já existe na posição x, y, para que você não possa ser devolvido; Ponto ch = novo ponto (xindex, yindex, isback? Color.black: color.white); ChessList [ChessCount ++] = CH; Repaint (); // notifique o sistema para repintar se (iswin ()) {string msg = string.format ("Parabéns, %s vitória ~", colorname); JoptionPane.showMessagedialog (isto, msg); gameover = true; } else if (chesscount == (cols+1)*(linhas+1)) {string msg = string.format ("tambor de xadrez é muito bom, ótimo ~"); JoptionPane.showMessagedialog (isto, msg); gameover = true; } isback =! isback; }3.5 Desenhe um tabuleiro de xadrez, peças de xadrez e molduras vermelhas
public void PaintComponent (gráficos g) {super.paintComponent (g); // desenha o tabuleiro de xadrez para (int i = 0; i <= linhas; i ++) {// desenha linha horizontal g.drawline (margem, margem+i*grid_span, margin+cols*grid_span; } para (int i = 0; i <= cols; i ++) {// desenhe linha reta g.drawline (margem+i*grid_span, margem, margem+i*grid_span, margem+linhas*grid_span); }/*Desenhe peças de xadrez*/para (int i = 0; i <chessCount; i ++) {int xpos = chessList [i] .getx ()*grid_span+margem; // as coordenadas x grifs de cruzamento de grade; g.setColor (ChessList [i] .getColor ()); // Defina a cor. if (i == ChessCount-1) {G.SetColor (color.red); // Marque a última peça como Red G.Drawrect (xpos-Point.diameter/2, ypos-ponto.diameter/2, Point.Diameter, Point.Diameter); }}3.6 Juiz vencedor ou perda
/*Juiz Qual lado vence*/privado booleano iswin () {int continueCount = 1; // o número de peças de xadrez contínuas para (int x = xindex-1; x> = 0; x-) {// Procure por cor c = isback? Color.black: cor.white; if (getChess (x, yindex, c)! = null) {continuaCount ++; } mais quebrar; } para (int x = xindex+1; x <= linhas; x ++) {// Procure por cor c = isback? Color.black: cor.white; if (getChess (x, yindex, c)! = null) {continuaCount ++; } mais quebrar; } if (continuaCount> = 5) {// julgar o número de registros é maior ou igual a cinco, o que significa que este lado ganha retornar true; } else ContinueCount = 1; // for (int y = yindex-1; y> = 0; y-) {// Procure verticalmente para colorir c = isback? Color.black: cor.white; if (getChess (xindex, y, c)! = null) {continuaCount ++; } mais quebrar; } para (int y = yindex+1; y <= linhas; y ++) {// olha para baixo na direção vertical cor c = isback? Color.black: cor.white; if (getChess (xindex, y, c)! = null) {continuaCount ++; } mais quebrar; } if (continuaCount> = 5) {// julgar o número de registros é maior ou igual a cinco, o que significa que este lado ganha retornar true; } else ContinueCount = 1; // for (int x = xindex+1, y = yindex-1; y> = 0 && x <= cols; x ++, y-) {// Olhe para a cor inferior direita C = isback? Color.black: cor.white; if (getChess (x, y, c)! = null) {continuaCount ++; } mais quebrar; } para (int x = xindex-1, y = yindex+1; y <= linhas && x> = 0; x-, y ++) {// Procure color c = isback? Color.black: cor.white; if (getChess (x, y, c)! = null) {continuaCount ++; } mais quebrar; } if (continuaCount> = 5) {// julga o número de registros é maior ou igual a cinco, o que significa que esse lado vence. Retornar true; } else ContinueCount = 1; // for (int x = xindex-1, y = yindex-1; y> = 0 && x> = 0; x-, y-) {// Procure por cor c = isback? Color.black: cor.white; if (getChess (x, y, c)! = null) {continuaCount ++; } mais quebrar; } para (int x = xindex+1, y = yindex+1; y <= linhas && x <= cols; x ++, y ++) {// Procure color c = isback? Color.black: cor.white; if (getChess (x, y, c)! = null) {continuaCount ++; } mais quebrar; } if (continuaCount> = 5) {// julgar o número de registros é maior ou igual a cinco, o que significa que este lado ganha retornar true; } else ContinueCount = 1; retornar falso; }3.7 A caixa de mensagem correspondente aparece (dentro da função de imprensa do mouse)
if (iswin ()) {string msg = string.format ("Parabéns, %s vitória ~", colorname); JoptionPane.showMessagedialog (isto, msg); gameover = true; } else if (chesscount == (cols+1)*(linhas+1)) // rastrear {string msg = string.format ("tambor de xadrez é muito bom, ótimo ~"); JoptionPane.showMessagedialog (isto, msg); gameover = true; }3.8 Uma função usada acima para determinar se há peças de xadrez em um determinado ponto
private boolean findChess (int x, int y) {for (ponto c: chesslist) {if (c! = null && c.getx () == x && c.gety () == y) retorna true; } retornar false; }3.9 Como esta classe de tabuleiro de xadrez implementa a interface de escuta do mouse monselistener, todos os métodos na interface precisam ser reescritas. Os outros métodos são os seguintes
@Override public void mouseClicked(MouseEvent e) {//Called when the mouse button is clicked (pressed and released) on the component} @Override public void mouseReleased(MouseEvent e) {///Called when the mouse button is released on the component} @Override public void mouseEntered(MouseEvent e) {//Called when the mouse enters the component} @Override public void mouseexited (mouseevent e) {// chamado quando o mouse deixa o componente}4. Resultados da operação
V. Resumo do código
O jogo tem três classes no total, uma é a interface startchessjframe, uma é o quadro de xadrez de xadrez e o outro é o ponto de classe do sujeito de xadrez
5.1STARTCHESSJFRAME
pacote chess.lcc.com; importar javax.swing.*; importar java.awt.event.*; importar java.awt.*; /** A estrutura principal de Gozi, a classe de inicialização do programa*/public classe startchessjframe estende Jframe {placar de xadrez privado; // Fight Painel Painel Privado Barra de ferramentas; // Painel de ferramentas Botão Private StartButton; // defina o botão Privado Button Button; // Definir o botão privado (//////2 Botão de botão (//Toxt Button) SATBTON (// Set o botão Ext Private Button; Goji "); // Defina o título de xadrez = new ChessBoard (); // Inicialize o objeto do painel, crie e adicione menu MyItemListener lis = new MyItemListener (); // Inicialize o botão ouvinte de evento interno da classe de ferramentas de classe = new Painel (); // Instância da barra de ferramentas StartButton = new (" Restart "); backbutton = new Button ("Responder"); exitbutton = new Button ("Exit"); // Initialize ToolBar.setLayout (new FlowLayout (FlowLayout.Left)); // Use FlowLayout para layout Toolbar.add (Backbutton); ToolBar.add (StartButton); ToolBar.add (exitbutton); // Adicione três botões ao painel da ferramenta StartButton.addactionListener (LIS); backbutton.addactionListener (LIS); exitbutton.addactionListener (LIS); // Registre os três eventos de botão para ouvir para add (barra de ferramentas, borderlayout.south); // layout o painel de ferramentas ao sul da interface, ou seja, add (cambote); // add); tamanho} classe privada myiTemListener implementa ActionListener {public void ActionPerformed (ActionEvent e) {objeto obj = e.getSource (); // obtenha a fonte de evento if (obj == startButton) {System.othis.println ("reestart ..."); // start // jfive.this.This inner inner ("reinicia); } else if (obj == exitbutton) {System.exit (0); // encerre o aplicativo} else if (obj == backbutton) {System.out.println ("Responder xadrez ..."); // Responder Chessboard.goback (); }}} public static void main (string [] args) {startchessjframe f = new startchessjframe (); // crie o quadro principal f.setVisible (true); // mostra o quadro principal}} 5.2 Classe de quadro
pacote chess.lcc.com; importar javax.swing.*; importar java.awt.*; importar java.awt.event.mouselistener; importar java.awt.event.mousemotionListener; importar java.awt.event.mouseevent; /*Classe de quadro-chess-Chess-Chess*/quadro de xadrez da classe pública estende JPanel implementa mouselistener {public static int margin = 30; // casamento public static int grid_span = 35; // espaçamento de grade public static int linhas = 15; // número de linhas de xadrez Point Public static int cols = 15; Ponto [(linhas+1)*(cols+1)]; // inicialize cada elemento da matriz em nulo booleano isback = true; // o início padrão é o xadrez preto primeiro jogo = false; // é o jogo encerrado int bescount; // o número de peças de xadrez no quadro de xadrez atual, yindex; setbackground (color.light_gray); // Defina a cor do fundo como Amarelo AddmouseListener (this); // Adicione o ouvinte de evento AddMousEmotionListener (new MouseMotionListener () {// Classe Anonymous Internal @Override Void MouseMoved (MouseventETevent E) {int X1 = (E.X) y1 = (e.gety ()-margem+grid_span/2)/grid_span; // Converta a posição de coordenada do mouse clica em um índice de grade se (x1 <0 || x1> linhas || y1 <0 || y1> cols || games e findchess (x1, y1); Dropado; }/*Desenhe*/public void PaintComponent (gráficos g) {super.paintcomponent (g); // desenhe o tabuleiro de xadrez para (int i = 0; i <= linhas; i ++) {// desenhe a linha horizontal g.drawline (margem+i*grid_span, margin+cols*grades* } para (int i = 0; i <= cols; i ++) {// desenhe uma linha reta G.drawline (margem+i*grid_span, margem, margem+i*grid_span, margem+linhas*grid_span); }/*Desenhe peças de xadrez*/para (int i = 0; i <chessCount; i ++) {int xpos = chessList [i] .getx ()*grid_span+margem; // x coordenados de cruzamento de grade; g.setColor (ChessList [i] .getColor ()); // Defina a cor. if (i == ChessCount-1) {G.SetColor (color.red); // Inscreva a última peça como Red G.DrawRect (xpos-Point.diameter/2, ypos-point.diameter/2, Point.Diameter, Point.Diameter); }}} @Override public void mousePressed (mouseevent e) {// if (gameover) é chamado quando o botão do mouse é pressionado no componente // o jogo terminou, você não pode devolvê -lo; String colorname = isback? "Preto": "xadrez branco"; xindex = (e.getx ()-margem+grid_span/2)/grid_span; yindex = (e.gety ()-margem+grid_span/2)/grid_span; // Converta a posição de coordenadas do mouse clica em um índice de grade se (xindex <0 || xindex> linhas fora || yindex <0 || yindex> cols) // as queda da peça de xadrez para fora do xadrez e não podem ser retornadas; se (findChess (xindex, yindex)) // a peça de xadrez já existe na posição x, y, para que você não possa ser devolvido; Ponto ch = novo ponto (xindex, yindex, isback? Color.black: color.white); ChessList [ChessCount ++] = CH; Repaint (); // notifique o sistema para repintar se (iswin ()) {string msg = string.format ("Parabéns, %s vitória ~", colorname); JoptionPane.showMessagedialog (isto, msg); gameover = true; } else if (chesscount == (cols+1)*(linhas+1)) {string msg = string.format ("tambor de xadrez é muito bom, ótimo ~"); JoptionPane.showMessagedialog (isto, msg); gameover = true; } isback =! isback; } @Override public void mouseclicked (mouseevent e) {// chamado quando o botão do mouse é clicado (pressionado e liberado) no componente} @Override public void mouseLearted (mouseevent e) {///////terride o mouse é lançado no componente} @override strids -menters componente} @Override public void mouseexited (mouseevent e) {// chamado quando o mouse deixa o componente} private boolean findChess (int x, int y) {for (ponto c: chesslist) {if (c! } retornar false; }/*JUGE QUE WIN WIN*/Private Boolean Iswin () {int ContinueCount = 1; // O número de peças de xadrez contínuo para (int x = xindex-1; x> = 0; x-) {// Procure por cor C = isback? Color.black: cor.white; if (getChess (x, yindex, c)! = null) {continuaCount ++; } mais quebrar; } para (int x = xindex+1; x <= linhas; x ++) {// Procure por cor c = isback? Color.black: cor.white; if (getChess (x, yindex, c)! = null) {continuaCount ++; } mais quebrar; } if (continuaCount> = 5) {// julgar o número de registros é maior ou igual a cinco, o que significa que este lado ganha retornar true; } else ContinueCount = 1; // for (int y = yindex-1; y> = 0; y-) {// Procure verticalmente para colorir c = isback? Color.black: cor.white; if (getChess (xindex, y, c)! = null) {continuaCount ++; } mais quebrar; } para (int y = yindex+1; y <= linhas; y ++) {// olha para baixo na direção vertical cor c = isback? Color.black: cor.white; if (getChess (xindex, y, c)! = null) {continuaCount ++; } mais quebrar; } if (continuaCount> = 5) {// julgar o número de registros é maior ou igual a cinco, o que significa que este lado ganha retornar true; } else ContinueCount = 1; // for (int x = xindex+1, y = yindex-1; y> = 0 && x <= cols; x ++, y-) {// Olhe para a cor inferior direita C = isback? Color.black: cor.white; if (getChess (x, y, c)! = null) {continuaCount ++; } mais quebrar; } para (int x = xindex-1, y = yindex+1; y <= linhas && x> = 0; x-, y ++) {// Procure color c = isback? Color.black: cor.white; if (getChess (x, y, c)! = null) {continuaCount ++; } mais quebrar; } if (continuaCount> = 5) {// julga o número de registros é maior ou igual a cinco, o que significa que esse lado vence. Retornar true; } else ContinueCount = 1; // for (int x = xindex-1, y = yindex-1; y> = 0 && x> = 0; x-, y-) {// Procure por cor c = isback? Color.black: cor.white; if (getChess (x, y, c)! = null) {continuaCount ++; } mais quebrar; } para (int x = xindex+1, y = yindex+1; y <= linhas && x <= cols; x ++, y ++) {// Procure color c = isback? Color.black: cor.white; if (getChess (x, y, c)! = null) {continuaCount ++; } mais quebrar; } if (continuaCount> = 5) {// julga que o número de registros é maior ou igual a cinco, significa que este lado ganha retornar true; } else ContinueCount = 1; retornar falso; } ponto privado getchess (int xindex, int yindex, cor cor) {for (ponto c: chesslist) {if (c! = null && c.getx () == xindex && c.gety () == yindex && c.getColor () == cor) retorna c; } retornar nulo; } public void rebartGame () {// limpe a peça de xadrez para (int i = 0; i <chessList.length; i ++) chesslist [i] = null; /*Restaure o valor variável relacionado ao jogo*/ isback = true; gameover = false; // se o jogo termina o chessCount = 0; // o número de peças de xadrez na placa atual é repaint (); } 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 (); } isback =! isback; repintar (); } // dimensão: Retângulo Public Dimension getPreferredSize () {retorna nova dimensão (margem*2+grid_span*cols, margem*2+grid_span*linhas); }} 5.3Point Class
pacote chess.lcc.com; importar java.awt.*; Ponto de classe pública {private int x; // X Valor do índice da peça de xadrez na placa de xadrez Private Int Y; // Y ÍNDICE Valor da peça de xadrez na placa de xadrez Color privada cor; // colorir public static int diâmetro = 30; // diâmetro Public Point (int x, int y, cor) {this.x = x; this.y = y; this.color = cor; } // Obtenha x Valor do índice da peça de xadrez na placa de xadrez public int getx () {return x; } // Obtenha o valor do índice y da peça de xadrez no quadro de xadrez public int gety () {return y; } // Obtenha a peça de xadrez colorida color getColor () {return color; }}O exposto acima é todo o conteúdo deste artigo. Espero que seja útil para o aprendizado de todos e espero que todos apoiem mais o wulin.com.