javaFX实现 Tromino 谜题 带动画

本文介绍了一种使用JavaFX解决Tromino谜题的方法,通过L型骨牌覆盖缺少一个方块的棋盘。实现过程中,利用坐标信息进行区域标记,采用递归策略填充每个象限,直至剩2x2区域。该算法时间复杂度为O(n^2),空间复杂度同样为O(n^2)。文章展示了实现思路、结果以及关键代码。
摘要由CSDN通过智能技术生成

题目描述

Tromino 是指一个由棋盘上的三个方块组成的 L 型骨牌。如何用 Tromino 覆盖一个缺
少了一个方块(可以在棋盘上任何位置)的棋盘(下图展示了情况)。除了这个缺失的方
块,Tromino 应该覆盖棋盘上的所有方块,Tromino 可以任意转向但不能有重叠。

实现思想

使用变量标记区域坐标信息,随机生成L区域颜色。使用L区域的3个格子和随机生成的一个格子把每一个象限里都实现涂鸦一个格子。然后递归调用函数把每一个区域涂鸦,直到剩下的区域尺寸为2x2时结束调用。
数据结构:变量储存坐标信息
实现步骤:L区域的3个格子和随机生成的一个格子把每一个象限里都实现涂鸦一个格子。然后递归调用函数把每一个区域涂鸦,知道剩下的区域尺寸为2x2时结束调用。
实现技巧:递归的去实现涂鸦每一个象限的方格,我认为时很方便的处理方法。这样可以避免处理循环以及各种问题。
时间复杂度为:O(n^2)
空间复杂度:O(n^2)

结果

在这里插入图片描述

代码

package CourseDesign;

import javafx.application.Application;
import javafx.application.Platform;
import javafx.scene.Group;
import javafx.scene.Scene;
import javafx.scene.paint.Color;
import javafx.scene.paint.Paint;
import javafx.scene.shape.Line;
import javafx.scene.shape.Rectangle;
import javafx.stage.Stage;

import java.util.Random;

public class A1 extends Application {
   
    Group group = new Group();
    Scene scene = new Scene(group, 800, 800);
    Rectangle rectangle = null;

    @Override
    public void start(Stage primaryStage) throws Exception {
   
        // ***************
        int pow = 16;//界面
        int size = 50;//小格子的大小
        //****************
        Random random = new Random();
        // 画线
        for (int i = 0; i < pow + 1; i++) {
   
            // 横线
            Line line = new Line(0, i * size, 50 * pow, i * size);
            line.setStroke(Color.RED);
            group.getChildren().add(line);
            // 竖线
            line = new Line(i * size, 0, i * size, 50 * pow);
            line.setStroke(Color.RED);
            group.getChildren().add(line);
        }
        // 最开始的黑点
        int x = random.nextInt(pow) * size;
        int y = random.nextInt(pow) * size;
        rectangle = new Rectangle(x, y, size, size);
        group.getChildren().add(rectangle);
        // 建立一个线程开始涂棋盘
        Thread thread = new<
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值