棋盘覆盖问题中输出覆盖图形(同一数字的为相同颜色)

本文档详细介绍了棋盘覆盖问题的解决方法,通过BoardUI类展示了如何将棋盘划分为网格并根据算法结果动态染色,颜色对应于同一数字的相同颜色。代码中包含ChessBoard类的递归算法和ResultDao类的数据存储,用户可以通过StartUI输入棋盘阶数和特殊方格坐标,生成实时覆盖图形。
摘要由CSDN通过智能技术生成

**棋盘覆盖问题中输出覆盖图形(同一数字的为相同颜色)

运行截图:
k=2的情况

k=3的情况
k=4的情况
源码:
BoardUI类:网格的划分以及染色,每个网格都是一个按钮

package sf;


import javax.swing.*;        
import java.awt.*; 
import java.awt.Color;
import java.util.ArrayList;
public class BoardUI extends JFrame{        //继承JFrame类
	//int size=9;
	//JTextField textField = new JTextField("Hello");
	//JTextField tf[]=new JTextField[size];
	ArrayList<Result> rs=ResultDao.getList();
    Result rt=rs.get(0);
    int size=rt.getSize();
	JButton jbs[]=new JButton[size*size];  
	 int[][] board= new int[100][100];
	Color c[]=new Color[10];

	public static void main(String[] args) {    //主函数
		
		
		
			BoardUI a=new BoardUI();        //实现界面
			
	}
	public BoardUI()                //构造函数
	{
		//创建组件
		c[0]=Color.blue;c[1]=Color.gray;c[2]=Color.green;c[3]=Color.yellow;c[4]=Color.red;
		c[5]=Color.white;c[6]=Color.pink;c[7]=Color.cyan;c[8]=Color.orange;c[9]=Color.magenta;
		System.out.println(ResultDao.getList());
		ArrayList<Result> rs=ResultDao.getList();
	    Result rt=rs.get(0);
	    //int size=rt.getSize();
	   System.out.println(rt.getResultList().size());
	 // rt.getResultList().size();
	   board=(int[][]) rt.getResultList().toArray();
	   int[]n;
	   for(int i=0;i<size;i++){
	        for(int j=0;j<size;j++)
	        
	            System.out.print(board[i][j]+" ");
	            System.out.println();
	         //   jbs[i]=new JButton(String.valueOf(board[i][j]);
		}
	   int len = 0;
	 //计算一维数组长度
	 for(int i = 0;i < size;i++){
	    len += size;
	 }
	 //复制元素
	 n = new int[len];
	 int index = 0;
	 for(int i = 0;i < size;i++){
	     for(int j = 0;j < size;j++){
	        n[index++] = board[i][j];
	     }
	 }
		for(int i=0;i<size*size;i++)
		{
			//tf[i]=new JTextField(String.valueOf(i));
			System.out.println(n[i]);
			jbs[i]=new JButton(String.valueOf(n[i]));
		}
		
		//设置网格布局
		this.setLayout(new GridLayout(size,size));        
		
		//添加组件
		for(int i=0;i<size*size;i++)
		{
			this.add(jbs[i]);
		}
		for(int i=0;i<size*size;i++)
		{
			for(int j=0;j<size*size;j++) {
			if(n[j]==-1) 
			jbs[j].setBackground(Color.BLACK);//blue gray green yellow red white pink DARK_GRAY orange magenta
			if(i==n[j]) {
				jbs[j].setBackground(c[i%10]);
			}
				
			}
		}
		//设置窗体属性
		this.setTitle("网格");		//设置窗体标题
		this.setSize(500, 500);				//设置窗体大小
		this.setLocation(400,200);			//设置窗体初始位置
		this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);	 //这个很重要!!!设置关闭窗体后虚拟机一同关闭,不设置的
		this.setVisible(true);				//设置可以显示
	}
	
}

ChessBoard类:划分棋盘的算法,将结果存入实体类中

package sf;

import java.awt.EventQueue;

import java.util.Arrays;




