あなたのタスクは、位置の配列 (たとえば、100x20 行列) で構成されるパラメーター化されたアイランドのモデルをプログラムすることです。場所には植物や動物が生息します。動物は次のことができます。

  • 植物や他の動物を食べる(その場所に適切な食べ物がある場合)、
  • (近隣の場所に)移動する、
  • 品種 (同じ場所に 2 種類が存在する場合)、
  • 飢えで死ぬか、食べられるか。

OOP

動物のホストを作成するときは、できる限り OOP を使用する必要があります。すべての種は、すべての動物に共通の動作を含む 1 つの抽象的な 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

動物の特徴:

動物あたりの体重、kg 場所ごとのこの種の動物の最大数 1 ターンあたりの最大速度 (位置の数) 動物を完全に養うのに必要な餌のキログラム数
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 で説明)。

マルチスレッド化

もちろん、ループのみを使用してプログラム全体を 1 つのスレッドで記述することも可能です。ただし、マルチスレッドを扱う練習が必要なので、スレッドとスレッド プールを使用する必要があります。植物の成長と動物の行動に関する定期的なタスクを実行する1 つのスケジュールされたプールと、システム統計を表示するタスク。あるいは、植物や動物のタスクで統計を表示することもできます。動物アクション タスク内では、別のスレッド プール (通常のスレッド プール) を使用できます。このプールにどのタスクを割り当てるかを決定します。

タスクの必須部分:

  • 動物階層 (OOP)
  • 動物の行動
  • マルチスレッド化
  • 各反復におけるアイランドの状態に関する統計 (コンソールに表示)

タスクのオプション部分:

  • パラメータを 1 か所に表示してシミュレーションの管理を容易にします
  • コンソール統計の代わりにグラフィック。コンソールで疑似グラフィックスを使用することも、JavaFX、Swing などを使用することもできます。
  • シミュレーションに影響を与える可能性のある他の要素を追加します。
    • より多くの種類の動物
    • さまざまな種類の植物
    • 動物のグループのカスタム動作 (たとえば、オオカミは別々ではなく群れとして狩りや移動を行います)
    • 特定の動物の移動を妨げる川を含む地面の地形

設定について(追加する場合)

プログラムの開始時にさまざまな設定を変更しやすくするため (島のサイズ、1 つの場所で許容される動植物の最大数、特定の種類の動物が移動する確率、異なる種の子孫の数など) .)、これらすべての設定をどこか、たとえば別のクラスに置く必要があります。次の設定を変更できるはずです。

  • 島の大きさ
  • シミュレーションにおけるクロックサイクルの継続時間
  • シミュレーション開始時の各種の動物の数
  • シミュレーションを停止するための条件 (例: すべての動物が死亡した)
  • 動物の種類ごとの子孫の数

Unicode (疑似グラフィックスを使用する場合)

Unicode 文字を使用して動物を表現できます: 🐃、🐻、🐎、🦌、🐗、🐑、🐐、🐺、🐍、🦊、🦅、🐇、🦆、🐁、🐛。