토끼 타이쿤 소스 작업 중

1 개요[ | ]

토끼 타이쿤 소스 작업 중
  • 저자: Jjw
  • 2013-01-10

제한된 조건을 갖는 환경에서 피보나치 수열의 생성 방식에 따라 번식하는 토끼의 가상 생태를 보여주는 자바스크립트를 만들려고 한다.

일단 초기화면을 뿌리는 것 까지 짜 넣은 소스는;

html
Copy
<canvas id="field" width="150" height="150"></canvas>
<script>
  function draw_tile(x, y) {
    ctx.strokeStyle = "black";
    ctx.strokeRect(x * 50, y * 50, 50, 50);
    ctx.fillStyle = "green";
    ctx.fillRect(x * 50, y * 50, 50, 50);
  }

  function draw_rabbit(x, y) {
    ctx.beginPath();
    ctx.arc(x * 50 + 25, x * 50 + 25, 10, 0, Math.PI * 2, true);
    ctx.fillStyle = "white";
    ctx.fill();
  }

  var ctx = document.getElementById("field").getContext('2d');
  for (var x = 0; x < 3; x++) {
    for (var y = 0; y < 3; y++) {
      draw_tile(x, y);
    }
  }
  draw_rabbit(1, 1);

</script>

2 피보나치 수열을 따라 번식하는 토끼의 개요[ | ]

피보나치-토끼군단.jpg

언제나 잡다한 생각에 정작 할 일은 미적거리는 존진의 잡다한 이야기: 오늘은 피보나치 수열.

토끼 한 쌍이 있다. 어린 토끼다. 이 토끼는 한 달 후면 다 자라고, 다음 달 부터는 매 달 한 쌍의 새끼를 낳는다. 이렇게 태어난 토끼는 또 한 달이면 다 자라고 다음 달 부터는 새끼를 낳는다. 물론 그 사이에 다 자란 토끼는 열심히 매달 한 쌍씩 새끼를 낳는다. 이 렇게 하여 6개월이면 모두 몇 마리가 될까? 답은 밑의 그림에 나와 있다. 그러면 12개월 뒤에는?

무언가 누적하여 발생하는 양에 대해서는 발생을 방해하는 요소가 없는 한 피보나치 수열이 적용 가능하다. 꽃잎의 숫자, 해바라기 씨앗의 수, 솔방울의 갈라진 씨받침의 수, 조금 더 응용하면 소라껍질의 증가 비율부터 나선은하의 곡률까지..

어쨌거나, 토끼군단을 그려 놓고 보니 좀 무섭다... 뭐 그냥 그렇다고.


토끼 타이쿤의 조건:

  • 시간은 매 턴으로 진행된다.
  • 필드 f(int x, int y)에는 풀 double grs 가 자랄 공간과 토끼 2 마리가 들어설 수 있는 공간이 있다.
  • 풀은 매 턴당 m 만큼 성장하지만 n을 초과하지는 않는다.
  • 토끼는 매 턴당 k의 풀을 먹고 grs = 0 이면 옆 칸으로 옮긴다. 하지만 옆 칸이 꽉차 있으면 옮기지 못한다.
  • grs = 0 인 필드에 있을 때 마다 건강 h 가 1 씩 감소하고 h=0 이 되면 죽는다.
  • 풀을 먹으면 턴 당 1의 h 가 회복된다. h의 초기값과 최대값은 모두 2 이다.
  • 토끼는 수명 int age 는 매 턴마다 1 씩 늘어나며 q 가 되면 죽는다.
  • 토끼는 태어나서 s 턴 까지는 어린 토끼로 새끼를 낳을 수 없고, 이 시기가 지나면 t 턴까지 다음의 조건을 만족할 경우 새끼를 낳는다.
    • 하나의 필드에 s < age < t 인 암수 토끼 한쌍과 g>0 인 상태의 풀이 있어야 한다.
    • 인접한 필드 가운데 한 곳 이상의 빈 필드가 있어야 한다.
  • 토끼의 수명 age의 최대값 q = s + p + t 와 같이 분할될 수 있다. 즉 토끼는 유년기 s, 가임기 p, 노인기 t 를 산다.

이렇게 까지 짜 넣으면 매 턴이 지날 때 마다 토끼가 이리 저리 옮겨가며 새끼를 낳을 것이다. 필드가 충분히 크다면 처음의 얼마 간은 피보나치 수열에 따라 증가할 것이다.

옵션: 토끼의 개체수가 20이 초과될 때 여우 한쌍 (수명과 가임기간이 토끼보다 조금 더 길지만 두 턴당 한번씩 새끼를 낳는다)이 필드에 생긴다. 여우는 두 칸 너머의 토끼를 발견할 수 있고 매 턴당 최대 두 칸 까지 움직일 수 있다. 여우가 토끼가 있는 필드에 도착하면 매 턴 당 1마리의 토끼를 잡아 먹는다. 토끼는 여우가 바로 옆 칸에 도착해야 여우를 발견할 수 있고 매 턴당 1칸 밖에 움직이지 못한다.

이 정도로 틀 잡고 풀이 빽빽하게 자라있는 100*100 필드에 한쌍의 암수 토끼를 던져 놓습니다...

하지만 일단 3*3에서 포식자 없이 키워보자.

3 프로그램 실행 예상[ | ]

피보나치-토끼군단2.jpg

3*3 필드에서 그려서 돌려본 "토끼 타이쿤" 6 턴까지 피보나치 수열을 따른다.

4 같이 보기[ | ]

5 참고[ | ]