常见问题 - 项目3: BYOW
主题
常见政策问题
本节正在积极建设中,随着更多问题出现将会不断完善。
宽度为2的走廊是否允许?
宽度为2的走廊是允许的,只要它与房间明显不同,并且生成频率不高。由于这个条件有些主观,你可以随意在 Ed 的相应主题帖中发布你世界的截图。作为一般经验法则,目标是在每个生成的世界中尽可能减少歧义。如果你的世界生成了太多宽度为2的走廊,我们更有可能确定太多瓦片是模糊的,从而认为你的世界无效。
重叠的房间是否允许?
是的,只要其他有效性标准仍然满足即可。
双墙(彼此直接相邻的墙)是否允许?
是的,只要每面墙都是作为其关联房间或走廊的一部分生成的。任何不直接或斜邻地板瓦片的墙瓦片都是无效的。
是否可以有空隙的入口?
不可以,如果任何地板瓦片与空隙瓦片相邻,你的世界将被视为无效。如果你有兴趣为你的世界生成一个"外部"区域,请先咨询工作人员。
我的世界大小必须是随机的吗?
不需要,你可以硬编码游戏画布的尺寸。任何填满约一半笔记本电脑屏幕的尺寸都是可以接受的。如果愿意,你可以使用实验9中项目3的画布尺寸。
两个结构可以共享同一面墙吗?
是的,只要它们满足所有其他世界要求(如不重叠)。
常见问题与错误
我无法显示文本 / 我的瓦片字符变奇怪了 / 我的 HUD 闪烁!
请参阅 常见UI问题 页面。
我的类的两个实例本应相等但却显示不相等。另外,我将类的实例设置为HashMap中的键,但当我尝试访问该键时找不到它。
确保如果你创建任何类,要重写
.equals()
方法和
.hashcode()
方法。这将保证两个相等的实例具有相同的哈希码
我没有通过输入为"lwsd"的测试。“lwsd”.
我们在调用lwsd之前提供了一个带有种子的有效输入。可能你没有正确处理持久性。确保输入精确的调用序列以复制此功能(编辑配置以使用有效参数调用getWorldFromInput,然后再次使用"lwsd"调用)。
我收到了一个
AccessControlException
- 我该怎么办?
确保你只创建/写入
文件
(不是
目录
)。这意味着你应该只写入以
.txt
结尾的
CWD
文件,例如——而不是任何其他文件夹或子文件夹。
我正在尝试实现
getWorldFromInput
但当我运行
Main.java
时我的世界没有渲染!
确保在getWorldFromInput中临时调用ter.renderFrame()(使用你适当的2-D TETile数组输入)- 你必须在提交给自动评分器之前注释掉这个方法调用。如果使用单独的类来生成随机世界,你可以通过在该类中创建一个main方法并调用ter.renderFrame()来进行调试。
在输入
:q
后如何关闭我的世界?
调用System.exit(0);你可以使用System.exit(0),但你不能在getWorldFromInput方法中使用它。
如果
getWorldFromInput()
的输入在
:q
之后有额外字符怎么办?
你不需要担心包含多个保存或保存后字符的回放字符串,即"N5SDD:QD"不被视为有效的回放字符串。
自动评分器错误
为什么 the 3A autograder saying “Could not initialize class edu.princeton.cs.algs4.StdDraw”?
在你的代码中某处,你的
getWorldFromInput
方法试图使用不允许的
StdDraw
类。例如,如果你调用
TERenderer.initialize()
,你就在使用
StdDraw
。当你调用
getWorldFromInput
时,不应该打开任何
StdDraw
窗口。我们看到过一些学生的代码只对某些种子打开
StdDraw
窗口,所以要非常仔细地检查。
自动评分器收到由
Integer.parseInt
导致的
NumberFormatException
。
Random
类接受
long
作为输入,所以我们提供的种子太大,无法放入
int
。你需要使用
Long
类来解析种子。
自动评分器告诉我我的世界不相同,尽管我在本地运行种子,世界看起来视觉上不同。
检查确保你使用的每个瓦片都由不同的字符表示。这在创建任何新瓦片时尤为重要。
我收到了与我的代码内部不一致的奇怪自动评分器消息。
确保你没有更改TETile.java的
character
字段或
character()
方法。
I’m getting “unreported exception
IOException
(or some other exception) must be caught or declared to be thrown” on the autograder, but my code works fine locally.
如果你在方法签名中抛出异常,自动评分器可能无法编译。相反,对抛出异常的那部分代码使用try-catch块,然后从方法签名中删除
throws
。
自动评分器似乎提前退出,即使我的代码没有bug?
确保你没有调用
System.exit()
。
自定义世界功能
我想制作一个可以探索户外或洞穴之类的世界,而不是一堆房间。我该怎么办?
没关系,你可以用种子为你的角色创建一个初始房屋(带有房间和走廊),让他们可以自由出入。
我可以制作一个支持滚动或多个关卡(即楼梯)的世界吗?
当然。在这种情况下,
getWorldFromInput
应该只返回在回放字符串中最后一个字符输入时屏幕上可见的世界部分。
我可以为用户在创建世界之前添加自定义角色的功能吗?
可以,但你需要创建一个第四个主菜单选项。你的项目必须完全支持本规范中描述的API。也就是说,"N23123S"必须始终使用种子23123创建一个新世界,并且不能向用户询问任何额外输入。
我需要3A自动评分器或3A手动检查的主菜单吗?
不需要,我们不会因此给你评分。
我可以重新提交3A检查表格吗?
可以。但如果你在截止日期后重新提交,那将是无效的。
有任何现场检查吗?
有的,报名将在稍后在Ed上发布。
如果我们在3A检查中丢失了一些分数,有可能拿回来吗?
是的,关于这一点稍后会在3C脚本中有说明!