您的任务是编写一个由位置数组(例如 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 字符来描绘动物:🐃、🐻、🐎、🦌、🐗、🐑、🐐、🐺、🐍、🦊、🦅、🐇、🦆、🐁、🐛。