Java实现两人五子棋游戏(四)落子动作的实现

  

之前的两篇文章:Java实现两人五子棋游戏(二)画出棋盘;Java实现两人五子棋游戏(三)画出棋子

  

癑ava实现两人五子棋游戏(四)落子动作的实现"

  

前面,我们已经画好的棋盘和棋子,接下来,我们要通过鼠标点击屏幕获取落子位置并落子(先不考虑行棋方和胜负判断)。

  

步骤:   

1)捕捉鼠标按下的位置

  

2)经过坐标变换(由像素位置→0-19的棋盘位置)

  

3)更新记录棋盘状态的二维数组

  

4)重新渲染绘制棋盘。

  

- - - - - - - - - - - - -落子动作代码示例如下- - - - - - - - - - - - - - - -

  

癑ava实现两人五子棋游戏(四)落子动作的实现"

  

一个棋子类Chessman.java

        包xchen.test.simpleGobang;      公开课棋子{   私人int颜色;//一只白,0代表黑   私人布尔=false;      公共棋子(int颜色,布尔){   this.color=颜色;   this.placed=放置;   }      公共布尔getPlaced () {   返回放置;   }      公共空间setPlaced(布尔){   这一点。放置=放置;   }      公共int色鬼(){   返回颜色;   }      公共空间改变颜色(int颜色){   这一点。颜色=颜色;   }   }      之前      

DrawChessBoard。java
  

        包xchen.test.simpleGobang;      进口java.awt.Graphics;   java . awt . graphics2d进口;   进口java.awt.RadialGradientPaint;   进口java.awt.Image;   进口java.awt.Toolkit;   进口java.awt.event.MouseEvent;   进口java.awt.event.MouseListener;   进口java.awt.Color;   进口javax.swing.JPanel;         公共类DrawChessBoard JPanel延伸实现MouseListener {   最终的静态int黑=0;   最终的静态int白色=1;   公共int chessColor=黑色;   int chessman_width=30;      公众形象boardImg;   最后一个私人int行=19;   棋子[][]chessStatus=new棋子(行数+ 1)(行数+ 1);      公共DrawChessBoard () {   boardImg=Toolkit.getDefaultToolkit () .getImage (“res/可拉的/chessboard2.png”);   如果(boardImg==null)   System.err。println (“png不存在”);      addMouseListener(这个);   }   @Override   保护无效paintComponent(图形g) {//TODO自动生成方法存根   System.out.println(“画! !”);   super.paintComponent (g);      int imgWidth=boardImg.getHeight(这个);   int imgHeight=boardImg.getWidth(这个);   int FWidth=getWidth ();   int FHeight=获得();      int x=(FWidth-imgWidth)/2;   int y=(FHeight-imgHeight)/2;      int span_x=imgWidth/行;   int span_y=imgHeight/行;      g。drawImage (boardImg, x, y, null);//画横线   for (int i=0; i<行;我+ +)   {   g。画直线(x, y + i * span_y FWidth-x, y + i * span_y);   }//画竖线   for (int i=0; i<行;我+ +)   {   g。画直线(x + i * span_x y、x +我* span_x FHeight-y);   }//画棋子   (int i=0; i<行+ 1,我+ +)   {   (int j=0; j<行+ 1;j + +)   {   如果(chessStatus[我][j] !=null&, chessStatus[我][j] .getPlaced ()==true)   {   系统。println(“画棋子”+我+ " " + j);   int pos_x=x + i * span_x;   int pos_y=y + j * span_y;   浮动radius_b=40;   浮动radius_w=80;   浮动[]分数=new浮动[]{0 f, f 1};   java.awt。颜色[]colors_b=new java.awt.Color [] {Color.BLACK, Color.WHITE};   []colors_w=new颜色[]{Color.WHITE, Color.BLACK};   RadialGradientPaint漆;   如果(chessStatus[我][j] .getColor ()==1)   {   系统。println(“画白色象棋”);   油漆=new RadialGradientPaint (pos_x-chessman_width f/2, pos_y-chessman_width f/2, radius_w * 2,分数,colors_w);   其他}{   系统。println(“画黑象棋”);   油漆=new RadialGradientPaint (pos_x-chessman_width f/2, pos_y-chessman_width f/2, radius_b * 2,分数,colors_b);   }   ((Graphics2D) g) .setPaint(油漆);      ((Graphics2D) g) .fillOval (pos_x-chessman_width/2, pos_y-chessman_width/2 chessman_width chessman_width);   }   }   }   }      @Override//当用户按下鼠标按钮时发生   公共空间mousePressed (MouseEvent e) {   int point_x=e.getX ();   int point_y=e.getY ();      int imgWidth=boardImg.getHeight(这个);   int imgHeight=boardImg.getWidth(这个);   int FWidth=getWidth ();   int FHeight=获得();      int x=(FWidth-imgWidth)/2;   int y=(FHeight-imgHeight)/2;      int span_x=imgWidth/行;   int span_y=imgHeight/行;      System.out.println(“媒体”);   int status_x=0;   int status_y=0;   如果(point_x>=x,,point_x

Java实现两人五子棋游戏(四)落子动作的实现