//下过的棋子通过二维数组保存
int[][] allChess = new int[19][19];//用于保存棋盘上每个交点的状态
//为0表示这个点无棋子,1表示黑子,2表示白子
//标示当前是黑棋还是白棋
boolean isBlack = true;
public void mousePressed(MouseEvent e){
/*System.out.print("X:"+e.getX());
System.out.print("Y:"+e.getY());//上一讲中用于取得坐标*/
int x = e.getX();
int y = e.getY();
//判断点击位置是否在棋盘内
if(x>=10 && x<=370 && y>=70 && y<=430){//10 370 70 430分别为棋盘边界
//判断距离哪个交叉点最近,得到该点坐标并保存到数组中
x = (x-10)/20 ;
y = (y-70)/20 ;
if(allChess[x][y]==0){
//判断是否可下
if(isBlack == true){
allChess[x][y] = 1;
isBlack = false;
}else{
allChess[x][y] = 2;
isBlack = true;
}
}else{
JOptionPane.showMessageDialog(this,"当前位置已经有棋子,请重新下棋!");
}
this.repaint();//表示重新执行一次paint()
}
paint()下方添加
//绘制棋子
for(int i = 0;i<19;i++){
for(int j =0;j<19;j++){
if(allChess[i][j] == 1){
//黑子
int tempX = i*20+10;//10为左上点横坐标
int tempY = j*20+70;
g.fillOval(tempX-7,tempY-7,14,14);
}
if(allChess[i][j] == 2){
//白子
int tempX = i*20+10;//10为左上点横坐标
int tempY = j*20+70;
g.setColor(Color.WHITE);
g.fillOval(tempX-7,tempY-7,14,14);
g.setColor(Color.BLACK);
g.drawOval(tempX-7,tempY-7,14,14);
}
}
}