당신의 임무는 위치 배열(예: 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

동물 특성:

동물당 무게, kg 위치당 이 종의 최대 동물 수 턴당 최대 속도(위치 수) 동물에게 완전히 먹이는 데 필요한 사료의 킬로그램 수
늑대 50 30 8
보아 15 30 1
여우 8 30 2 2
500 5 2 80
독수리 6 20 1
400 20 4 60
사슴 300 20 4 50
토끼 2 150 2 0.45
생쥐 0.05 500 1 0.01
염소 60 140 10
70 140 15
수퇘지 400 50 2 50
물소 700 10 100
오리 1 200 4 0.15
무한 궤도 0.01 1000 0 0
식물 1 200 해당 없음 해당 없음

2. 동물은 먹고 , 번식 하고, 이동 방향을 선택하는 방법을 가지고 있어야 합니다 .

3. 초식동물과 육식동물 클래스에서 eat 메소드를 구현할 수 있습니다 . 하지만 초식 오리는 애벌레를 잡아먹으니 조심하세요 .

4. 특정 종을 나타내는 특정 클래스에서 동물의 특성에 맞게 모든 방법을 수정할 수 있습니다.

5. 최소 10종의 초식종과 5종의 육식종을 생성해야 합니다(항목 1에 설명됨).

멀티스레딩

물론 루프만 사용하여 전체 프로그램을 하나의 스레드에 작성하는 것도 가능합니다. 하지만 멀티스레딩으로 작업하는 연습이 필요하므로 스레드와 스레드 풀을 사용해야 합니다. 식물 성장 및 동물 행동에 대한 반복 작업을 실행하는 하나 의 예약된 풀과 시스템 통계를 표시하는 작업. 또는 식물이나 동물이 있는 작업의 통계를 표시할 수 있습니다. 동물 작업 작업 내에서 일반적인 스레드 풀인 다른 스레드 풀을 사용할 수 있습니다. 이 풀에 할당할 작업을 결정합니다.

작업의 필수 부분:

  • 동물 계층 구조(OOP)
  • 동물 행동
  • 멀티스레딩
  • 각 반복에서 섬의 ​​상태에 대한 통계(콘솔에 표시됨)

작업의 선택적 부분:

  • 시뮬레이션 관리가 용이하도록 매개변수를 한곳에 표시
  • 콘솔 통계 대신 그래픽. 콘솔에서 의사 그래픽을 사용하거나 JavaFX, Swing...을 사용할 수 있습니다.
  • 시뮬레이션에 영향을 미칠 수 있는 다른 요소를 추가합니다.
    • 더 많은 종류의 동물
    • 다른 유형의 식물
    • 동물 그룹에 대한 사용자 지정 동작(예: 늑대는 개별적으로가 아니라 무리로 사냥 및 이동)
    • 특정 동물의 이동을 방해하는 강을 포함한 지상 지형

설정 정보(추가하기로 결정한 경우)

프로그램 시작 시 각종 설정(섬의 크기, 한 위치에 허용되는 최대 식물/동물 수, 특정 유형의 동물이 이동할 확률, 다른 종의 자손 수 등)을 변경하기 편리하도록 .), 예를 들어 별도의 클래스에 이러한 모든 설정을 배치해야 합니다. 다음 설정을 변경할 수 있어야 합니다.

  • 섬 크기
  • 시뮬레이션에서 클록 주기의 지속 시간
  • 시뮬레이션 시작 시 각 종의 동물 수
  • 시뮬레이션 중지 조건(예: 모든 동물이 사망한 경우)
  • 각 동물 유형의 자손 수

유니코드(가상 그래픽을 사용하기로 결정한 경우)

🐃, 🐻, 🐎, 🦌, 🐗, 🐑, 🐐, 🐺, 🐍, 🦊, 🦅, 🐇, 🦆, 🐁, 🐛와 같은 유니코드 문자를 사용할 수 있습니다.