【年少的风】棋盘覆盖,用不同的颜色标记

 

 
 
  1. import java.awt.Color;  
  2. import java.awt.Container;  
  3. import java.awt.GridLayout;  
  4. import java.util.Random;  
  5.  
  6. import javax.swing.JButton;  
  7. import javax.swing.JFrame;  
  8. import javax.swing.JPanel;  
  9.  
  10.  
  11. public class ChessPaneCover {  
  12.       
  13.     private final static int n = 4;  
  14.     static JButton[] button = new JButton[n*n];  
  15.     private static int amount = 0;  
  16.     static int[][] board = new int [n*n][n*n];  
  17.     static Color[] color = {Color.white,Color.pink,Color.blue,Color.CYAN,Color.green,Color.orange};  
  18.       
  19.     public static void main(String[] args) {  
  20.         new ChessPaneCover().frameLaunch();  
  21.     }  
  22.       
  23.     public static void frameLaunch(){  
  24.         JFrame frame = new JFrame("残缺棋盘覆盖");  
  25.         frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);  
  26.         frame.setSize(n*150, n*150);  
  27.         frame.setLocation(100,100);  
  28.           
  29.         JPanel panel = new JPanel();  
  30.         panel.setLayout(new GridLayout(n,n,0,0));  
  31.         for (int i = 0; i < n*n; i++) {  
  32.             button[i] = new JButton();  
  33.             button[i].setBackground(Color.gray);  
  34.             panel.add(button[i]);  
  35.         }  
  36.           
  37.         Random random = new Random();   
  38.         int temp = random.nextInt(16);  
  39.         cover(0,0,temp/n,temp%n,n);  
  40.         outputBoard(n);  
  41.         button[temp].setText("残");  
  42.         button[temp].setBackground(Color.black);  
  43.           
  44.         frame.add(panel);  
  45.         frame.setResizable(false);  
  46.         frame.setVisible(true);  
  47.     }  
  48.       
  49.     public static void cover(int tr, int tc, int dr, int dc, int size) {  
  50.         int s,t;  
  51.         if(size < 2){  
  52.             return;  
  53.         }  
  54.         amount++;  
  55.         t = amount;  
  56.         s = size/2;  
  57.           
  58.         if(dr < tr + s && dc < tc + s){  
  59.             cover(tr,tc,dr,dc,s);  
  60.             board[tr + s - 1][tc + s] = t;  
  61.             board[tr + s][tc + s - 1] = t;  
  62.             board[tr + s][tc + s] = t;  
  63.             cover(tr, tc+s, tr+s-1, tc+s, s);  
  64.             cover(tr+s, tc, tr+s, tc+s-1, s);  
  65.             cover(tr+s, tc+s, tr+s, tc+s, s);  
  66.         }  
  67.         else if(dr < tr + s && dc >= tc + s){  
  68.             cover(tr,tc+s,dr,dc,s);  
  69.             board[tr + s - 1][tc + s - 1] = t;  
  70.             board[tr + s][tc + s - 1] = t;  
  71.             board[tr + s][tc + s] = t;  
  72.             cover(tr, tc, tr+s, tc+s-1, s);  
  73.             cover(tr+s, tc, tr+s, tc+s-1, s);  
  74.             cover(tr+s, tc+s, tr+s, tc+s, s);  
  75.         }  
  76.         else if(dr >= tr + s && dc < tc + s){  
  77.             cover(tr+s,tc,dr,dc,s);  
  78.             board[tr + s - 1][tc + s - 1] = t;  
  79.             board[tr + s - 1][tc + s] = t;  
  80.             board[tr + s][tc + s] = t;  
  81.             cover(tr, tc, tr+s-1, tc+s - 1, s);  
  82.             cover(tr, tc+s, tr+s-1, tc+s, s);  
  83.             cover(tr+s, tc+s, tr+s, tc+s, s);  
  84.         }  
  85.         else if(dr >= tr + s && dc >= tc + s){  
  86.             cover(tr+s,tc+s,dr,dc,s);  
  87.             board[tr + s - 1][tc + s -1] = t;  
  88.             board[tr + s - 1][tc + s] = t;  
  89.             board[tr + s][tc + s - 1] = t;  
  90.             cover(tr, tc, tr+s-1, tc+s-1, s);  
  91.             cover(tr, tc+s, tr+s-1, tc+s-1, s);  
  92.             cover(tr+s, tc+s, tr+s, tc+s-1, s);  
  93.         }  
  94.     }  
  95.       
  96.     public static void outputBoard(int size){  
  97.         for(int i = 0; i < size; i++){  
  98.             for(int j = 0; j < size; j++){  
  99.                 button[i*n+j].setBackground(color[board[i][j]]);                  
  100.                 button[i*n+j].setText("" + board[i][j]);  
  101.             }  
  102.         }  
  103.     }  
  104. }  

 

本文出自 “年少的风” 博客,请务必保留此出处http://huamm.blog.51cto.com/5646020/1060082

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值