棋盘覆盖

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

以前写的小东西不是丢了,就是没有认真对待。这次虽然也很简单,但却是自己认真完成的,一个动态的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

 

posted @ 2015-04-08 15:39  夜の魅  阅读(436)  评论(0编辑  收藏  举报