cs61b proj2 phase1

博客介绍了使用Java生成room的方法,room的宽度、高度和坐标随机,生成时要确保不超出world边界,使用retry控制。在world中放置room不能重叠,还需生成hallway连接room,且hallway也不能重叠。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.生成room

room类定义了一个宽度、高度、在world中的坐标均为随机的room,并且用WALL包围,内填充FLOOR。
room的宽度、高度、在world中的坐标均为随机。在生成时需确保room不超出world的边界,这里使用retry来控制。

public Room(long seed) {
        rand = new Random(seed);
        setPosition(); // 确定room的左下角在world中的位置坐标(x, y)
        int x = position.getX();
        int y = position.getY();
        int retry = 10; // 随机生成的room可能超出地图范围,故设置retry
        // while循环尝试在world的(x, y)处创建room
        do {
            setHeight();
            setWidth();
            retry--;
            if (retry == 0) break;
        } while (x + width >= World.WIDTH || y + height >= World.HEIGHT);
        if (retry == 0) {
            position = new Position(-1, -1);
            return;
        }
        room = new TETile[height][width];
        roundByWall();
        fillWithFloor();
        // 以上代码构造了一个room,并且在world中的坐标也已经确定,但还未将其放置到world中
    }

在world中放置room时需注意不要重叠。

public void placeRoom() {
        Iterator<Room> iterator = rooms.iterator();
        while (iterator.hasNext()) {
            Room room = iterator.next();
            if (room.isOverlap()) { // 去除重叠
                iterator.remove();
                continue;
            }
            placeOneRoom(room);
        }
    }

    private void placeOneRoom(Room room) {
        int x = room.getPosition().getX();
        int y = room.getPosition().getY();
        int height = room.getHeight();
        int width = room.getWidth();
        TETile[][] r = room.getRoom();
        int row = height, col = 0;
        for (int Y = y; Y < y + height; Y++) {
            row--;
            col = 0;
            for (int X = x; X < x + width; X++) {
                world[X][Y] = r[row][col];
                col++;
            }
        }
    }

生成hallway连接room,生成方法参考这里
注意hallway不要像下面这样重叠。
重叠的hallway

<think>好的,我现在需要解决用户关于CS61B Spring 2021课程代码无效的问题。首先,用户提到“课程代码无效”,这可能是指他们无法访问课程材料或者运行提供的代码。根据用户的引用,特别是引用[^1],里面提到了CS61B 2021 Lecture 4的内容,可能涉及参考资料、递归和列表。我应该先检查常见的导致代码无效的原因。 首先,用户可能没有正确设置开发环境。CS61B通常使用Java,可能需要特定版本的JDK或库。比如,课程可能要求Java 8,而用户可能安装了更高版本导致兼容性问题。此外,构建工具如Git和IntelliJ的配置是否正确也需要检查。比如,项目结构中的依赖项或库是否缺失。 其次,课程代码可能依赖特定的测试库或框架,比如JUnit。如果用户没有正确导入这些库,测试用例无法运行,导致代码看似无效。需要确保所有必要的库都被正确添加到项目的classpath中。 另外,用户可能克隆了错误的仓库分支或版本。CS61B的代码可能随着课程更新而变化,如果用户使用的是旧版本,可能会出现不兼容。应建议用户检查是否克隆了正确的仓库,并切换到对应的分支或标签。 还有可能是IDE的缓存或配置问题。有时候清理项目并重新构建可以解决这类问题。例如,在IntelliJ中执行Clean和Rebuild操作,或者删除.idea目录重新导入项目。 此外,用户可能没有正确遵循课程提供的设置指南。CS61B通常会有详细的安装和配置步骤,比如使用特定的虚拟机或配置脚本。如果用户跳过了某些步骤,可能导致环境不匹配。 最后,权限问题也可能导致代码无法运行。例如,项目文件的读写权限,或者防火墙设置阻止了某些资源的下载。用户需要检查文件权限和网络设置,确保所有依赖项都能正确下载。 总结下来,可能的解决步骤包括:检查环境配置、验证依赖库、确认代码版本、清理和重建项目、遵循课程指南,以及检查权限和网络。需要一步步引导用户排查这些问题,并提供具体的操作建议,比如更新JDK版本、导入正确库、切换Git分支等。</think>关于CS61B Spring 2021课程代码无效问题的解决方案如下: ### 1. 检查代码仓库与分支 课程官方代码仓库可能更新或分支切换导致旧代码失效。建议: - 确认使用的Git仓库地址是否为最新官方源: `git clone https://github.com/Berkeley-CS61B/sp21-s***`(具体仓库名需参考课程文档) - 使用`git status`检查当前分支,切换到正确的课程配套分支 例如:`git checkout sp21-proj1`[^1] ### 2. 验证开发环境配置 课程要求特定版本的开发工具: - **Java版本**:需JDK 11或课程指定版本 终端输入`javac -version`验证,若版本不符可通过以下命令切换: ```bash sudo update-alternatives --config javac ``` - **库依赖**:确保已正确导入所有JAR文件 在IntelliJ中: `File > Project Structure > Libraries > "+" > 添加sp21-library.jar` ### 3. 处理依赖冲突 若出现类似引用[^2]中的数据类型错误: - 检查代码中是否混用旧版本课程库与新代码 例如`NCLOB`类型不匹配问题,可通过显式类型转换解决 - 清理缓存后重新构建: ```bash ./clean && ./compile # 课程特定构建脚本 ``` ### 4. 分布式环境问题 涉及多模块项目时(类似引用[^3]的微服务链路问题): - 确保所有子模块已正确初始化: ```bash git submodule update --init --recursive ``` - 检查配置文件路径是否正确 特别关注`src/resources/config`中的路径配置 ### 5. 容器化部署(可选) 如需隔离环境(参考引用[^4]的Docker配置): ```dockerfile FROM openjdk:11-jdk COPY sp21-starter/ /app WORKDIR /app RUN ./gradlew build CMD ["java", "-jar", "build/libs/sp21.jar"] ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值