残缺棋盘覆盖仿真,完成调整速度和自动计数功能!!!

问题描述:
残缺棋盘是一个有 2 k ∗ 2 k 2^k*2^k 2k2k个方格的棋盘,其中恰有一个方格残缺。现在要求用三格板覆盖残缺棋盘,覆盖过程中两个三格板不能重叠,不能覆盖残缺方格,但必须覆盖其它的所有方格。问如何去覆盖该残缺棋盘(给出覆盖方案)?
在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述
为了完成这个作业,我找了很多代码。找到了两个我觉得比较有用的代码,在这个基础上进行了功能的改进。

残缺棋盘覆盖分治算法仿真软件及源码

棋盘覆盖过程演示
它们的代码标注很少,我在读的时候增加了不少自己的标注,可以帮助更好的理解,但也有些标注可能有错误。
界面:
在这里插入图片描述
详细代码实现:

package code;

import java.util.Random;
import java.awt.*;
import javax.swing.*;
import javax.swing.event.ChangeEvent;
import javax.swing.event.ChangeListener;
import java.awt.Color;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.ItemListener;
import java.awt.event.ItemEvent;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
//westPanel为放置按钮的容器,采用GridBagLayout布局
//随机产生4种模板的颜色,如果需要固定颜色,可从130行开始修改
class MainFrame implements ActionListener,ItemListener{
   
	
	FlowLayout FLayout = new FlowLayout();
	JLabel menuLabel = new JLabel("控制项");
	JSlider sizeSlider = new JSlider(1,5);
	JLabel sizeLabel = new JLabel("棋盘大小(1-5)");
	JSlider speedSlider = new JSlider(100,1000);
	JLabel speedLabel = new JLabel("覆盖时间(100-1000)");
	JButton ok = new JButton("开始");
	JButton sp = new JButton("暂停");
	JButton up = new JButton("上一步");
	JButton ne = new JButton("下一步");
	JPanel westPanel = new JPanel();
	static JLabel[][] chess= new JLabel[32][37];
	JPanel boardPanel = new JPanel(new GridLayout(32,37));
	static JFrame jf = new JFrame("残缺棋盘算法");
	GridBagLayout gbl = new GridBagLayout();
	GridBagConstraints gbc = new GridBagConstraints();
	static Temp[] temp = new Temp[4];
	static int speed=100,size=1,bia;
	static int[] colorCount = new int[5], brokenPos= new int[2];
	static int[][] color= new int [32][32], colorStaPos = new int[4][2],spatialTem= {
   {
   0,0},{
   0,1},{
   1,0},{
   1,1}};
	static int[][][] stepList= new int[350][3][2];
	public static boolean now = true;
	public static int a; //全局变量
	public static int current = 0;
	
	
	
	public MainFrame() {
   
		//根据屏幕高设置窗口大小
		Dimension screensize = Toolkit.getDefaultToolkit().getScreenSize();
		int screenHeight = (int) screensize.getHeight();
		jf.setLayout(new BorderLayout());
		Insets screenInsets = Toolkit.getDefaultToolkit().getScreenInsets(jf.getGraphicsConfiguration());
		screenHeight -= screenInsets.bottom;
		
		jf.setSize(new Dimension((int)(screenHeight*1.43),screenHeight));
		westPanel.setLayout(gbl);		
		//滑动条 size设置
		sizeSlider.setMinimum(1);
		sizeSlider.setSnapToTicks(true);  //true时,每一次调整后滑块都要对齐到最接近的标尺处
		sizeSlider.addChangeListener(new ChangeListener(){
      //通过输入得到size大小
			@Override
			public void stateChanged(ChangeEvent e) {
   
				size = sizeSlider.getValue();
				System.out.printf("%d\n", size);   //控制台输出得到的size大小
			}
		});
		//滑动条 速度设置
		speedSlider.setValue(100);
		speedSlider.addChangeListener(
  • 3
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ANAN永不败315

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值