之前的两篇文章:Java实现两人五子棋游戏(二)画出棋盘;Java实现两人五子棋游戏(三)画出棋子
前面,我们已经画好的棋盘和棋子,接下来,我们要通过鼠标点击屏幕获取落子位置并落子(先不考虑行棋方和胜负判断)。
步骤:
1)捕捉鼠标按下的位置
2)经过坐标变换(由像素位置→0-19的棋盘位置)
3)更新记录棋盘状态的二维数组
4)重新渲染绘制棋盘。
- - - - - - - - - - - - -落子动作代码示例如下- - - - - - - - - - - - - - - -
一个棋子类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_xJava实现两人五子棋游戏(四)落子动作的实现