您的任务是编写一个由位置数组(例如 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 项中描述)。
多线程
当然,可以只使用循环在一个线程上编写整个程序。但是我们需要练习使用多线程,所以你必须使用线程和线程池。一个计划池用于运行植物生长和动物活动的重复性任务,以及一个用于显示系统统计信息的任务。或者,您可以在包含植物或动物的任务中显示统计数据。在动物动作任务中,您可以使用另一个线程池——一个普通线程池。您决定将哪些任务分配给该池。
任务的强制性部分:
任务的可选部分:
|
关于设置(如果您决定添加它们)
为了方便在启动程序时更改各种设置(岛屿大小、一个位置允许的最大植物/动物数量、特定类型动物移动的概率、不同物种的后代数量等) .),您需要将所有这些设置放在某个地方,例如,放在一个单独的类中。应该可以更改以下设置:
- 岛屿大小
- 模拟中时钟周期的持续时间
- 模拟开始时每个物种的动物数量
- 停止模拟的条件(例如所有动物都死了)
- 每种动物的后代数量
Unicode(如果你决定做伪图形)
您可以使用 Unicode 字符来描绘动物:🐃、🐻、🐎、🦌、🐗、🐑、🐐、🐺、🐍、🦊、🦅、🐇、🦆、🐁、🐛。
GO TO FULL VERSION