CodeGym /课程 /All lectures for ZH purposes /模块 2 的最终项目练习

模块 2 的最终项目练习

All lectures for ZH purposes
第 1 级, 课程 748
可用

您的任务是编写一个由位置数组(例如 100x20 矩阵)组成的参数化岛屿模型。这些地点将充满植物和动物。动物可以:

  • 吃植物和/或其他动物(如果它们所在的位置有合适的食物),
  • 移动(到邻近位置),
  • 品种(如果一个位置存在两种),
  • 饿死或被吃掉。

面向对象

在创建动物宿主时,应尽可能使用 OOP:所有物种都将派生自一个抽象的 Animal 类,该类将包含所有动物共有的行为。如果特定动物在喂养、繁殖、运动等方面具有特定特征,则它们需要重写 Animal 类的方法。

这是您需要做的:

1.创建类层次结构:

  • 食肉动物:狼、蟒蛇、狐狸、熊、鹰

  • 食草动物:马、鹿、兔、鼠、山羊、绵羊、野猪、水牛、鸭、毛毛虫

  • 植物

下表显示了动物在与“食物”处于同一位置时吃“食物”的可能性有多大。再来看看“狼吃兔子”的情况。表中的数字是 60。这意味着如果狼和兔子在同一位置,则狼有 60% 的机会吃掉兔子。您需要使用多线程随机数生成器。

狼 蟒蛇 狐狸 熊 鹰 马 鹿 兔子 老鼠 山羊 羊 公猪 水牛 鸭子 毛虫 植物
狼 - 0 0 0 0 10 15 60 80 60 70 15 10 40 0 0
蟒蛇 0 - 15 0 0 0 0 20 40 0 0 0 0 10 0 0
狐狸 0 0 - 0 0 0 0 70 90后 0 0 0 0 60 40 0
熊 0 80 0 - 0 40 80 80 90后 70 70 50 20 10 0 0
鹰 0 0 10 0 - 0 0 90后 90后 0 0 0 0 80 0 0
马 0 0 0 0 0 - 0 0 0 0 0 0 0 0 0 100
鹿 0 0 0 0 0 0 - 0 0 0 0 0 0 0 0 100
兔子 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 100
老鼠 0 0 0 0 0 0 0 0 - 0 0 0 0 0 90后 100
山羊 0 0 0 0 0 0 0 0 0 - 0 0 0 0 0 100
羊 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 100
公猪 0 0 0 0 0 0 0 0 50 0 0 - 0 0 90后 100
水牛 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 100
鸭子 0 0 0 0 0 0 0 0 0 0 0 0 0 - 90后 100
毛虫 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - 100

动物特征:

每只动物的体重,公斤 每个位置该物种的最大动物数量 每转最大速度(位置数) 完全喂养动物所需的食物公斤数
狼 50 30 3个 8个
蟒蛇 15 30 1个 3个
狐狸 8个 30 2个 2个
熊 500 5个 2个 80
鹰 6个 20 3个 1个
马 400 20 4个 60
鹿 300 20 4个 50
兔子 2个 150 2个 0.45
老鼠 0.05 500 1个 0.01
山羊 60 140 3个 10
羊 70 140 3个 15
公猪 400 50 2个 50
水牛 700 10 3个 100
鸭子 1个 200 4个 0.15
毛虫 0.01 1000 0 0
植物 1个 200 不适用 不适用

2. 动物必须有进食、繁殖和选择运动方向的方法。

3.可以在食草类和食肉类中实现eat方法。但要小心,食草鸭子吃毛毛虫。

4. 在代表特定物种的特定类中,您可以修改所有方法以适应动物的特征。

5. 你需要创造至少 10 个草食动物物种和 5 个食肉动物物种(在第 1 项中描述)。

多线程

当然,可以只使用循环在一个线程上编写整个程序。但是我们需要练习使用多线程,所以你必须使用线程和线程池。一个计划池用于运行植物生长和动物活动的重复性任务,以及一个用于显示系统统计信息的任务。或者,您可以在包含植物或动物的任务中显示统计数据。在动物动作任务中,您可以使用另一个线程池——一个普通线程池。您决定将哪些任务分配给该池。

任务的强制性部分:

  • 动物层次结构 (OOP)
  • 动物行为
  • 多线程
  • 每次迭代时岛屿状态的统计信息(显示在控制台上)

任务的可选部分:

  • 在一处显示参数,以便于管理模拟
  • 图形而不是控制台统计信息。您可以在控制台中使用伪图形,也可以使用 JavaFX、Swing...
  • 添加其他可能影响模拟的因素:
    • 更多种类的动物
    • 不同种类的植物
    • 一组动物的自定义行为(例如,狼作为一个整体而不是单独狩猎和移动)
    • 地面地形,包括阻碍某些动物移动的河流

关于设置(如果您决定添加它们)

为了方便在启动程序时更改各种设置(岛屿大小、一个位置允许的最大植物/动物数量、特定类型动物移动的概率、不同物种的后代数量等) .),您需要将所有这些设置放在某个地方,例如,放在一个单独的类中。应该可以更改以下设置:

  • 岛屿大小
  • 模拟中时钟周期的持续时间
  • 模拟开始时每个物种的动物数量
  • 停止模拟的条件(例如所有动物都死了)
  • 每种动物的后代数量

Unicode(如果你决定做伪图形)

您可以使用 Unicode 字符来描绘动物:🐃、🐻、🐎、🦌、🐗、🐑、🐐、🐺、🐍、🦊、🦅、🐇、🦆、🐁、🐛。

评论
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION