public class Game {
private Frame frame;//窗体
private Canvas canvas;//画布
private Graphics g;//画笔
private Button button;//按钮
private Chess chess;//棋局
/**
* 构造函数
*/
public Game(){
frame =new Frame("五子棋");
frame.setLayout(new FlowLayout());//设置流式布局
frame.setSize(Board.getWidth(),Board.getHeight()+100);
frame.setVisible(true);
canvas =new Canvas();
canvas.setSize(Board.getWidth(),Board.getHeight());
frame.add(canvas);
button =new Button("Start");
//button.setSize(200,50);按钮自适应位置大小;
frame.add(button);
button.addMouseListener(new MouseAdapter() {
@Override
public void mouseClicked(MouseEvent e) {
g=canvas.getGraphics();//获得画笔
drawBoard();//画棋盘
canvas.addMouseListener(new MouseAdapter() {
@Override
public void mouseClicked(MouseEvent e) {
handle(e.getX(),e.getY());
super.mouseClicked(e);
}
});
super.mouseClicked(e);
}
});
chess=new Chess();//初始化棋局
}
/**
* 处理用户落子指令
* @param x 像素横坐标
* @param y 像素纵坐标
*/
public void handle(int x,int y){
//System.out.printf("单击棋盘:x=%d,y=%d\n",x,y);
//将物理坐标转换为逻辑坐标,如果逻辑坐标非法(不在棋盘范围内)则不处理;
Point p=Board.convert(x,y);
if(null==p){
return;
}
//如果指定位置没有棋子则落子,否则什么也不做;
if(chess.exist(p)){
return;
}
int turn= chess.add(p);//落子
drawChess(p,turn);//画棋子
switch (chess.isWin(p)){
case Chess.BLACK:
System.out.println("黑方胜");
break;
case Chess.WHITE:
System.out.println("白方胜");
break;
}
}
/**
*绘制棋盘
*/
public void drawBoard(){
g.setColor(Color.BLUE);//设置背景色为蓝色
g.fillRect(0,0,Board.getWidth(),Board.getHeight());//填充矩形
int startX=Board.margin;//经线的起点
int endX =Board.getWidth()-Board.margin;//经线的终点
int startY=Board.margin;//纬线的起点
int endY =Board.getHeight()-Board.margin;//纬线的终点
g.setColor(Color.YELLOW);
//画经线
for(int x=startX;x<=endX;x+=Board.size){
g.drawLine(x,startY,x,endY);
}
//画纬线
for(int y=startY;y<=endY;y+=Board.size){
g.drawLine(startX,y,endX,y);
}
}
/**
* 绘制棋局
* @param p 落点
* @param turn 黑子/白子
*/
public void drawChess(Point p,int turn){
//计算圆心坐标
int x=p.col*Board.size+Board.margin;
int y=p.row*Board.size+Board.margin;
int r=Board.size/4;//棋子的半径(可以调整)
g.setColor(turn==Chess.BLACK?Color.BLACK:Color.WHITE);
g.fillArc(x-r,y-r,2*r,2*r,0,360);
}
public static void main(String[] args) {
Game game=new Game();
}
}