Skip to main content

主题

常见政策问题

info

这一部分还在建设中,我们会根据大家提出的问题不断更新。

可以有宽度为 2 的走廊吗?

宽度为 2 的走廊是可以的,但要和房间有明显区别,并且不能太频繁地出现。因为这有点主观,欢迎大家在 Ed 论坛的相关帖子里分享你的世界截图。总的来说,尽量让生成的每个世界都尽量减少歧义。如果你的世界里宽度为 2 的走廊太多,我们可能会认为有太多不明确的区域,判定你的世界无效。

可以有重叠的房间吗?

是的,只要满足其余的有效性标准。

可以有双层墙(紧挨着的墙)吗?

可以,但前提是每面墙都必须是它所属的房间或走廊的一部分。任何不直接或斜向连接到地板的墙壁图块都是无效的。

可以有通往虚空区域的入口吗?

不可以,如果任何地板和虚空区域相邻,你的世界就会被判定为无效。如果你想在你的世界里做一个“外部”区域,请先和工作人员沟通。

世界的大小一定要随机吗?

不,你可以直接设定游戏画布的大小。只要大小在笔记本电脑屏幕的一半左右都是可以接受的。如果你愿意,Project 3 可以直接用 Lab 9 的画布尺寸。

两个建筑可以共用一面墙吗?

是的,只要它们满足所有其他世界要求(例如,不重叠)。

常见问题和错误

我无法显示文本/我的图块字符变得奇怪/我的 HUD 闪烁!

请参阅 常见 UI 问题 页面。

我的类的两个实例说它们不相等,但它们应该相等。 此外,我将我的类的实例设置为 HashMap 中的键,但是当我尝试访问该键时却找不到它。

确保如果您创建任何类,请覆盖 .equals() 方法和 .hashcode() 方法。 这样才能保证两个相等的实例将具有相同的哈希值。

我没有通过输入为“lwsd”的测试。

我们在调用 lwsd 之前已经提供了一个有效的、带种子的输入。很可能是你没有正确处理持久化。确保你按照正确的调用顺序来复现这个功能(修改配置,用有效的参数调用 getWorldFromInput,然后再用 "lwsd" 调用一次)。

我收到一个 AccessControlException - 我该怎么办?

请确保你只创建/写入文件(而不是目录)。 也就是说,你应该只写入 CWD 目录下以 .txt 结尾的文件,不要写入其他文件夹或子文件夹。

我正在尝试实现 getWorldFromInput,但是当我在运行 Main.java 时,我的世界没有渲染!

确保你在 getWorldFromInput 里临时调用 ter.renderFrame() (用你自己的二维 TETile 数组作为输入) - 提交给自动评分器之前一定要把这行注释掉。如果你用单独的类来生成随机世界,可以在那个类里创建一个 main 方法,然后调用 ter.renderFrame() 来调试。

在输入 :q 后,如何关闭我的世界?

调用 System.exit(0); 你可以用 System.exit(0),但是不能在 getWorldFromInput 方法里用。

如果 getWorldFromInput() 的输入在 :q 之后有额外的字符,我该怎么办?

你不用担心包含多个存档或者在存档指令后还有其他字符的重放字符串。 比如 "N5SDD:QD" 就不算是一个有效的重放字符串。

自动评分器错误

为什么 3A 自动评分器显示“无法初始化类 edu.princeton.cs.algs4.StdDraw”?

你的代码里,getWorldFromInput 方法试图使用不允许的 StdDraw 类。 比如,如果你调用了 TERenderer.initialize(),你就是在用 StdDraw。 调用 getWorldFromInput 的时候不应该打开任何 StdDraw 窗口。 我们看到有些同学的代码只会在某些种子下打开 StdDraw 窗口,所以要仔细检查。

自动评分器报了 Integer.parseInt 引起的 NumberFormatException 错误。

Random 类需要 long 类型的输入,而我们提供的种子太大,int 装不下。 你需要用 Long 类来解析种子。

自动评分器提示我的世界不一样,即使我在本地运行种子,看到的世界看起来不同。

检查以确保您使用的每个图块都由不同的字符表示。如果您创建任何新图块,这一点尤其重要。

我收到了奇怪的自动评分器消息,这些消息与我代码的内部逻辑不符。

确保您没有更改 TETile.java 的 character 字段或 character() 方法。

我在自动评分器上收到“未报告的异常 IOException(或某些其他异常)必须被捕获或声明为被抛出”的错误,但我的代码在本地运行良好。

如果您的方法签名声明了抛出异常,自动评分器可能无法编译。相反,请使用 try-catch 块处理抛出异常的代码部分,然后从方法签名中删除 throws 声明

自动评分器似乎提前退出,即使我的代码中没有错误?

确保您没有调用 System.exit()

自定义世界功能

我想创建一个我们可以探索户外或洞穴之类的世界,而不是一堆房间。我该怎么办?

没问题,您可以只使用种子为您的角色创建一个起始房屋(带有房间和走廊),他们可以自由地离开。

我可以创建一个支持滚动或多个级别(例如楼梯)的世界吗?

当然。在这种情况下,getWorldFromInput 应该只返回在重放字符串中输入最后一个字符时屏幕上可见的世界部分。

我可以添加允许用户在创建世界之前自定义其角色的功能吗?

可以,但您需要创建第四个主菜单选项。您的项目必须完全支持此规范中描述的 API。也就是说,“N23123S”必须始终使用种子 23123 创建一个新世界,并且不得要求用户提供任何其他输入。

3A 自动评分器或 3A 人工检查是否需要主菜单?

不,我们不会对此进行评分。

我可以重新提交 3A 检查表单吗?

可以。但是如果您在截止日期之后重新提交,那将无效。

有现场检查吗?

是的,注册链接将在稍后在 Ed 上发布。

如果我们在 3A 检查期间被扣了一些分数,是否有可能把分数拿回来

是的,稍后将在 3C 脚本中提供一些相关说明!