首页 > 学院 > 开发设计 > 正文

棋盘覆盖

2019-11-14 23:40:55
字体:
来源:转载
供稿:网友
棋盘覆盖

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

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


发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表