棋盘覆盖

第一次在博客园写博客,用来分享我的学习之路。

以前写的小东西不是丢了,就是没有认真对待。这次虽然也很简单,但却是自己认真完成的,一个动态的swing图形化界面的棋盘覆盖。可惜没使用监听和自定义界面,提高自由度。

棋盘覆盖

 

  1 package 棋盘覆盖;

  2 

  3 

  4 import java.awt.Color;

  5 

  6 public class QiPan extends Dmain{ 

  7       

  8     /**

  9      * 

 10      */

 11     private static final long serialVersionUID = 1L;

 12 

 13     /** 

 14      * @param tr表示棋盘左上角行号 

 15      * @param tc表示棋盘左上角列号 

 16      * @param dr表示特殊棋盘的行号 

 17      * @param dc表示特殊棋盘的列号 

 18      * @param SIZE =2^k。棋盘的规格为2^k*2^k 

 19      *            

 20      * */

 21     static final int SIZE = 4; 

 22 

 23     static int title = 1; // title表示L型骨牌的编号 

 24 

 25     public static void ChessBoard(int tr, int tc, int dr, int dc, int size) { 

 26        for(int i=0;i<999999999;i++)

 27        {

 28            

 29        }

 30         

 31         

 32         if (size == 1) { 

 33             return; 

 34         } 

 35         int t = title++; // t表示L型骨牌的编号 

 36         int s = size / 2; // 分割棋盘 

 37   

 38         // 覆盖左上角棋盘 

 39         if (dr < tr + s && dc < tc + s) { 

 40             // 说明特殊方格在此小棋盘中 

 41             ChessBoard(tr, tc, dr, dc, s); 

 42         } else { 

 43             // 说明特殊方格不在此小棋盘中 

 44             // 用t号L型棋盘覆盖这个小棋盘的右下角 

 45         

 46             setColor(tr + s - 1,tc + s - 1,t);

 47            

 48             // 覆盖其余棋盘 

 49             ChessBoard(tr, tc, tr + s - 1, tc + s - 1, s); 

 50         } 

 51   

 52         // 覆盖右上角棋盘 

 53         if (dr < tr + s && dc >= tc + s) { 

 54             ChessBoard(tr, tc + s, dr, dc, s); 

 55         } else { 

 56             setColor(tr + s - 1,tc + s ,t);

 57             ChessBoard(tr, tc + s, tr + s - 1, tc + s, s); 

 58         } 

 59         // 覆盖左下角棋盘 

 60         if (dr >= tr + s && dc < tc + s) { 

 61             ChessBoard(tr + s, tc, dr, dc, s); 

 62         } else { 

 63             setColor(tr + s ,tc + s - 1,t);

 64        

 65             ChessBoard(tr + s, tc, tr + s, tc + s - 1, s); 

 66         } 

 67         // 覆盖右下角棋盘 

 68         if (dr >= tr + s && dc >= tc + s) { 

 69             ChessBoard(tr + s, tc + s, dr, dc, s); 

 70         } else { 

 71             setColor(tr + s ,tc + s ,t);

 72 

 73             ChessBoard(tr + s, tc + s, tr + s, tc + s, s); 

 74         } 

 75   

 76     } 

 77     

 78     /**

 79     * 设置标签颜色

 80     * @param i , j ,t

 81     */

 82     public static void setColor(int i, int j, int t){

 83     switch(t){

 84     case 1:

 85        text[i][j].setBackground(Color.yellow);

 86     break;

 87     case 2:

 88         text[i][j].setBackground(Color.red);

 89     break;

 90     case 3:

 91         text[i][j].setBackground(Color.CYAN);

 92     break;

 93     case 4:

 94         text[i][j].setBackground(Color.orange);

 95     break;

 96     default:

 97         text[i][j].setBackground(Color.BLACK);

 98    

 99 } 

100  

101     }}

 

 1 package 棋盘覆盖;

 2 

 3 

 4 import java.awt.Color;

 5 

 6 import java.awt.Font;

 7 import java.util.Random;

 8 import javax.swing.BorderFactory;

 9 import javax.swing.JFrame;

10 import javax.swing.JLabel;

11 import javax.swing.JPanel;

12 import javax.swing.SwingConstants;

13 

14 

15 public class Dmain extends JFrame{

16 

17 /**

18      * 

19      */

20     private static final long serialVersionUID = 1L;

21 private JPanel mainPane;

22 

23 

24 protected static JLabel[][] text;

25 

26 //Font font = new Font("", Font.BOLD,14);//设置字体类型和大小

27 

28 

29 

30 

31 public static void main(String[] args){

32 {

33     

34 Dmain frame = new Dmain();

35 frame.setVisible(true);

36 

37 int a=new Random().nextInt(4);//生成随机数用来生成特殊棋盘位置

38 int b=new Random().nextInt(4);

39 text[a][b].setBackground(Color.MAGENTA);

40     QiPan.ChessBoard(0,0,a,b,4);

41 }

42 

43 

44 

45 }

46 

47 

48 

49 

50 /**

51 * 构造方法

52 */

53 public Dmain(){

54 super();

55 

56 setResizable(false);//禁止调整窗体大小

57 getContentPane().setLayout(null);//设置空布局

58 setBounds(500, 50, 500, 615);

59 setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

60 setTitle("棋盘覆盖");//设置窗体标题

61 

62 mainPane = new JPanel();//创建游戏主面板

63 mainPane.setBounds(20, 70, 460, 500);//设置主面板位置尺寸

64 this.getContentPane().add(mainPane);//this.getContentPane()初始化一个容器

65 mainPane.setLayout(null);//设置空布局

66 

67 

68 text = new JLabel[4][4];//创建文本框二维数组

69 for(int i = 0; i < 4; i++){//遍历数组

70 for(int j = 0; j < 4; j++){

71 text[i][j] = new JLabel();//创建标签

72 text[i][j].setHorizontalAlignment(SwingConstants.CENTER);//设置文本水平对齐,居中

73 text[i][j].setText("");

74 text[i][j].setBounds(120 * j, 120 * i, 100, 100);//设置方块的大小位置

75 text[i][j].setOpaque(true);//透明度不透明   false 透明,透明将导致文本颜色内容无法显示。

76 text[i][j].setBorder(BorderFactory.createMatteBorder(2, 2, 2, 2, Color.green));//设置方块边框颜色

77 mainPane.add(text[i][j]);//将创建的文本框放在mainpane面板上

78 

79 }}}}
View Code

 

你可能感兴趣的:(覆盖)