小编给大家分享一下java GUI实现五子棋游戏的示例分析,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!
具体内容如下
引用包
//{Cynthia Zhang} import java.awt.*; import java.awt.event.*; import javax.swing.*; import javax.swing.border.LineBorder; import javax.swing.JOptionPane; import javax.swing.ImageIcon; import java.awt.Image; import com.sun.image.codec.jpeg.*;
前期预设
//extends JApplet { // Indicate which player has a turn, initially it is the X player private char whoseTurn = 'X'; final int SIZE = 15; static boolean ISOVER = false; // Create and initialize cells private final Cell[][] cell = new Cell[SIZE][SIZE]; // Create and initialize a status label private final JLabel jlblStatus = new JLabel("X's turn to play",JLabel.CENTER);
设置背景板
// Initialize UI @Override public void init() { // Panel p to hold cells JPanel p = new JPanel(); p.setLayout(new GridLayout(SIZE, SIZE, 0, 0)); for (int i = 0; i < SIZE; i++) { for (int j = 0; j < SIZE; j++) { Cell ce = new Cell(); ce.setBackground(new Color(150,88,42)); // 背景色绝美! p.add(cell[i][j] = ce); } } // Set line borders on the cells panel and the status label p.setBackground(new Color(143,105,94)); // 背景色绝美! jlblStatus.setBorder(new LineBorder(new Color(255,255,255), 2)); // 白框框加宽! // Place the panel and the label to the applet this.getContentPane().add(p, BorderLayout.CENTER); this.getContentPane().add(jlblStatus, BorderLayout.SOUTH); }
主要框架段落
// This main method enables the applet to run as an application public static void main(String[] args) { // Create a frame JFrame frame = new JFrame("Tic Tac Toe"); // Create an instance of the applet Homework8 applet = new Homework8(); // Add the applet instance to the frame frame.getContentPane().add(applet, BorderLayout.CENTER); // Invoke init() and start() applet.init(); applet.start(); // Display the frame frame.setSize(600, 600); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.setVisible(true); }
判断是否满了
// Determine if the cells are all occupied public boolean isFull() { for (int i = 0; i < SIZE; i++) { for (int j = 0; j < SIZE; j++) { if (cell[i][j].getToken() == ' ') { return false; } } } return true; }
判断是否赢了
和八皇后有点像,可以考虑那种数组优化四个方向,这里比较懒
// Determine if the player with the specified token wins public boolean isWon(char token) { int winNum = 5; // define the max num for a rule for (int indexX = 0; indexX < SIZE; indexX++) { for (int indexY = 0; indexY < SIZE; indexY++){ // in row check cell[indexX][indexY...indexY+winNum-1] if (indexY+winNum-1<SIZE){ boolean flag=true; for (int y =indexY;y<indexY+winNum;y++) if (cell[indexX][y].getToken() != token){ flag=false; break; } if (flag==true) return true; } // in row check cell[indexX...indexX+winNum-1][indexY] if (indexX+winNum-1<SIZE){ boolean flag=true; for (int x =indexX;x<indexX+winNum;x++) if (cell[x][indexY].getToken() != token){ flag=false; break; } if (flag==true) return true; } // check cell[indexX...indexX+winNum-1][indexY...indexY+winNum-1) if (indexX+winNum-1<SIZE && indexY+winNum-1<SIZE){ boolean flag=true; for (int x =indexX,y=indexY;x<indexX+winNum;x++,y++) if (cell[x][y].getToken() != token){ flag=false; break; } if (flag==true) return true; } // check cell[indexX...indexX+winNum-1][indexY...indexY+winNum-1) if (indexX+winNum-1<SIZE && indexY-winNum+1>=0){ boolean flag=true; for (int x =indexX,y=indexY;x<indexX+winNum;x++,y--) if (cell[x][y].getToken() != token){ flag=false; break; } if (flag==true) return true; } } } return false; }
设置棋子
// An inner class for a cell public class Cell extends JPanel implements MouseListener { // Token used for this cell private char token = ' '; public Cell() { setBorder(new LineBorder(Color.black, 1)); // Set cell's border addMouseListener(this); // Register listener } // The getter method for token public char getToken() { return token; } // The setter method for token public void setToken(char c) { token = c; repaint(); }
导入图片
// Paint the cell @Override public void paintComponent(Graphics g) { if (token == 'X') { ImageIcon icon = new ImageIcon("C:\\Users\\Lenovo\\Desktop\\Black.png"); Image image = icon.getImage(); g.drawImage(image,0,0,35,35,this); }else if (token=='O'){ ImageIcon icon = new ImageIcon("C:\\Users\\Lenovo\\Desktop\\White.png"); Image image = icon.getImage(); g.drawImage(image,0,0,35,35,this); } super.paintComponents(g); }
游戏结束的锁定与弹窗
// Handle mouse click on a cell @Override public void mouseClicked(MouseEvent e) { if (ISOVER) return; // if game is over, any issue should be forbidden int response=-1; if (token == ' ') // If cell is not occupied { if (whoseTurn == 'X') // If it is the X player's turn { setToken('X'); // Set token in the cell whoseTurn = 'O'; // Change the turn jlblStatus.setText("The White's Turn"); // Display status if (isWon('X')) { jlblStatus.setText("The Black Won! The Game Is Over!"); response = JOptionPane.showConfirmDialog(null, "The Black Won! The Game Is Over!\n" +"Do you want to quit?","提示",JOptionPane.YES_NO_OPTION); ISOVER = true; if (response == 0) System.exit(0); // choose "Yes" than quit; } } else if (whoseTurn == 'O') // If it is the O player's turn { setToken('O'); // Set token in the cell whoseTurn = 'X'; // Change the turn jlblStatus.setText("The Black's Turn"); // Display status if (isWon('O')) { jlblStatus.setText("The White Won! The Game Is Over!"); response = JOptionPane.showConfirmDialog(null, "The White Won! The Game Is Over!\n" +"Do you want to quit?","提示",JOptionPane.YES_NO_OPTION); ISOVER = true; if (response == 0) System.exit(0); // choose "Yes" than quit; } } if (isFull()) { jlblStatus.setText("Plain Game! The Game Is Over!"); response = JOptionPane.showConfirmDialog(null, "Plain Game! The Game Is Over!\n" +"Do you want to quit?","提示",JOptionPane.YES_NO_OPTION); ISOVER = true; if (response == 0) System.exit(0); // choose "Yes" than quit; } } }
其他棋子信息
@Override public void mousePressed(MouseEvent e) { // TODO: implement this java.awt.event.MouseListener method; } @Override public void mouseReleased(MouseEvent e) { // TODO: implement this java.awt.event.MouseListener method; } @Override public void mouseEntered(MouseEvent e) { // TODO: implement this java.awt.event.MouseListener method; } @Override public void mouseExited(MouseEvent e) { // TODO: implement this java.awt.event.MouseListener method; } } }
图片显示
1. 简单,只需理解基本的概念,就可以编写适合于各种情况的应用程序;2. 面向对象;3. 分布性,Java是面向网络的语言;4. 鲁棒性,java提供自动垃圾收集来进行内存管理,防止程序员在管理内存时容易产生的错误。;5. 安全性,用于网络、分布环境下的Java必须防止病毒的入侵。6. 体系结构中立,只要安装了Java运行时系统,就可在任意处理器上运行。7. 可移植性,Java可以方便地移植到网络上的不同机器。8.解释执行,Java解释器直接对Java字节码进行解释执行。
看完了这篇文章,相信你对“java GUI实现五子棋游戏的示例分析”有了一定的了解,如果想了解更多相关知识,欢迎关注亿速云行业资讯频道,感谢各位的阅读!
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。