public class ChessBoard {
	
	 int[][] board= new int[100][100];
	 static int tile=0;// 骨牌编号
	
public  void chessBoard(int tr,int tc,int dr,int dc,int size) {
	if(size==1)return;
	int t=tile++;
	int	s=size/2;
	if(dr<tr+s&&dc<tc+s)
		chessBoard(tr,tc,dr,dc,s);
	else {
		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 {
		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 {
		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 {
		board[tr+s][tc+s]=t;
		chessBoard(tr+s, tc+s, tr+s, tc+s, s);
		
	}
	
}
public  void disPlay(int tr,int tc,int dr,int dc,int size) {
	
	board[dr][dc]=-1;
	chessBoard(tr,tc,dr,dc,size);
	for(int i=0;i<size;i++){
        for(int j=0;j<size;j++)
        
            System.out.print(board[i][j]+" ");
            System.out.println();
	
	}
	Result r=new Result();
	r.setSize(size);
	r.setResultList(Arrays.asList(board));
	ResultDao.add(r);

EventQueue.invokeLater(new Runnable() {
	public void run() {
		try {
			BoardUI frame = new BoardUI();
			frame.setVisible(true);
			
			//Result r=new Result();
			//r.setSize(size);
			//r.setResultList(Arrays.asList(board));
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
	
});
//System.out.println(r.getSize());
}}

ResultDao类:存放result对象

import java.util.ArrayList;

	

	public class ResultDao {
	static ArrayList<Result> list=new ArrayList<Result>();

	public static ArrayList<Result> getList() {
		return list;
	}

	public static void setList(ArrayList<Result> list) {
		ResultDao.list = list;
	}
	public static  void add(Result result) {
		// TODO Auto-generated method stub
	   list.add(result);
	}
	}





StartUI类:输入阶数k以及特殊方格的坐标

import java.awt.EventQueue;

import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.border.EmptyBorder;

//import StudentBD.DBTest;

import javax.swing.GroupLayout;
import javax.swing.GroupLayout.Alignment;
import javax.swing.JLabel;
import java.awt.Font;
import javax.swing.JTextField;
import javax.swing.JButton;
import java.awt.event.ActionListener;

import java.awt.event.ActionEvent;
import javax.swing.LayoutStyle.ComponentPlacement;

public class StartUI extends JFrame {

	private JPanel contentPane;
	private JTextField textField;
	private JTextField textField_1;
	private JTextField textField_2;

	/**
	 * Launch the application.
	 */
	public static void main(String[] args) {
		EventQueue.invokeLater(new Runnable() {
			public void run() {
				try {
					StartUI frame = new StartUI();
					frame.setVisible(true);
				} catch (Exception e) {
					e.printStackTrace();
				}
			}
		});
	}

	/**
	 * Create the frame.
	 */
	public StartUI() {
		setTitle("请输入参数");
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		setBounds(100, 100, 450, 300);
		contentPane = new JPanel();
		contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
		setContentPane(contentPane);
		
		JLabel lblNewLabel = new JLabel("输入阶数2^k");
		lblNewLabel.setFont(new Font("宋体", Font.PLAIN, 18));
		lblNewLabel.setToolTipText("");
		
		textField = new JTextField();//添加文本框
		textField.setFont(new Font("宋体", Font.PLAIN, 18));
		textField.addActionListener(new ActionListener() {//文本框监听
			public void actionPerformed(ActionEvent e) {
				//String number = textField.getText();//获得字符串类型的数据
		       //  System.out.println(number); //测试是否获得数据
			}
		});
		textField.setColumns(10);
		
		JButton btnNewButton = new JButton("填色");//添加签到按钮
		btnNewButton.setFont(new Font("宋体", Font.PLAIN, 18));
		btnNewButton.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				System.out.println(Integer.parseInt(textField.getText()));
				System.out.println(Integer.parseInt(textField_1.getText()));
				System.out.println(Integer.parseInt(textField_2.getText()));
				
				ChessBoard cb=new ChessBoard();
				cb.disPlay(0, 0,Integer.parseInt(textField_1.getText())-1,Integer.parseInt(textField_2.getText())-1,(int)Math.pow(2,Integer.parseInt(textField.getText())));
					
				
				
				//textField.setText("");//清空文本				
				//textField.requestFocus();//聚焦标记
				 
			}
	});
		
		textField_1 = new JTextField();
		textField_1.setFont(new Font("宋体", Font.PLAIN, 18));
		textField_1.setColumns(10);
		textField.addActionListener(new ActionListener() {//文本框监听
			public void actionPerformed(ActionEvent e) {
				//String number = textField.getText();//获得字符串类型的数据
		       //  System.out.println(number); //测试是否获得数据
			}
		});
		
		textField_2 = new JTextField();
		textField_2.setFont(new Font("宋体", Font.PLAIN, 18));
		textField_2.setColumns(10);
		textField.addActionListener(new ActionListener() {//文本框监听
			public void actionPerformed(ActionEvent e) {
				//String number = textField.getText();//获得字符串类型的数据
		       //  System.out.println(number); //测试是否获得数据
			}
		});
		
		JLabel lblNewLabel_1 = new JLabel("输入特殊方块的行和列");
		lblNewLabel_1.setToolTipText("");
		lblNewLabel_1.setFont(new Font("宋体", Font.PLAIN, 18));
		GroupLayout gl_contentPane = new GroupLayout(contentPane);
		gl_contentPane.setHorizontalGroup(
			gl_contentPane.createParallelGroup(Alignment.TRAILING)
				.addGroup(gl_contentPane.createSequentialGroup()
					.addGroup(gl_contentPane.createParallelGroup(Alignment.LEADING)
						.addGroup(gl_contentPane.createSequentialGroup()
							.addGap(23)
							.addComponent(lblNewLabel_1, GroupLayout.PREFERRED_SIZE, 196, GroupLayout.PREFERRED_SIZE)
							.addPreferredGap(ComponentPlacement.RELATED)
							.addComponent(textField_1, GroupLayout.PREFERRED_SIZE, 58, GroupLayout.PREFERRED_SIZE)
							.addGap(18)
							.addComponent(textField_2, GroupLayout.PREFERRED_SIZE, 59, GroupLayout.PREFERRED_SIZE))
						.addGroup(gl_contentPane.createSequentialGroup()
							.addGap(58)
							.addComponent(lblNewLabel)
							.addGap(36)
							.addComponent(textField, GroupLayout.PREFERRED_SIZE, 156, GroupLayout.PREFERRED_SIZE))
						.addGroup(gl_contentPane.createSequentialGroup()
							.addGap(175)
							.addComponent(btnNewButton)))
					.addContainerGap(66, Short.MAX_VALUE))
		);
		gl_contentPane.setVerticalGroup(
			gl_contentPane.createParallelGroup(Alignment.LEADING)
				.addGroup(gl_contentPane.createSequentialGroup()
					.addContainerGap(57, Short.MAX_VALUE)
					.addGroup(gl_contentPane.createParallelGroup(Alignment.BASELINE)
						.addComponent(lblNewLabel)
						.addComponent(textField, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE))
					.addGap(28)
					.addGroup(gl_contentPane.createParallelGroup(Alignment.BASELINE)
						.addComponent(lblNewLabel_1, GroupLayout.PREFERRED_SIZE, 21, GroupLayout.PREFERRED_SIZE)
						.addComponent(textField_1, GroupLayout.PREFERRED_SIZE, 27, GroupLayout.PREFERRED_SIZE)
						.addComponent(textField_2, GroupLayout.PREFERRED_SIZE, 27, GroupLayout.PREFERRED_SIZE))
					.addGap(54)
					.addComponent(btnNewButton)
					.addGap(35))
		);
		contentPane.setLayout(gl_contentPane);
	}
}

代码很烂,希望能帮到你

  • 3
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值