Draw chessboard interface

From , 5 Years ago, written in Java, viewed 72 times.
URL https://pastebin.vip/view/297fa777
  1. import java.awt.*;
  2. import javax.swing.*;
  3. import java.awt.event.*;
  4. import java.awt.image.*;
  5. import javax.imageio.*;
  6. import java.io.*;
  7. /**
  8.  * Description:
  9.  * <br/>网站: <a href="http://www.crazyit.org">疯狂Java联盟</a>
  10.  * <br/>Copyright (C), 2001-2016, Yeeku.H.Lee
  11.  * <br/>This program is protected by copyright laws.
  12.  * <br/>Program Name:
  13.  * <br/>Date:
  14.  * @author Yeeku.H.Lee kongyeeku@163.com
  15.  * @version 1.0
  16.  */
  17. public class Gobang
  18. {
  19.         // 下面三个位图分别代表棋盘、黑子、白子
  20.         BufferedImage table;
  21.         BufferedImage black;
  22.         BufferedImage white;
  23.         // 当鼠标移动时候的选择框
  24.         BufferedImage selected;
  25.         // 定义棋盘的大小
  26.         private static int BOARD_SIZE = 15;
  27.         // 定义棋盘宽、高多少个像素
  28.         private final int TABLE_WIDTH = 535;
  29.         private final int TABLE_HETGHT = 536;
  30.         // 定义棋盘坐标的像素值和棋盘数组之间的比率。
  31.         private final int RATE = TABLE_WIDTH / BOARD_SIZE;
  32.         // 定义棋盘坐标的像素值和棋盘数组之间的偏移距。
  33.         private final int X_OFFSET = 5;
  34.         private final int Y_OFFSET = 6;
  35.         // 定义一个二维数组来充当棋盘
  36.         private String[][] board = new String[BOARD_SIZE][BOARD_SIZE];
  37.         // 五子棋游戏的窗口
  38.         JFrame f = new JFrame("五子棋游戏");
  39.         // 五子棋游戏棋盘对应的Canvas组件
  40.         ChessBoard chessBoard = new ChessBoard();
  41.         // 当前选中点的坐标
  42.         private int selectedX = -1;
  43.         private int selectedY = -1;
  44.         public void init()throws Exception
  45.         {
  46.                 table = ImageIO.read(new File("image/board.jpg"));
  47.                 black = ImageIO.read(new File("image/black.gif"));
  48.                 white = ImageIO.read(new File("image/white.gif"));
  49.                 selected = ImageIO.read(new File("image/selected.gif"));
  50.                 // 把每个元素赋为"╋","╋"代表没有棋子
  51.                 for (int i = 0 ; i < BOARD_SIZE ; i++)
  52.                 {
  53.                         for ( int j = 0 ; j < BOARD_SIZE ; j++)
  54.                         {
  55.                                 board[i][j] = "╋";
  56.                         }
  57.                 }
  58.                 chessBoard.setPreferredSize(new Dimension(
  59.                         TABLE_WIDTH , TABLE_HETGHT));
  60.                 chessBoard.addMouseListener(new MouseAdapter()
  61.                 {
  62.                         public void mouseClicked(MouseEvent e)
  63.                         {
  64.                                 // 将用户鼠标事件的坐标转换成棋子数组的坐标。
  65.                                 int xPos = (int)((e.getX() - X_OFFSET) / RATE);
  66.                                 int yPos = (int)((e.getY() - Y_OFFSET ) / RATE);
  67.                                 board[xPos][yPos] = "●";
  68.                                 /*
  69.                                 电脑随机生成两个整数,作为电脑下棋的坐标,赋给board数组。
  70.                                 还涉及:
  71.                                 1.如果下棋的点已经有棋子,不能重复下棋。
  72.                                 2.每次下棋后,需要扫描谁赢了
  73.                                 */
  74.                                 chessBoard.repaint();
  75.                         }
  76.                         // 当鼠标退出棋盘区后,复位选中点坐标
  77.                         public void mouseExited(MouseEvent e)
  78.                         {
  79.                                 selectedX = -1;
  80.                                 selectedY = -1;
  81.                                 chessBoard.repaint();
  82.                         }
  83.                 });
  84.                 chessBoard.addMouseMotionListener(new MouseMotionAdapter()
  85.                 {
  86.                         // 当鼠标移动时,改变选中点的坐标
  87.                         public void mouseMoved(MouseEvent e)
  88.                         {
  89.                                 selectedX = (e.getX() - X_OFFSET) / RATE;
  90.                                 selectedY = (e.getY() - Y_OFFSET) / RATE;
  91.                                 chessBoard.repaint();
  92.                         }
  93.                 });
  94.                 f.add(chessBoard);
  95.                 f.pack();
  96.                 f.setVisible(true);
  97.         }
  98.         public static void main(String[] args)throws Exception
  99.         {
  100.                 Gobang gb = new Gobang();
  101.                 gb.init();
  102.         }
  103.         class ChessBoard extends JPanel
  104.         {
  105.                 // 重写JPanel的paint方法,实现绘画
  106.                 public void paint(Graphics g)
  107.                 {
  108.                         // 将绘制五子棋棋盘
  109.                         g.drawImage(table , 0 , 0 , null);
  110.                         // 绘制选中点的红框
  111.                         if (selectedX >= 0 && selectedY >= 0)
  112.                                 g.drawImage(selected , selectedX * RATE + X_OFFSET ,
  113.                         selectedY * RATE + Y_OFFSET, null);
  114.                         // 遍历数组,绘制棋子。
  115.                         for (int i = 0 ; i < BOARD_SIZE ; i++)
  116.                         {
  117.                                 for ( int j = 0 ; j < BOARD_SIZE ; j++)
  118.                                 {
  119.                                         // 绘制黑棋
  120.                                         if (board[i][j].equals("●"))
  121.                                         {
  122.                                                 g.drawImage(black , i * RATE + X_OFFSET
  123.                                                         , j * RATE + Y_OFFSET, null);
  124.                                         }
  125.                                         // 绘制白棋
  126.                                         if (board[i][j].equals("○"))
  127.                                         {
  128.                                                 g.drawImage(white, i * RATE  + X_OFFSET
  129.                                                         , j * RATE  + Y_OFFSET, null);
  130.                                         }
  131.                                 }
  132.                         }
  133.                 }
  134.         }
  135. }

Reply to "Draw chessboard interface"

Here you can reply to the paste above

captcha

https://burned.cc - Burn After Reading Website