improve translation and csci-1100-hw-7
This commit is contained in:
@@ -49,62 +49,62 @@ repost:
|
||||
<!--more-->
|
||||
|
||||
## 概述
|
||||
|
||||
本作业满分 100 分,并将于2024年4月18日星期四晚上11:59:59截止。它包含三个部分,前两个部分的分值不高,最终可能为零分,主要是为了提供调试信息。请下载 `hw8_files.zip` 并将其解压到你的 HW8 目录中。你会找到每个部分的数据文件和示例输出。
|
||||
|
||||
这份作业占你总作业成绩的100分,截止日期是2024年4月18日星期四晚上11:59:59。它分为三个部分。前两部分分值不高,甚至可能不计分。它们主要是为了给你提供信息,帮助你调试解决方案。请下载 `hw8_files.zip` 并将其解压到你的HW8目录中。你会在每个部分中找到数据文件和示例输出。
|
||||
|
||||
本次作业的目标是使用类进行编程。你将被要求编写一个模拟引擎,并使用类来封装数据和功能。你将有许多设计选择要做。虽然我们之前做过模拟,但这次会更复杂。特别重要的是,你要慢慢开始,构建一个适用于简单情况的程序,测试它,然后增加复杂性。我们将提供难度递增的测试用例。确保你慢慢开发并彻底测试。
|
||||
本作业的目标是使用类进行编程。你将被要求编写一个模拟引擎,并使用类封装数据和功能。你有许多设计选择要做出,虽然我们以前做过类似的模拟,但这次的难度更高。特别重要的是你要慢慢来,先建立适用于简单情况的程序并测试它,然后再增加复杂性。我们将提供逐渐困难程度不同的测试用例,请确保你逐步开发并彻底测试。
|
||||
|
||||
## 提交说明
|
||||
|
||||
在这份作业中,你将首次向Submitty提交多个文件,这些文件共同组成一个程序。请仔细遵循以下说明。
|
||||
在本作业中,你第一次需要提交多个文件到 Submitty 以构成一个完整的程序。请仔细遵循以下指示。
|
||||
|
||||
每个部分(第一部分、第二部分和第三部分)都需要你编写一个主程序:`hw8_part1.py`、`hw8_part2.py` 和 `hw8_part3.py`。除了主文件外,你还必须为每个部分提交三个模块,每个模块封装一个类。第一个是名为 `BerryField.py` 的文件,包含你的 `BerryField` 类;第二个是名为 `Bear.py` 的文件,包含你的 `Bear` 类;第三个是名为 `Tourist.py` 的文件,包含你的 `Tourist` 类。
|
||||
每部分(第一部分、第二部分和第三部分)都需要编写主程序:`hw8_part1.py`、`hw8_part2.py` 和 `hw8_part3.py`。此外,你还需要为每个部分提交三个模块文件,其中每一个封装一个类。第一个是名为 `BerryField.py` 的文件,包含你的 BerryField 类;第二个是名为 `Bear.py` 的文件,包含你的 Bear 类;第三个是名为 `Tourist.py` 的文件,包含你的 Tourist 类。
|
||||
|
||||
一如既往,确保你遵循程序结构指南。你将根据良好的程序结构和程序正确性进行评分。
|
||||
一如既往,请确保你遵循程序结构的指导原则。我们将根据良好的程序结构和程序正确性进行评分。
|
||||
|
||||
同样要记住,我们将继续测试作业的相似性。因此,请遵循我们关于可接受合作水平的指南。如果你需要复习,可以从课程材料中的资源部分下载指南。我们对此非常认真,必要时会毫不犹豫地施加处罚。
|
||||
请记住我们还将继续检查作业相似度。因此,请务必遵守合作指南中的可接受的合作程度。如果你需要复习,请从课程材料资源部分下载这些指南。我们对此非常重视,并且在必要时会毫不犹豫地施加处罚。
|
||||
|
||||
## 开始
|
||||
|
||||
你需要为本次作业编写至少三个类,分别对应于 `BerryField`、`Bear` 和 `Tourist`。我们将给你很大的自由来组织这三个类,但每个类必须至少有一个初始化方法和一个字符串方法。其他方法由你决定。每个类描述如下。
|
||||
你将需要为此作业编写至少三个类,分别对应 BerryField、Bear 和 Tourist。我们将给你很大的自由度来组织这三个类,但每个类必须有一个初始化器和一个字符串方法。其他的方法由你自己决定。每个类的描述如下:
|
||||
|
||||
### BerryField
|
||||
|
||||
`BerryField` 类必须维护和管理浆果的位置,作为一个方形行 X 列的网格,(0,0) 是左上角,(N-1, N-1) 是右下角。每个空间包含 0-10 个浆果单位。
|
||||
`BerryField` 类必须维护并管理浆果的位置作为包含 (0, 0) 的左上角和 (N-1, N-1) 的右下角的行 X 列网格。每个位置可以容纳 0-10 单位的浆果。
|
||||
|
||||
- 初始化类必须至少能够接收一个值网格(想想我们的数独实验),并使用它创建一个包含网格中值的浆果田。
|
||||
- 字符串函数必须至少能够生成当前浆果田状态的字符串。网格中的每个块必须使用 `"{:>4}"` 格式说明符进行格式化。如果该位置有熊,网格应显示 `"B"`;如果有游客,网格应显示 `"T"`;如果既有熊又有游客,网格应显示 `"X"`。如果既没有熊也没有游客,它应显示该位置的浆果数量。
|
||||
- 浆果会生长。`BerryField` 类必须提供一种方法来生长浆果田。当浆果生长时,任何值为 `1 <= 浆果数量 < 10` 的位置将增加一个浆果。
|
||||
- 浆果也会扩散。任何没有浆果且与有10个浆果的位置相邻的位置,在生长操作期间将获得1个浆果。
|
||||
- 初始化器类至少需要能够接收一个值网格(考虑我们之前的数独实验),并使用它来创建一个包含该网格中值的浆果田。
|
||||
- 字符串方法至少需要能够生成当前浆果田的状态字符串。每个网格块必须以 `"{:>4}"` 格式化,如果有熊在位置上,则网格应该有一个 "B";如果有游客在位置上,则网格应该有一个 "T";如果同时有熊和游客,则网格应该有一个 "X"。如果没有熊或游客,则应该是该位置的浆果数量。
|
||||
- 浆果会生长。`BerryField` 类必须提供一种方式来使浆果田生长。当浆果生长时,任何值为 `1 <= number of berries < 10` 的位置将增加一个浆果单位。
|
||||
- 浆果也会扩散。任何没有浆果且相邻于有 10 单位浆果的位置在生长操作期间会获得一个浆果。
|
||||
|
||||
### Bear
|
||||
|
||||
每只熊都有一个位置和一个它们正在行走的方向。熊也非常饥饿。在你的程序中,你必须管理两组熊。第一组是当前在田野中行走的熊。第二组是等待进入田野的熊队列。
|
||||
每个熊都有一个位置和行走的方向。熊也总是很饿。你的程序必须管理两个熊列表:第一个包含当前正在田中行走的熊,第二个是等待进入田野的熊队列。
|
||||
|
||||
- 初始化类必须至少能够接收行和列位置以及行进方向。
|
||||
- 字符串函数必须至少能够打印出熊的位置、行进方向以及熊是否在睡觉。
|
||||
- 熊可以向 `北 (N)`、`南 (S)`、`东 (E)`、`西 (W)`、`东北 (NE)`、`西北 (NW)`、`东南 (SE)` 或 `西南 (SW)` 行走。一旦熊开始向某个方向行走,它永远不会转弯。
|
||||
- 熊总是饥饿的。每回合,除非同一位置有游客,否则熊会吃掉该空间中所有可用的浆果,然后沿着当前方向移动到下一个空间。这种情况会持续到当前回合结束,直到熊吃了30个浆果或遇到游客。
|
||||
- 对于熊和游客在同一位置的特殊情况,熊不会吃任何浆果,但游客会神秘消失,熊会睡三回合。
|
||||
- 一旦熊到达田野的边界(其行或列变为-1或N),它就不再在田野中行走,不再需要考虑。
|
||||
- 初始化器类至少需要能够接收行、列位置以及旅行方向。
|
||||
- 字符串方法至少需要能够打印出熊的位置和行走方向,并且如果熊在睡觉,则显示这一点。
|
||||
- 熊可以向北 (N)、南 (S)、东 (E)、西 (W)、东北 (NE)、西北 (NW)、东南 (SE) 或西南 (SW) 方向行走。一旦一只熊开始朝一个方向行走,它就不会改变方向。
|
||||
- 熊总是很饿。每个回合,除非同一位置上有游客,否则熊会吃掉该空间的所有浆果,并然后朝其当前方向移动到下一个空间。在本回合中,这将一直持续直到熊吃了 30 单位的浆果或遇到一个游客为止。
|
||||
- 对于熊和游客在同一地点的情况,在同一个回合内,熊不会吃任何浆果,但游客神秘地消失了并且熊会在三个回合后睡觉。
|
||||
- 当一只熊达到田野边界(其行或列变为 -1 或 N)时,它将不再在田中行走,并且不需要再考虑。
|
||||
|
||||
### Tourist
|
||||
|
||||
每个游客都有一个位置。与熊一样,你必须维护当前在田野中的游客列表和等待进入田野的游客队列。
|
||||
每个游客都有一个位置。就像熊一样,你必须维护一个当前在田野中的游客列表和等待进入田野的游客队列。
|
||||
|
||||
- 初始化类必须至少能够接收行和列位置。
|
||||
- 如果熊在游客当前位置的4个单位内,游客会看到熊。
|
||||
- 字符串函数必须至少能够打印出游客的位置以及自上次看到熊以来经过的回合数。
|
||||
- 游客会站着观看。他们不会移动,但如果以下情况发生,他们会离开田野:
|
||||
1. 三回合内没有看到熊;他们会感到无聊并回家。
|
||||
2. 他们同时看到三只熊;他们会感到害怕并回家。
|
||||
3. 一只熊撞到他们;他们会神秘消失,不再出现在田野中。
|
||||
- 初始化器类至少需要能够接收行、列位置。
|
||||
- 游客可以看到距离他们当前位置 4 范围内的熊。
|
||||
- 字符串方法至少需要能够打印出游客的位置以及自他上次看到熊以来经过的回合数。
|
||||
- 游客站着观看。他们不会移动,但他们会离开田野的情况如下:
|
||||
- 如果三个回合没有看到熊,则他们会感到无聊并回家。
|
||||
- 如果他们同时可以看到三只熊,则会被吓跑并回家。
|
||||
- 如果一只熊撞到他们,游客会神秘消失并且再也无法在田野中找到。
|
||||
|
||||
## 执行
|
||||
|
||||
记得从Submitty的课程材料部分获取 `hw8_files_F19.zip`。它包含两个示例输入文件和你的程序的预期输出。
|
||||
请记住从 Submitty 的课程材料部分获取 `hw8_files_F19.zip`。它包含两个示例输入文件和你程序的预期输出。
|
||||
|
||||
对于这份作业,初始化你的类和程序所需的所有数据都可以在JSON文件中找到。你的每个部分都应该首先询问JSON文件的名称,读取文件,然后根据读取的数据创建所需的对象。以下代码将帮助你完成这一过程。
|
||||
对于本作业,所需的所有初始化类和程序的数据都可以在 JSON 文件中找到。每个部分应该首先询问 JSON 文件名、读取该文件并根据所读数据创建所需的对象。下面的代码将帮助你完成此操作。
|
||||
|
||||
```python
|
||||
f = open("bears_and_berries_1.json")
|
||||
@@ -116,39 +116,39 @@ print(data["active_tourists"])
|
||||
print(data["reserve_tourists"])
|
||||
```
|
||||
|
||||
你会看到,田野是一个列表的列表,其中每个 `[row][column]` 值是该位置的浆果数量;`"active_bears"` 和 `"reserve_bears"` 条目是定义熊的三元组 `(row, column, direction)` 的列表;`"active_tourists"` 和 `"reserve_tourists"` 条目是定义游客的二元组 `(row, column)` 的列表。
|
||||
你会看到田野是一个列表中的列表,其中每个 `[row][column]` 值是该位置的浆果数量;"active_bears" 和 "reserve_bears" 条目是定义熊的三元组 `(row, column, direction)` 的列表;以及 "active_tourists" 和 "reserve_tourists" 条目是定义游客的二元组 `(row, column)` 的列表。
|
||||
|
||||
## 第一部分
|
||||
|
||||
在第一部分中,读取JSON文件,创建你的对象,然后简单地报告模拟的初始状态,打印出浆果田、活跃的熊和活跃的游客。将你的程序命名为 `hw8_part1.py`,并连同你开发的三个类一起提交。
|
||||
在第一部分中,读取 JSON 文件、创建你的对象,并简单报告初始模拟状态,打印浆果田、活跃熊和活跃游客。将程序命名为 `hw8_part1.py` 并与你开发的三个类一起提交。
|
||||
|
||||
## 第二部分
|
||||
|
||||
在第二部分中,首先读取JSON文件,创建你的对象,再次打印出模拟的初始状态。然后运行五回合的模拟,步骤如下:
|
||||
在第二部分中,先同上一样读取 JSON 文件、创建你的对象并再次打印初始模拟状态。然后运行五回合的模拟通过:
|
||||
|
||||
- 生长浆果
|
||||
- 使浆果生长
|
||||
- 移动熊
|
||||
- 检查游客
|
||||
- 打印出模拟状态
|
||||
- 检查游客情况
|
||||
- 打印模拟的状态
|
||||
|
||||
不要担心备用熊或备用游客进入田野,但要报告任何离开的游客或熊。将你的程序命名为 `hw8_part2.py`,并连同你开发的三个类一起提交。
|
||||
不用担心储备熊和储备游客进入田野,但报告离开的任何游客或熊。将程序命名为 `hw8_part2.py` 并与你开发的三个类一起提交。
|
||||
|
||||
## 第三部分
|
||||
|
||||
在第三部分中,做你在第二部分中所做的一切,但做以下更改:
|
||||
在第三部分中,做第二部分的所有事情,并进行以下更改:
|
||||
|
||||
- 在检查游客后,如果备用队列中仍有熊且至少有500个浆果,将下一只备用熊添加到活跃熊中。
|
||||
- 然后,如果备用队列中仍有游客且至少有一只活跃的熊,将下一只备用游客添加到田野中。
|
||||
- 不要在5回合后停止,而是运行直到田野中没有更多的熊且备用列表中没有更多的熊,或者田野中没有更多的熊且没有更多的浆果。
|
||||
- 最后,不要每回合报告状态,而是每5回合报告一次,并在模拟结束时再次报告。
|
||||
- 在检查完游客之后,如果有剩余的储备队列中的熊且至少有 500 单位浆果,则将下一个储备熊添加到活跃熊列表。
|
||||
- 然后,如果仍有等待进入田野的游客且至少有一个活跃熊,则将下一个储备游客添加到田野中。
|
||||
- 不再在五个回合后停止,而是运行直到没有更多的熊在田里并且没有剩余的储备队列中的熊,或者如果没有更多的熊在田野上并且没有浆果了。
|
||||
- 最终,在每五个回合报告一次状态,并且当模拟结束时再次报告。
|
||||
|
||||
在过程中,报告任何离开或进入田野的游客或熊。将你的程序命名为 `hw8_part3.py`,并连同你开发的三个类一起提交。
|
||||
在整个过程中,报告离开或进入田野的任何游客或熊。将程序命名为 `hw8_part3.py` 并与你开发的三个类一起提交。
|
||||
|
||||
## 支持文件
|
||||
|
||||
{{< link href="HW8.zip" content="HW8.zip" title="下载 HW8.zip" download="HW8.zip" card=true >}}
|
||||
{{< link href="HW8.zip" content="HW8.zip" title="Download HW8.zip" download="HW8.zip" card=true >}}
|
||||
|
||||
## 解决方案
|
||||
|
||||
> [!NOTE]
|
||||
> 我没有在这份作业中获得满分,所以我没发布解决方案。我可能会重做以获得满分解决方案。之后,我会在这里添加它。
|
||||
> 我在这个作业中没有得到满分,所以我没有发布解决方案。我会重新做以获得满分的解决方案,并在此之后添加。
|
||||
Reference in New Issue
Block a user