棋盘覆盖

import java.applet.Applet;
import java.awt.event.*;
import java.awt.*;


public class ChessBoard extends Applet implements ActionListener{

/**
* @param args
*/
private int size=4;
private Button btnStart;
private int sx = 40;
private int sy = 80;
private int dr = 0, dc = 1;
private int tile = 1;//L型骨牌号
private int board[][];
Label label_Size, label_dr, label_dc;
TextField text_Size, text_dr, text_dc;
public void init()
{
label_Size = new Label("K值:");
add(label_Size);
text_Size = new TextField("2",4);
text_Size.addActionListener(this);
add(text_Size);
label_dr = new Label("dr:");
add(label_dr);
text_dr = new TextField("0",4);
text_dr.addActionListener(this);
add(text_dr);
label_dc = new Label("dc:");
add(label_dc);
text_dc = new TextField("1",4);
text_dc.addActionListener(this);
add(text_dc);
btnStart = new Button("执行");
btnStart.addActionListener(this);
add(btnStart);

}

public void paint(Graphics g)
{
g.setColor(Color.BLUE);
int ex = 40*(size+1);
int ey = 80+40*size;
for(int i= 0;i<= size;i++)
g.drawLine(sx+40*i, sy, sx+40*i,ey);
for(int i= 0;i<= size;i++)
g.drawLine(sx, sy+40*i, ex,sy+40*i);
int w = (size+4)*40;
int h = (size+3)*40;
this.setSize(w, h);
board = new int[size][size];
chessBoard(0,0,dc,dr,size);
for(int i = 0;i<size;i++)
for(int j = 0;j<size;j++)
{
int r = (25*board[i][j])%255;
int gr = (35*board[i][j])%255;
int b = (45*board[i][j])%255;
Color color = new Color(r, gr, b);
g.setColor(color);
g.fillRect(sx+i*40,sy+j*40,40,40);
}
}
void chessBoard(int tr,int tc,int dr,int dc,int size)
{
if(size == 1)
return;
else{
int t = tile++;//
int s = size/2;
//覆盖左上角子棋盘
if(dr < tr + s&&dc < tc + s){
//特殊方格在此棋盘
chessBoard(tr,tc,dr,dc,s);
}
else{//此棋盘中无特殊方格
//用t号L骨牌覆盖右下角
board[tr + s - 1][tc + s -1] = t;

//覆盖其余方格
chessBoard(tr,tc,tr + s - 1,tc + s -1,s);
}

//覆盖右上角子棋盘
if(dr < tr + s&& dc >= tc + s)
//特殊方格在此棋盘
chessBoard(tr,tc + s,dr,dc,s);
else{//此棋盘中无特殊方格
//用t号骨牌覆盖坐下角
board[tr + s - 1][tc + s ] = t;
//覆盖其余方格
chessBoard(tr,tc + s,tr + s - 1,tc + s ,s);
}

//覆盖左下角子棋盘
if(dr >= tr + s&&dc < tc + s)
//特殊方格在此棋盘
chessBoard(tr + s,tc,dr,dc,s);
else{//此棋盘中无特殊方格
//用t号骨牌覆盖右上角
board[tr + s][tc + s - 1] = t;
//覆盖其余方格
chessBoard(tr + s,tc,tr + s,tc + s - 1,s);
}

//覆盖右下角
if(dr >= tr + s&&dc >= tc + s)
//特殊方格在此棋盘中
chessBoard(tr + s,tc + s,dr,dc,s);
else{//此棋盘中无特殊方格
//用t号骨牌覆盖左上角
board[tr + s][tc + s] = t;

//覆盖其他方格
chessBoard(tr + s,tc + s,tr + s,tc + s,s);
}
}
}

public void actionPerformed(ActionEvent e)
{
size = (int) Math.pow(2,Integer.parseInt(text_Size.getText()));
dr = Integer.parseInt(text_dr.getText());
dc = Integer.parseInt(text_dc.getText());
this.repaint();
}
}

原文地址:https://www.cnblogs.com/FredCong/p/2785311.html