📄 chessboard.java
字号:
//////////////////////////////////////////////////////
//
//ChessPoint.java
//
//Created by Guanyi-Zhao
//////////////////////////////////////////////////////
//Readyme:
// 这是创建棋盘的类
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import java.applet.*;
public class ChessBoard extends JPanel implements MouseListener
{
public ChessPoint ppoint[][]; //棋盘中的点:棋点
public int unitWidth,unitHeight; //棋盘单位格的宽和高
int xx,yy; //棋盘的行和列
int x,y; //记录鼠标的位置
IsWon whiteWon=new IsWon(15); //记录白方是否获胜
IsWon blackWon=new IsWon(15); //记录黑方是否获胜
public boolean widthPlay=false,blackPlay=true; //控制走棋顺序的变量
//创建对弈棋盘
public ChessBoard(int w,int h,int r,int c)
{
setLayout(null);
addMouseListener(this);
setBackground(Color.orange); //设置棋盘的背景色为桔黄色
Color bc=getBackground(); //棋子的背景色和棋盘一致
unitWidth=w;
unitHeight=h;
xx=r;
yy=c;
ppoint=new ChessPoint[r+1][c+1];
//棋盘的左上角的点是point[1][1],
//第一行的点是point[1][1],point[2][1],point[3][1]...point[xx][1],
//右下角的点是point[xx][yy].
int i=1;
for(i=1;i<=r;i++)
{
int j=1;
for(j=1;j<=c;j++)
{
ppoint[i][j]=new ChessPoint(i*unitWidth,j*unitHeight,false);
}
}
}
//绘制棋盘
public void paintComponent(Graphics g)
{
super.paintComponent(g);
int j=1; //画棋盘的横格线
for(j=1;j<=yy;j++)
{
g.drawLine(ppoint[1][j].x,ppoint[1][j].y,ppoint[xx][j].x,ppoint[xx][j].y);
}
int i=1; //画棋盘的竖格线
for(i=1;i<=xx;i++)
{
g.drawLine(ppoint[i][1].x,ppoint[i][1].y,ppoint[i][yy].x,ppoint[i][yy].y);
}
//画棋盘的两边提示坐标
for(i=1;i<=xx;i++)
{
g.drawString(""+i,i*unitWidth,unitHeight/2);
}
j=1;
for(char c='A';c<='O';c++)
{
g.drawString(" "+c,unitWidth/4,j*unitHeight);
j++;
}
}
//处理鼠标点击的事件
public void mouseClicked(MouseEvent e)
{
try
{
ChessPiece piece=null;
Rectangle rect=null;
if(e.getSource()==this)
{
int p=(unitWidth-2)/2;
int q=(unitHeight-2)/2;
rect=new Rectangle((e.getX()-p),e.getY()-q,2*p,2*q);
boolean containChessPoint=false; //标识是否覆盖棋点的变量
int x=0,y=0;
int m=0,n=0;
//检查棋子当前覆盖的区域是否有一个棋点
for(int i=1;i<=xx;i++)
{
for(int j=1;j<=yy;j++)
{
x=ppoint[i][j].getX();
y=ppoint[i][j].getY();
if(rect.contains(x,y))
{
containChessPoint=true;
m=i;
n=j;
}
}
}
if(widthPlay==false&&blackPlay==true) //如果该白方走棋
{
piece=new ChessPiece(Color.orange,Color.black,unitWidth-3,unitHeight-3,this);
ppoint[m][n].setPiece(piece,this);
blackWon.a[n]=blackWon.a[n]+(2<<(m-1)); //置放置棋子的位置为1,即为有棋子
widthPlay=true; //置白方走棋为假,黑方走棋为真
blackPlay=false;
if(blackWon.isWon()==true)
{
System.out.println("黑方胜利!"); //如果有一方胜利,则置两方走棋都为假
blackPlay=false; //结束对弈
widthPlay=false;
}
}
else if(widthPlay==true&&blackPlay==false)
{
piece=new ChessPiece(Color.orange,Color.white,unitWidth-3,unitHeight-3,this);
ppoint[m][n].setPiece(piece,this);
whiteWon.a[n]=whiteWon.a[n]+(1<<m);
widthPlay=false;
blackPlay=true;
if(whiteWon.isWon()==true)
{
System.out.println("白方胜利!"); //如果有一方胜利,则置两方走棋都为假
blackPlay=false; //结束对弈
widthPlay=false;
}
}
}
}
catch(Exception ex)
{
}
}
public void mouseReleased(MouseEvent e)
{
}
public void mouseEntered(MouseEvent e)
{
}
public void mouseExited(MouseEvent e)
{
}
public void mousePressed(MouseEvent e)
{
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -