fork(3) download
  1. <?php
  2.  
  3. class Battlefield
  4. {
  5. public $height;
  6. public $width;
  7. public $totalTurns;
  8. const EMPTYCELL = " . "; //пустая ячейка на поле, не занятая живностью
  9. const TAKENCELL = " _ "; //использую константу для недопущения спавна на одно место.
  10.  
  11.  
  12. public function __construct($height, $width, $totalTurns)
  13. {
  14. $this->height = $height;
  15. $this->width = $width;
  16. $this->totalTurns = $totalTurns;
  17. }
  18.  
  19. //добавление новых животных в массив животных с рандомным указанием их стартовой позиции
  20. public $animalList = [];
  21. public function addAnimal(Animal $animal)
  22. {
  23. $this->animalList[] = $animal;
  24. $animal->setMap($this);
  25. for ($i = 0; $i <= 100; $i++) {
  26. $y = rand(0, $this->height);
  27. $x = rand(0, $this->width);
  28. if ($this->arrayField[$y][$x] == Battlefield::EMPTYCELL) {
  29. $animal->y = $y;
  30. $animal->x = $x;
  31. $this->arrayField[$y][$x] = Battlefield::TAKENCELL;
  32. break;
  33. }
  34. }
  35. }
  36.  
  37. //удаляем животное из базы игры.
  38. public function removeAnimal(Animal $deadAnimal)
  39. {
  40. foreach($this->animalList as $key => $animal){
  41. if($animal === $deadAnimal) {
  42. unset($this->animalList[$key]);
  43. }
  44. }
  45. }
  46.  
  47. //создание массива массивов - визуальное поле игровое, короче
  48. public $arrayField = [];
  49. public function setField()
  50. {
  51. for ($i = 0; $i <= $this->height; $i++) {
  52. for ($j = 0; $j <= $this->width; $j++) {
  53. $this->arrayField[$i][] = Battlefield::EMPTYCELL;
  54. }
  55. }
  56. }
  57. //заполняю поле живностью
  58. public function fillFieldWithAnimals()
  59. {
  60. foreach ($this->animalList as $animal) {
  61. $this->arrayField[$animal->y][$animal->x] = $animal->sign;
  62. }
  63. }
  64. //печать текущего состояния поля
  65. public function printField()
  66. {
  67. for ($i = 0; $i <= $this->height; $i++) {
  68. foreach ($this->arrayField[$i] as $place) {
  69. print $place;
  70. }
  71. print PHP_EOL;
  72. }
  73. }
  74. //возможность походить куда-либо, первый ход - остаться на месте, всегда доступен
  75. public function getPossibilityOfMovement(array $arrayMove)
  76. {
  77. foreach ($arrayMove as $i => $move) {
  78. if (isset($this->arrayField[$move->y][$move->x])) {
  79. if ($this->arrayField[$move->y][$move->x] != Battlefield::EMPTYCELL AND $i != 0) {
  80. unset($arrayMove[$i]);
  81. }
  82. } else {
  83. unset($arrayMove[$i]);
  84. }
  85. }
  86. return $arrayMove;
  87. }
  88.  
  89. //высчитать расстояние между двумя объектами
  90. public static function getDistance($y, $x, $y2, $x2)
  91. {
  92. $distanceY = abs($y - $y2);
  93. $distanceX = abs($x - $x2);
  94. if($distanceY>=$distanceX){
  95. return $distanceY;
  96. } else {
  97. return $distanceX;
  98. }
  99. }
  100. //механизм поедания мыши
  101. public function eating(Cat $cat, Mouse $mouse)
  102. {
  103. $mouse->map->arrayField[$mouse->y][$mouse->x] = $cat->altSign;
  104. $cat->map->arrayField[$cat->y][$cat->x] = Battlefield::EMPTYCELL;
  105. $cat->y = $mouse->y;
  106. $cat->x = $mouse->x;
  107. self::removeAnimal($mouse);
  108. $cat->isAsleep = TRUE;
  109. $cat->killed++;
  110.  
  111. }
  112.  
  113. public function findNearestAnimal(Animal $centreAnimal, $id)
  114. {
  115. $nearestCat = NULL;
  116. $nearestMouse = NULL;
  117. $nearestDog = NULL;
  118. $minDistance1 = INF;
  119. $minDistance2 = INF;
  120. $minDistance3 = INF;
  121. foreach ($this->animalList as $animal) {
  122. if ($animal instanceof Cat AND $animal != $centreAnimal) {
  123. $distance = self::getDistance($animal->y, $animal->x, $centreAnimal->y, $centreAnimal->x);
  124. if ($distance <= $centreAnimal->los AND $distance < $minDistance1) {
  125. $minDistance1 = $distance;
  126. $nearestCat = $animal;
  127. }
  128. }
  129. if($animal instanceof Mouse AND $animal != $centreAnimal) {
  130. $distance = self::getDistance($animal->y, $animal->x, $centreAnimal->y, $centreAnimal->x);
  131. if ($distance <= $centreAnimal->los AND $distance < $minDistance2) {
  132. $minDistance2 = $distance;
  133. $nearestMouse = $animal;
  134. }
  135. }
  136. if($animal instanceof Dog AND $animal != $centreAnimal) {
  137. $distance = self::getDistance($animal->y, $animal->x, $centreAnimal->y, $centreAnimal->x);
  138. if ($distance <= $centreAnimal->los AND $distance < $minDistance3) {
  139. $minDistance3 = $distance;
  140. $nearestDog = $animal;
  141. }
  142. }
  143. }
  144.  
  145. switch($id):
  146. case 1:
  147. return $nearestMouse;
  148. break;
  149. case 2:
  150. return $nearestCat;
  151. break;
  152. case 3:
  153. return $nearestDog;
  154. break;
  155. default:
  156. return NULL;
  157. break;
  158. endswitch;
  159. }
  160.  
  161.  
  162. //измеряю расстояние до границ поля
  163. public function measureDistanceToEdges($y, $x)
  164. {
  165. $distanceY = 0;
  166. $distanceX = 0;
  167. if($y >= $this->height/2) {
  168. $distanceY = $this->height - $y;
  169. } else {
  170. $distanceY = $y - 1;
  171. }
  172.  
  173. if($x >= $this->width/2) {
  174. $distanceX = $this->width - $x;
  175. } else {
  176. $distanceX = $x - 1;
  177. }
  178.  
  179. $edgeDisntances = [
  180. "y" => $distanceY,
  181. "x" => $distanceX
  182. ];
  183. return $edgeDisntances;
  184.  
  185. }
  186.  
  187. //выбираем лучший ход, когда мышь почуяла кошку и пытается спастись.
  188. public function pickTheBestChoice(Mouse $mouse, Cat $cat, Movement $move)
  189. {
  190. $movePoints = 0;
  191. //смотрю, чтоб новая позиция увеличила расстояние меж мышью и котофеем
  192. //т.к. это оче важно даю 30 поинтов
  193. $currentDistance = self::getDistance($mouse->y, $mouse->x, $cat->y, $cat->x);
  194. $newDistance = self::getDistance($move->y, $move->x, $cat->y, $cat->x);
  195. if($newDistance > $currentDistance) { $movePoints += 50; }
  196. if($newDistance < $currentDistance) { $movePoints += 0; }
  197.  
  198. //смотрю, чтоб новая позиция была подальше от краёв и углов.
  199. //если дальше, даю 10 баллов
  200. $currentEdgeDistance = self::measureDistanceToEdges($mouse->y, $mouse->x);
  201. $newEdgeDistance = self::measureDistanceToEdges($move->y, $move->x);
  202. if(array_sum($newEdgeDistance) > array_sum($currentEdgeDistance)) { $movePoints += 30; }
  203.  
  204. //даю поинты за то, чтоб мышь шла наискось (т.к. стояние наискось может иметь то же расстояние,
  205. //что и на одной линии, но поймать сложнее. Иными словами, мышь ПЕТЛЯЕТ
  206. if($move->y != $cat->y AND $move->x != $cat->x) { $movePoints += 15; }
  207. //даю оче много поинтов за то, чтоб прижаться к псу, ЕСЛИ он рядом.
  208. // НЕ задаю целью мышек бегать за псом.
  209. $nearestDog = $mouse->map->findNearestAnimal($mouse, 3);
  210. if($nearestDog != NULL) {
  211. $newDistanceToTheDog = self::getDistance($move->y, $move->x, $nearestDog->y, $nearestDog->x);
  212. if ($newDistanceToTheDog == 1) { $movePoints += 70; }
  213. }
  214.  
  215. return $movePoints;
  216. }
  217.  
  218. //выбираем лучший ход для кошки. Тут незамысловато:
  219. //дистанция должна сокращаться, отдаём предпочтение тому ходу, что
  220. //выведет нас на одну линию с добычей.
  221. //также боимся собаки, не встаём на ближайшую клетку с ней
  222. //
  223. //если расстояние = 1, то включается код ДЗЕРО - уничтожить мышь одним прыжком
  224. //и заканчиваем функцию.
  225. public function huntDown(Cat $cat, Mouse $mouse, Movement $move)
  226. {
  227. $movePoints = 0;
  228. $codeZero = -1;
  229. $nearestDog = $cat->map->findNearestAnimal($cat, 3);
  230. $distanceBetweenDogAndMouse = self::getDistance($mouse->y, $mouse->x, $nearestDog->y, $nearestDog->x);
  231. if($nearestDog != NULL){
  232. $newDistanceToTheDog = self::getDistance($move->y, $move->x, $nearestDog->y, $nearestDog->x);
  233. } else {
  234. $newDistanceToTheDog = INF;
  235. }
  236. $nearestFriendMouse = $mouse->map->findNearestAnimal($mouse, 1);
  237. if($nearestFriendMouse != NULL) {
  238. $distanceToFriendMouse = self::getDistance($nearestFriendMouse->y, $nearestFriendMouse->x, $mouse->y, $mouse->x );
  239. } else {
  240. $distanceToFriendMouse = INF;
  241. }
  242. $currentDistance = self::getDistance($cat->y, $cat->x, $mouse->y, $mouse->x);
  243. if($currentDistance == 1 AND $distanceBetweenDogAndMouse > 1 AND $distanceToFriendMouse != 1){
  244. return $codeZero;
  245. }
  246. $newDistance = self::getDistance($move->y, $move->x, $mouse->y, $mouse->x);
  247. if($newDistance < $currentDistance) { $movePoints += 40; }
  248.  
  249. if($move->y == $mouse->y OR $move->x == $mouse->x) { $movePoints += 10; }
  250. if($newDistanceToTheDog == 1){ $movePoints -= 100; }
  251.  
  252. return $movePoints;
  253. }
  254.  
  255.  
  256. public function letTheGameBegin()
  257. {
  258. $this->fillFieldWithAnimals();
  259. for ($i = 0; $i <= $this->totalTurns; $i++) {
  260. $this->printField();
  261. echo PHP_EOL;
  262. echo "Dogs 'team': " . PHP_EOL;
  263. foreach ($this->animalList as $animal) {
  264. if ($animal instanceof Dog) {
  265. echo $animal . PHP_EOL .
  266. $animal->go();
  267. }
  268. }
  269.  
  270. echo PHP_EOL;
  271. echo "Mice team: " . PHP_EOL;
  272. foreach ($this->animalList as $animal) {
  273. if($animal instanceof Mouse){
  274. echo $animal . PHP_EOL;
  275. $animal->go();
  276. $animal->turnsAlive++;
  277. }
  278. }
  279. echo PHP_EOL;
  280. echo "Cats team: " . PHP_EOL;
  281. foreach ($this->animalList as $animal) {
  282. if($animal instanceof Cat){
  283. echo $animal;
  284. if($animal->isAsleep == TRUE){
  285. echo " ". $animal->name . " is sleeping at the moment." . PHP_EOL;
  286. } else {
  287. echo PHP_EOL;
  288. }
  289. $animal->go();
  290.  
  291. }
  292.  
  293. }
  294. echo PHP_EOL;
  295. }
  296. }
  297.  
  298. }
  299.  
  300. class Movement {
  301. public $x;
  302. public $y;
  303. public function __construct($y, $x){
  304. $this->y = $y;
  305. $this->x = $x;
  306. }
  307. }
  308.  
  309. abstract class Animal {
  310. public $name; //имя
  311. public $x; //координата по ширине
  312. public $y; //по высоте
  313. public $map; //аналог объекта $field, только для животных
  314. public $sign; //значок на карте
  315. public $los; //обзор
  316.  
  317. abstract public function makeBestMove(array $arrayMove);
  318. abstract public function go();
  319. abstract public function moves();
  320.  
  321. public static function create(){
  322.  
  323. }
  324.  
  325. //для вывода статистики под полем игры
  326. public function __toString()
  327. {
  328. return substr($this->sign, 1, 1) .". ". $this->name
  329. . "'s position: " . "Y: ". $this->y . " X: ". $this->x . ".";
  330. }
  331.  
  332. public function __construct($name)
  333. {
  334. $this->name = $name;
  335. }
  336.  
  337. //добыть карту животного, то же, что и field, только относительно животного буду называть её map.
  338. //то есть $animal->map это та же хуйня, что и $field и можно обращаться к переменным класса Battlefield
  339. public function setMap(Battlefield $field)
  340. {
  341. $this->map = $field;
  342. }
  343.  
  344. //совершить ход. Тут идёт работа с визуальным массивом игрового поля + обновляем свои координаты
  345. public function makeMove(Movement $move)
  346. {
  347. $this->map->arrayField[$this->y][$this->x] = Battlefield::EMPTYCELL;
  348. $this->map->arrayField[$move->y][$move->x] = $this->sign;
  349. $this->y = $move->y;
  350. $this->x = $move->x;
  351.  
  352. }
  353. }
  354.  
  355. class Mouse extends Animal {
  356.  
  357. public $sign = " m ";
  358. //решил не задавать жёстко поле зрения, чтоб можно было каждой прописывать своё,
  359. ////делая "слеповатых" мышей
  360.  
  361. public $turnsAlive = 0;
  362.  
  363. public function __toString()
  364. {
  365. return parent::__toString() . " Alive for " . $this->turnsAlive . " turns.";
  366. }
  367.  
  368. //конструктор, добавляю поле зрения
  369. public function __construct($name, $los)
  370. {
  371. parent::__construct($name);
  372. $this->los = $los;
  373. }
  374.  
  375. //возможные базовые ходы
  376. public function moves()
  377. {
  378. $move1 = new Movement($this->y, $this->x);
  379. $move2 = new Movement($this->y + 1, $this->x);
  380. $move3 = new Movement($this->y - 1, $this->x);
  381. $move4 = new Movement($this->y, $this->x + 1);
  382. $move5 = new Movement($this->y, $this->x - 1);
  383. $arrayMove = array( $move1, $move2, $move3, $move4, $move5 );
  384.  
  385. return $arrayMove; //на выходе массив с возможными ходами, не выходящими за рамки игрового поля
  386. }
  387.  
  388. //обобщающая функция для передвижения, сделал для краткости
  389. //суть: мышь ходит так - через свою функцию makeBestMove, куда берёт аргументом
  390. //массив из всех ходов из функции moves()
  391. public function go()
  392. {
  393. $this->makeBestMove($this->moves());
  394. }
  395.  
  396. //функция, которая решает, какой ход из всех доступных совершить
  397. public function makeBestMove(array $arrayMove)
  398. {
  399. //проверяю, вообще можно ли ходить туда-то, т.е. свободна ли ячейка.
  400. $arrayMove = $this->map->getPossibilityOfMovement($arrayMove);
  401.  
  402. //ищу ближайшую кошку в обзоре, если её нет, то мышь спокойно идёт, куда хочет.
  403. //если есть в поле зрения котофей, то запускаю функцию по оценке следующего хода.
  404. $nearestCat = $this->map->findNearestAnimal($this, 2);
  405. switch($nearestCat):
  406. case NULL:
  407. $finalMove = $arrayMove[array_rand($arrayMove)]; //рандомный ход спокойной мыши
  408. break;
  409. case !NULL:
  410. $maxPoints = -INF;
  411. foreach($arrayMove as $move) {
  412. $points = $this->map->pickTheBestChoice($this, $nearestCat, $move);
  413. if($points > $maxPoints) {
  414. $maxPoints = $points;
  415. $finalMove = $move;
  416. }
  417. }
  418. break;
  419. endswitch;
  420.  
  421. $this->makeMove($finalMove);
  422. }
  423.  
  424. }
  425.  
  426. class Cat extends Animal
  427. {
  428. public $sign = " K ";
  429. public $altSign = " @ "; //альтернативный значок
  430. public $los = INF;
  431. public $isAsleep = FALSE;
  432. public $tireLevel = 0; //счётчики для сна
  433. public $daysSlept = 0;
  434. public $killed = 0;
  435.  
  436.  
  437. public function __toString()
  438. {
  439. return parent::__toString() . "Has killed " . $this->killed . " mice.";
  440. }
  441.  
  442. //обобщающая функция ходьбы для кота. Принцип тот же, что и у мыхана, только проверяем усталость
  443. public function go()
  444. {
  445. //пробуждаемся
  446. if($this->daysSlept == 1){
  447. $this->isAsleep = FALSE;
  448. $this->tireLevel = 0;
  449. $this->daysSlept = 0;
  450. $this->map->arrayField[$this->y][$this->x] = $this->sign;
  451. }
  452. //сам ход, если спим - считаем дни, если нет - ходим.
  453. if($this->isAsleep == TRUE){
  454. $this->tireLevel = 0;
  455. $this->daysSlept++;
  456. $this->map->arrayField[$this->y][$this->x] = $this->altSign;
  457. } else {
  458. $this->makeBestMove($this->moves());
  459. $this->tireLevel++;
  460. }
  461. //проверяем усталость, если 8, то ложимся спать
  462. if($this->tireLevel == 8){
  463. $this->isAsleep = TRUE;
  464. $this->tireLevel = 0;
  465. $this->map->arrayField[$this->y][$this->x] = $this->altSign;
  466. }
  467. }
  468.  
  469. public function moves()
  470. {
  471. $move1 = new Movement($this->y, $this->x);
  472. $move2 = new Movement($this->y + 1, $this->x);
  473. $move3 = new Movement($this->y - 1, $this->x);
  474. $move4 = new Movement($this->y, $this->x + 1);
  475. $move5 = new Movement($this->y, $this->x - 1);
  476. $move6 = new Movement($this->y + 1, $this->x + 1);
  477. $move7 = new Movement($this->y - 1, $this->x - 1);
  478. $move8 = new Movement($this->y + 1, $this->x - 1);
  479. $move9 = new Movement($this->y - 1, $this->x + 1);
  480. $arrayMove = array( $move1, $move2, $move3, $move4, $move5, $move6, $move7, $move8, $move9 );
  481.  
  482. return $arrayMove;
  483. }
  484. //выбираем лучший ход кота. Т.к. он видит всё, то ему проще. Проверяем, свободна ли клетка для ходьбы,
  485. //ищем ближайщего мыхана и бежим к нему.
  486. //если расстояние меж ними = 1, то жрём.
  487. public function makeBestMove(array $arrayMove)
  488. {
  489. $arrayMove = $this->map->getPossibilityOfMovement($arrayMove);
  490.  
  491. $nearestMouse = $this->map->findNearestAnimal($this, 1);
  492. if($nearestMouse == NULL){
  493. $finalMove = $arrayMove[array_rand($arrayMove)];
  494. } else {
  495. $maxPoints = -INF;
  496. foreach ($arrayMove as $move) {
  497. $points = $this->map->huntDown($this, $nearestMouse, $move);
  498. if ($points == -1) { //активируем код ДЗЕРО
  499. $this->map->eating($this, $nearestMouse);
  500. return;
  501. } elseif ($points > $maxPoints) {
  502. $maxPoints = $points;
  503. $finalMove = $move;
  504. }
  505. }
  506.  
  507. }
  508. $this->makeMove($finalMove);
  509. }
  510. }
  511.  
  512. class Dog extends Animal
  513. {
  514. public $los = INF; //пусть будет
  515. public $sign = " D ";
  516. public $saying = [ "Just wandering around.",
  517. "Being a dog.", "Has no idea what he's doing.",
  518. "Being blind to mice problems.", "Just being a dog.",
  519. "Chasing a bird in the sky", " ", " ", " ", " ",
  520. "Barking at a tree.", "Has done nothing so far." ];
  521.  
  522. public function __toString()
  523. {
  524. return parent::__toString() . " ". $this->saying[array_rand($this->saying)];
  525. }
  526.  
  527. public function go()
  528. {
  529. $this->makeBestMove($this->moves());
  530. }
  531.  
  532. public function moves()
  533. {
  534. $move1 = new Movement($this->y, $this->x);
  535. $move2 = new Movement($this->y + 2, $this->x);
  536. $move3 = new Movement($this->y - 2, $this->x);
  537. $move4 = new Movement($this->y, $this->x + 2);
  538. $move5 = new Movement($this->y, $this->x - 2);
  539. $move6 = new Movement($this->y + 2, $this->x + 2);
  540. $move7 = new Movement($this->y - 2, $this->x - 2);
  541. $move8 = new Movement($this->y + 2, $this->x - 2);
  542. $move9 = new Movement($this->y - 2, $this->x + 2);
  543. $arrayMove = array( $move1, $move2, $move3, $move4, $move5, $move6, $move7, $move8, $move9 );
  544.  
  545. return $arrayMove;
  546. }
  547.  
  548. //лучший ход для пса - рандомный в свободную клетку. Если таковых нет - стоять на месте.
  549. public function makeBestMove(array $arrayMove)
  550. {
  551. $arrayMove = $this->map->getPossibilityOfMovement($arrayMove);
  552. if(count($arrayMove) != 1) {
  553. unset($arrayMove[0]); //первый ход - стоять, тут его ансетаем, т.к. есть куда шагать
  554. }
  555. $finalMove = $arrayMove[array_rand($arrayMove)];
  556.  
  557. $this->makeMove($finalMove);
  558. }
  559. }
  560.  
  561. $field = new Battlefield(11,11, 30);
  562. $field->setField();
  563. $mouse1 = new Mouse("Dorothy", 4);
  564. $mouse2 = new Mouse("Benedicta", 4);
  565. $mouse3 = new Mouse("Roberta", 4);
  566. $mouse5 = new Mouse("Stevie Wonder", 1);
  567. $mouse5->sign = " s ";
  568. $mouse6 = new Mouse("Gerthrude", 4);
  569. $mouse7 = new Mouse("Gwyneth", 4);
  570.  
  571. $dog1 = new Dog("Stephan");
  572.  
  573. $cat1 = new Cat("Mew");
  574. $cat2 = new Cat("Mr. Whiskers ");
  575. $cat3 = new Cat("Alexander Anderson");
  576.  
  577. $field->addAnimal($mouse1);
  578. $field->addAnimal($mouse2);
  579. $field->addAnimal($mouse3);
  580.  
  581. $field->addAnimal($mouse5);
  582. $field->addAnimal($mouse6);
  583. $field->addAnimal($mouse7);
  584. $field->addAnimal($dog1);
  585. $field->addAnimal($cat1);
  586. $field->addAnimal($cat2);
  587. $field->addAnimal($cat3);
  588.  
  589. $field->letTheGameBegin();
  590.  
Success #stdin #stdout 0.08s 52480KB
stdin
Standard input is empty
stdout
 .  .  .  .  .  .  .  .  .  .  .  . 
 m  .  .  .  .  .  .  .  .  .  .  . 
 .  .  .  D  .  .  .  .  .  .  .  . 
 .  .  .  .  .  .  .  .  .  .  .  . 
 .  .  .  .  .  .  .  .  .  .  .  . 
 .  .  .  .  .  .  .  m  .  .  .  . 
 .  .  .  .  m  .  .  .  K  .  .  . 
 .  .  .  .  .  .  .  .  .  .  .  . 
 .  m  K  .  .  .  .  .  .  .  .  . 
 .  .  .  .  .  .  .  .  .  .  .  . 
 .  .  .  .  .  .  .  .  s  .  .  . 
 .  .  K  .  .  .  .  .  .  .  m  . 

Dogs 'team': 
D. Stephan's position: Y: 2 X: 3. Being blind to mice problems.

Mice team: 
m. Dorothy's position: Y: 11 X: 10. Alive for 0 turns.
m. Benedicta's position: Y: 5 X: 7. Alive for 0 turns.
m. Roberta's position: Y: 6 X: 4. Alive for 0 turns.
s. Stevie Wonder's position: Y: 10 X: 8. Alive for 0 turns.
m. Gerthrude's position: Y: 1 X: 0. Alive for 0 turns.
m. Gwyneth's position: Y: 8 X: 1. Alive for 0 turns.

Cats team: 
K. Mew's position: Y: 8 X: 2.Has killed 0 mice.
K. Mr. Whiskers 's position: Y: 11 X: 2.Has killed 0 mice.
K. Alexander Anderson's position: Y: 6 X: 8.Has killed 0 mice.

 .  .  .  .  .  .  .  .  .  .  .  . 
 .  .  .  .  .  .  .  .  .  .  .  . 
 m  .  .  .  .  .  .  .  .  .  .  . 
 .  .  .  .  .  .  .  .  .  .  .  . 
 .  D  .  .  .  .  .  .  .  .  .  . 
 .  .  .  .  .  .  m  K  .  .  .  . 
 .  .  .  .  .  m  .  .  .  .  .  . 
 .  .  .  .  .  .  .  .  .  .  .  . 
 m  K  .  .  .  .  .  .  .  .  .  . 
 .  .  .  .  .  .  .  .  .  .  .  . 
 .  .  K  .  .  .  .  s  .  .  m  . 
 .  .  .  .  .  .  .  .  .  .  .  . 

Dogs 'team': 
D. Stephan's position: Y: 4 X: 1. Being blind to mice problems.

Mice team: 
m. Dorothy's position: Y: 10 X: 10. Alive for 1 turns.
m. Benedicta's position: Y: 5 X: 6. Alive for 1 turns.
m. Roberta's position: Y: 6 X: 5. Alive for 1 turns.
s. Stevie Wonder's position: Y: 10 X: 7. Alive for 1 turns.
m. Gerthrude's position: Y: 2 X: 0. Alive for 1 turns.
m. Gwyneth's position: Y: 8 X: 0. Alive for 1 turns.

Cats team: 
K. Mew's position: Y: 8 X: 1.Has killed 0 mice.
K. Mr. Whiskers 's position: Y: 10 X: 2.Has killed 0 mice.
K. Alexander Anderson's position: Y: 5 X: 7.Has killed 0 mice.

 .  .  .  .  .  .  .  .  .  .  .  . 
 .  .  .  .  .  .  .  .  .  .  .  . 
 .  .  .  .  .  .  .  .  .  .  .  . 
 m  .  .  .  .  .  .  .  .  .  .  . 
 .  .  .  D  .  .  .  .  .  .  .  . 
 .  .  .  .  .  m  K  .  .  .  .  . 
 .  .  .  .  m  .  .  .  .  .  .  . 
 @  .  .  .  .  .  .  .  .  .  .  . 
 .  .  .  .  .  .  .  .  .  .  .  . 
 .  .  K  .  .  .  .  .  .  .  .  . 
 .  .  .  .  .  .  .  .  .  .  .  . 
 .  .  .  .  .  .  .  s  .  .  m  . 

Dogs 'team': 
D. Stephan's position: Y: 4 X: 3.  

Mice team: 
m. Dorothy's position: Y: 11 X: 10. Alive for 2 turns.
m. Benedicta's position: Y: 5 X: 5. Alive for 2 turns.
m. Roberta's position: Y: 6 X: 4. Alive for 2 turns.
s. Stevie Wonder's position: Y: 11 X: 7. Alive for 2 turns.
m. Gerthrude's position: Y: 3 X: 0. Alive for 2 turns.

Cats team: 
K. Mew's position: Y: 7 X: 0.Has killed 1 mice. Mew is sleeping at the moment.
K. Mr. Whiskers 's position: Y: 9 X: 2.Has killed 0 mice.
K. Alexander Anderson's position: Y: 5 X: 6.Has killed 0 mice.

 .  .  .  .  .  .  .  .  .  .  .  . 
 .  .  .  .  .  .  .  .  .  .  .  . 
 m  .  .  .  .  .  .  .  .  .  .  . 
 .  .  .  .  .  .  .  .  .  .  .  . 
 .  .  .  .  .  .  .  .  .  .  .  . 
 .  .  .  .  m  K  .  .  .  .  .  . 
 .  .  .  D  m  .  .  .  .  .  .  . 
 @  .  .  .  .  .  .  .  .  .  .  . 
 .  .  K  .  .  .  .  .  .  .  .  . 
 .  .  .  .  .  .  .  .  .  .  .  . 
 .  .  .  .  .  .  .  s  .  .  .  . 
 .  .  .  .  .  .  .  .  .  .  .  m 

Dogs 'team': 
D. Stephan's position: Y: 6 X: 3. Has no idea what he's doing.

Mice team: 
m. Dorothy's position: Y: 11 X: 11. Alive for 3 turns.
m. Benedicta's position: Y: 5 X: 4. Alive for 3 turns.
m. Roberta's position: Y: 6 X: 4. Alive for 3 turns.
s. Stevie Wonder's position: Y: 10 X: 7. Alive for 3 turns.
m. Gerthrude's position: Y: 2 X: 0. Alive for 3 turns.

Cats team: 
K. Mew's position: Y: 7 X: 0.Has killed 1 mice. Mew is sleeping at the moment.
K. Mr. Whiskers 's position: Y: 8 X: 2.Has killed 0 mice.
K. Alexander Anderson's position: Y: 5 X: 5.Has killed 0 mice.

 .  .  .  .  .  .  .  .  .  .  .  . 
 .  .  .  .  .  .  .  .  .  .  .  . 
 m  .  .  .  .  .  .  .  .  .  .  . 
 .  .  .  .  .  .  .  .  .  .  .  . 
 .  .  .  .  .  .  .  .  .  .  .  . 
 .  .  .  m  K  .  .  .  .  .  .  . 
 .  K  .  .  .  .  .  .  .  .  .  . 
 .  .  .  K  m  .  .  .  .  .  .  . 
 .  D  .  .  .  .  .  .  .  .  .  . 
 .  .  .  .  .  .  .  .  .  .  .  . 
 .  .  .  .  .  .  .  .  s  .  .  m 
 .  .  .  .  .  .  .  .  .  .  .  . 

Dogs 'team': 
D. Stephan's position: Y: 8 X: 1. Being blind to mice problems.

Mice team: 
m. Dorothy's position: Y: 10 X: 11. Alive for 4 turns.
m. Benedicta's position: Y: 5 X: 3. Alive for 4 turns.
m. Roberta's position: Y: 7 X: 4. Alive for 4 turns.
s. Stevie Wonder's position: Y: 10 X: 8. Alive for 4 turns.
m. Gerthrude's position: Y: 2 X: 0. Alive for 4 turns.

Cats team: 
K. Mew's position: Y: 6 X: 1.Has killed 1 mice.
K. Mr. Whiskers 's position: Y: 7 X: 3.Has killed 0 mice.
K. Alexander Anderson's position: Y: 5 X: 4.Has killed 0 mice.

 .  .  .  .  .  .  .  .  .  .  .  . 
 m  .  .  .  .  .  .  .  .  .  .  . 
 .  .  .  .  .  .  .  .  .  .  .  . 
 .  .  .  .  .  .  .  .  .  .  .  . 
 .  .  .  .  .  .  .  .  .  .  .  . 
 .  .  @  .  .  .  .  .  .  .  .  . 
 .  .  .  .  K  K  .  .  .  .  .  . 
 .  .  .  .  .  .  .  .  .  .  .  . 
 .  .  .  D  m  .  .  .  .  .  .  . 
 .  .  .  .  .  .  .  .  .  .  .  . 
 .  .  .  .  .  .  .  .  .  .  .  m 
 .  .  .  .  .  .  .  .  s  .  .  . 

Dogs 'team': 
D. Stephan's position: Y: 8 X: 3.  

Mice team: 
m. Dorothy's position: Y: 10 X: 11. Alive for 5 turns.
m. Roberta's position: Y: 8 X: 4. Alive for 5 turns.
s. Stevie Wonder's position: Y: 11 X: 8. Alive for 5 turns.
m. Gerthrude's position: Y: 1 X: 0. Alive for 5 turns.

Cats team: 
K. Mew's position: Y: 5 X: 2.Has killed 2 mice. Mew is sleeping at the moment.
K. Mr. Whiskers 's position: Y: 6 X: 4.Has killed 0 mice.
K. Alexander Anderson's position: Y: 6 X: 5.Has killed 0 mice.

 m  .  .  .  .  .  .  .  .  .  .  . 
 .  .  .  .  .  .  .  .  .  .  .  . 
 .  .  .  .  .  .  .  .  .  .  .  . 
 .  .  .  .  .  .  .  .  .  .  .  . 
 .  .  .  .  .  .  .  .  .  .  .  . 
 .  .  @  .  .  .  .  .  .  .  .  . 
 .  .  .  .  .  .  .  .  .  .  .  . 
 .  .  .  .  K  K  .  .  .  .  .  . 
 .  .  .  .  .  .  .  .  .  .  .  . 
 .  .  .  .  m  .  .  .  .  .  .  . 
 .  .  .  .  .  D  .  .  .  .  .  . 
 .  .  .  .  .  .  .  .  .  s  .  m 

Dogs 'team': 
D. Stephan's position: Y: 10 X: 5.  

Mice team: 
m. Dorothy's position: Y: 11 X: 11. Alive for 6 turns.
m. Roberta's position: Y: 9 X: 4. Alive for 6 turns.
s. Stevie Wonder's position: Y: 11 X: 9. Alive for 6 turns.
m. Gerthrude's position: Y: 0 X: 0. Alive for 6 turns.

Cats team: 
K. Mew's position: Y: 5 X: 2.Has killed 2 mice. Mew is sleeping at the moment.
K. Mr. Whiskers 's position: Y: 7 X: 4.Has killed 0 mice.
K. Alexander Anderson's position: Y: 7 X: 5.Has killed 0 mice.

 .  m  .  .  .  .  .  .  .  .  .  . 
 .  .  .  .  .  .  .  .  .  .  .  . 
 .  .  .  .  .  .  .  .  .  .  .  . 
 .  .  .  .  .  .  .  .  .  .  .  . 
 .  .  .  .  .  .  .  .  .  .  .  . 
 .  .  .  .  .  .  .  .  .  .  .  . 
 .  .  K  .  K  .  .  .  .  .  .  . 
 .  .  .  .  .  .  .  .  .  .  .  . 
 .  .  .  D  m  K  .  .  .  .  .  . 
 .  .  .  .  .  .  .  .  .  .  .  . 
 .  .  .  .  .  .  .  .  .  .  .  . 
 .  .  .  .  .  .  .  .  s  .  .  m 

Dogs 'team': 
D. Stephan's position: Y: 8 X: 3. Barking at a tree.

Mice team: 
m. Dorothy's position: Y: 11 X: 11. Alive for 7 turns.
m. Roberta's position: Y: 8 X: 4. Alive for 7 turns.
s. Stevie Wonder's position: Y: 11 X: 8. Alive for 7 turns.
m. Gerthrude's position: Y: 0 X: 1. Alive for 7 turns.

Cats team: 
K. Mew's position: Y: 6 X: 2.Has killed 2 mice.
K. Mr. Whiskers 's position: Y: 6 X: 4.Has killed 0 mice.
K. Alexander Anderson's position: Y: 8 X: 5.Has killed 0 mice.

 m  .  .  .  .  .  .  .  .  .  .  . 
 .  .  .  .  .  .  .  .  .  .  .  . 
 .  .  .  .  .  .  .  .  .  .  .  . 
 .  .  .  .  .  .  .  .  .  .  .  . 
 .  .  .  .  .  .  .  .  .  .  .  . 
 .  .  .  .  .  .  .  .  .  .  .  . 
 .  .  .  .  .  .  .  .  .  .  .  . 
 .  .  K  .  @  .  .  .  .  .  .  . 
 .  .  .  .  @  .  .  .  .  .  .  . 
 .  .  .  .  m  .  .  .  .  .  .  . 
 .  .  .  .  .  D  .  .  s  .  .  m 
 .  .  .  .  .  .  .  .  .  .  .  . 

Dogs 'team': 
D. Stephan's position: Y: 10 X: 5. Has done nothing so far.

Mice team: 
m. Dorothy's position: Y: 10 X: 11. Alive for 8 turns.
m. Roberta's position: Y: 9 X: 4. Alive for 8 turns.
s. Stevie Wonder's position: Y: 10 X: 8. Alive for 8 turns.
m. Gerthrude's position: Y: 0 X: 0. Alive for 8 turns.

Cats team: 
K. Mew's position: Y: 7 X: 2.Has killed 2 mice.
K. Mr. Whiskers 's position: Y: 7 X: 4.Has killed 0 mice. Mr. Whiskers  is sleeping at the moment.
K. Alexander Anderson's position: Y: 8 X: 4.Has killed 0 mice. Alexander Anderson is sleeping at the moment.

 m  .  .  .  .  .  .  .  .  .  .  . 
 .  .  .  .  .  .  .  .  .  .  .  . 
 .  .  .  .  .  .  .  .  .  .  .  . 
 .  .  .  .  .  .  .  .  .  .  .  . 
 .  .  .  .  .  .  .  .  .  .  .  . 
 .  .  .  .  .  .  .  .  .  .  .  . 
 .  .  .  .  .  .  .  .  .  .  .  . 
 .  .  .  .  @  .  .  .  .  .  .  . 
 .  .  K  .  @  .  .  D  .  .  .  . 
 .  .  .  .  .  .  .  .  .  .  .  . 
 .  .  .  .  m  .  .  .  .  .  m  . 
 .  .  .  .  .  .  .  .  s  .  .  . 

Dogs 'team': 
D. Stephan's position: Y: 8 X: 7. Chasing a bird in the sky

Mice team: 
m. Dorothy's position: Y: 10 X: 10. Alive for 9 turns.
m. Roberta's position: Y: 10 X: 4. Alive for 9 turns.
s. Stevie Wonder's position: Y: 11 X: 8. Alive for 9 turns.
m. Gerthrude's position: Y: 0 X: 0. Alive for 9 turns.

Cats team: 
K. Mew's position: Y: 8 X: 2.Has killed 2 mice.
K. Mr. Whiskers 's position: Y: 7 X: 4.Has killed 0 mice. Mr. Whiskers  is sleeping at the moment.
K. Alexander Anderson's position: Y: 8 X: 4.Has killed 0 mice. Alexander Anderson is sleeping at the moment.

 .  .  .  .  .  .  .  .  .  .  .  . 
 m  .  .  .  .  .  .  .  .  .  .  . 
 .  .  .  .  .  .  .  .  .  .  .  . 
 .  .  .  .  .  .  .  .  .  .  .  . 
 .  .  .  .  .  .  .  .  .  .  .  . 
 .  .  .  .  .  .  .  .  .  .  .  . 
 .  .  .  .  .  .  .  .  .  .  .  . 
 .  .  .  .  .  .  .  .  .  .  .  . 
 .  .  .  K  .  K  .  .  .  .  .  . 
 .  .  .  .  .  K  .  .  .  .  .  . 
 .  .  .  .  .  m  .  .  s  D  .  . 
 .  .  .  .  .  .  .  .  .  .  m  . 

Dogs 'team': 
D. Stephan's position: Y: 10 X: 9. Barking at a tree.

Mice team: 
m. Dorothy's position: Y: 11 X: 10. Alive for 10 turns.
m. Roberta's position: Y: 10 X: 5. Alive for 10 turns.
s. Stevie Wonder's position: Y: 10 X: 8. Alive for 10 turns.
m. Gerthrude's position: Y: 1 X: 0. Alive for 10 turns.

Cats team: 
K. Mew's position: Y: 8 X: 3.Has killed 2 mice.
K. Mr. Whiskers 's position: Y: 8 X: 5.Has killed 0 mice.
K. Alexander Anderson's position: Y: 9 X: 5.Has killed 0 mice.

 .  .  .  .  .  .  .  .  .  .  .  . 
 .  .  .  .  .  .  .  .  .  .  .  . 
 m  .  .  .  .  .  .  .  .  .  .  . 
 .  .  .  .  .  .  .  .  .  .  .  . 
 .  .  .  .  .  .  .  .  .  .  .  . 
 .  .  .  .  .  .  .  .  .  .  .  . 
 .  .  .  .  .  .  .  .  .  .  .  . 
 .  .  .  .  .  .  .  .  .  .  .  . 
 .  .  .  .  .  .  .  .  .  D  .  . 
 .  .  .  K  .  .  K  .  .  .  .  . 
 .  .  .  .  .  K  .  s  .  .  .  . 
 .  .  .  .  .  m  .  .  .  .  .  m 

Dogs 'team': 
D. Stephan's position: Y: 8 X: 9. Being blind to mice problems.

Mice team: 
m. Dorothy's position: Y: 11 X: 11. Alive for 11 turns.
m. Roberta's position: Y: 11 X: 5. Alive for 11 turns.
s. Stevie Wonder's position: Y: 10 X: 7. Alive for 11 turns.
m. Gerthrude's position: Y: 2 X: 0. Alive for 11 turns.

Cats team: 
K. Mew's position: Y: 9 X: 3.Has killed 2 mice.
K. Mr. Whiskers 's position: Y: 9 X: 6.Has killed 0 mice.
K. Alexander Anderson's position: Y: 10 X: 5.Has killed 0 mice.

 .  .  .  .  .  .  .  .  .  .  .  . 
 m  .  .  .  .  .  .  .  .  .  .  . 
 .  .  .  .  .  .  .  .  .  .  .  . 
 .  .  .  .  .  .  .  .  .  .  .  . 
 .  .  .  .  .  .  .  .  .  .  .  . 
 .  .  .  .  .  .  .  .  .  .  .  . 
 .  .  .  .  .  .  .  .  .  .  .  . 
 .  .  .  .  .  .  .  .  .  .  .  . 
 .  .  .  .  .  .  .  .  .  .  .  . 
 .  .  .  .  K  .  .  .  .  .  .  . 
 .  .  .  .  .  .  K  .  .  D  .  m 
 .  .  .  .  .  K  m  s  .  .  .  . 

Dogs 'team': 
D. Stephan's position: Y: 10 X: 9. Just being a dog.

Mice team: 
m. Dorothy's position: Y: 10 X: 11. Alive for 12 turns.
m. Roberta's position: Y: 11 X: 6. Alive for 12 turns.
s. Stevie Wonder's position: Y: 11 X: 7. Alive for 12 turns.
m. Gerthrude's position: Y: 1 X: 0. Alive for 12 turns.

Cats team: 
K. Mew's position: Y: 9 X: 4.Has killed 2 mice.
K. Mr. Whiskers 's position: Y: 10 X: 6.Has killed 0 mice.
K. Alexander Anderson's position: Y: 11 X: 5.Has killed 0 mice.

 .  .  .  .  .  .  .  .  .  .  .  . 
 .  m  .  .  .  .  .  .  .  .  .  . 
 .  .  .  .  .  .  .  .  .  .  .  . 
 .  .  .  .  .  .  .  .  .  .  .  . 
 .  .  .  .  .  .  .  .  .  .  .  . 
 .  .  .  .  .  .  .  .  .  .  .  . 
 .  .  .  .  .  .  .  .  .  .  .  . 
 .  .  .  .  .  .  .  .  .  .  .  . 
 .  .  .  .  .  .  .  .  .  .  .  . 
 .  .  .  .  .  K  .  .  .  .  .  m 
 .  .  .  .  .  K  .  D  .  .  .  . 
 .  .  .  .  .  K  m  .  s  .  .  . 

Dogs 'team': 
D. Stephan's position: Y: 10 X: 7. Just wandering around.

Mice team: 
m. Dorothy's position: Y: 9 X: 11. Alive for 13 turns.
m. Roberta's position: Y: 11 X: 6. Alive for 13 turns.
s. Stevie Wonder's position: Y: 11 X: 8. Alive for 13 turns.
m. Gerthrude's position: Y: 1 X: 1. Alive for 13 turns.

Cats team: 
K. Mew's position: Y: 10 X: 5.Has killed 2 mice.
K. Mr. Whiskers 's position: Y: 9 X: 5.Has killed 0 mice.
K. Alexander Anderson's position: Y: 11 X: 5.Has killed 0 mice.

 .  .  .  .  .  .  .  .  .  .  .  . 
 m  .  .  .  .  .  .  .  .  .  .  . 
 .  .  .  .  .  .  .  .  .  .  .  . 
 .  .  .  .  .  .  .  .  .  .  .  . 
 .  .  .  .  .  .  .  .  .  .  .  . 
 .  .  .  .  .  .  .  .  .  .  .  . 
 .  .  .  .  .  .  .  .  .  .  .  . 
 .  .  .  .  .  .  .  .  .  .  .  . 
 .  .  .  .  .  .  .  .  .  D  .  . 
 .  .  .  .  .  .  .  .  .  .  m  . 
 .  .  .  .  .  .  K  .  .  .  .  . 
 .  .  .  .  .  K  @  m  s  .  .  . 

Dogs 'team': 
D. Stephan's position: Y: 8 X: 9. Being a dog.

Mice team: 
m. Dorothy's position: Y: 9 X: 10. Alive for 14 turns.
m. Roberta's position: Y: 11 X: 7. Alive for 14 turns.
s. Stevie Wonder's position: Y: 11 X: 8. Alive for 14 turns.
m. Gerthrude's position: Y: 1 X: 0. Alive for 14 turns.

Cats team: 
K. Mew's position: Y: 11 X: 6.Has killed 2 mice. Mew is sleeping at the moment.
K. Mr. Whiskers 's position: Y: 10 X: 6.Has killed 0 mice.
K. Alexander Anderson's position: Y: 11 X: 5.Has killed 0 mice.

 .  .  .  .  .  .  .  .  .  .  .  . 
 .  .  .  .  .  .  .  .  .  .  .  . 
 m  .  .  .  .  .  .  .  .  .  .  . 
 .  .  .  .  .  .  .  .  .  .  .  . 
 .  .  .  .  .  .  .  .  .  .  .  . 
 .  .  .  .  .  .  .  .  .  .  .  . 
 .  .  .  .  .  .  .  .  .  .  .  D 
 .  .  .  .  .  .  .  .  .  .  .  . 
 .  .  .  .  .  .  .  .  .  .  .  . 
 .  .  .  .  .  .  .  .  .  .  .  m 
 .  .  .  .  .  K  K  m  s  .  .  . 
 .  .  .  .  .  .  @  .  .  .  .  . 

Dogs 'team': 
D. Stephan's position: Y: 6 X: 11. Has no idea what he's doing.

Mice team: 
m. Dorothy's position: Y: 9 X: 11. Alive for 15 turns.
m. Roberta's position: Y: 10 X: 7. Alive for 15 turns.
s. Stevie Wonder's position: Y: 10 X: 8. Alive for 15 turns.
m. Gerthrude's position: Y: 2 X: 0. Alive for 15 turns.

Cats team: 
K. Mew's position: Y: 11 X: 6.Has killed 2 mice. Mew is sleeping at the moment.
K. Mr. Whiskers 's position: Y: 10 X: 6.Has killed 0 mice.
K. Alexander Anderson's position: Y: 10 X: 5.Has killed 0 mice.

 .  .  .  .  .  .  .  .  .  .  .  . 
 m  .  .  .  .  .  .  .  .  .  .  . 
 .  .  .  .  .  .  .  .  .  .  .  . 
 .  .  .  .  .  .  .  .  .  .  .  . 
 .  .  .  .  .  .  .  .  .  .  .  . 
 .  .  .  .  .  .  .  .  .  .  .  . 
 .  .  .  .  .  .  .  .  .  .  .  . 
 .  .  .  .  .  .  .  .  .  .  .  . 
 .  .  .  .  .  .  .  .  .  D  .  . 
 .  .  .  .  .  .  .  @  .  .  .  . 
 .  .  .  .  .  .  K  K  .  s  .  m 
 .  .  .  .  .  .  .  .  .  .  .  . 

Dogs 'team': 
D. Stephan's position: Y: 8 X: 9.  

Mice team: 
m. Dorothy's position: Y: 10 X: 11. Alive for 16 turns.
s. Stevie Wonder's position: Y: 10 X: 9. Alive for 16 turns.
m. Gerthrude's position: Y: 1 X: 0. Alive for 16 turns.

Cats team: 
K. Mew's position: Y: 10 X: 7.Has killed 2 mice.
K. Mr. Whiskers 's position: Y: 9 X: 7.Has killed 1 mice. Mr. Whiskers  is sleeping at the moment.
K. Alexander Anderson's position: Y: 10 X: 6.Has killed 0 mice.

 m  .  .  .  .  .  .  .  .  .  .  . 
 .  .  .  .  .  .  .  .  .  .  .  . 
 .  .  .  .  .  .  .  .  .  .  .  . 
 .  .  .  .  .  .  .  .  .  .  .  . 
 .  .  .  .  .  .  .  .  .  .  .  . 
 .  .  .  .  .  .  .  .  .  .  .  . 
 .  .  .  .  .  .  .  D  .  .  .  . 
 .  .  .  .  .  .  .  .  .  .  .  . 
 .  .  .  .  .  .  .  .  .  .  .  . 
 .  .  .  .  .  .  .  @  .  .  .  m 
 .  .  .  .  .  .  .  @  @  .  .  . 
 .  .  .  .  .  .  .  .  .  .  .  . 

Dogs 'team': 
D. Stephan's position: Y: 6 X: 7. Being a dog.

Mice team: 
m. Dorothy's position: Y: 9 X: 11. Alive for 17 turns.
m. Gerthrude's position: Y: 0 X: 0. Alive for 17 turns.

Cats team: 
K. Mew's position: Y: 10 X: 8.Has killed 3 mice. Mew is sleeping at the moment.
K. Mr. Whiskers 's position: Y: 9 X: 7.Has killed 1 mice. Mr. Whiskers  is sleeping at the moment.
K. Alexander Anderson's position: Y: 10 X: 7.Has killed 0 mice. Alexander Anderson is sleeping at the moment.

 .  .  .  .  .  .  .  .  .  .  .  . 
 m  .  .  .  .  .  .  .  .  .  .  . 
 .  .  .  .  .  .  .  .  .  .  .  . 
 .  .  .  .  .  .  .  .  .  .  .  . 
 .  .  .  .  .  D  .  .  .  .  .  . 
 .  .  .  .  .  .  .  .  .  .  .  . 
 .  .  .  .  .  .  .  .  .  .  .  . 
 .  .  .  .  .  .  .  .  .  .  .  . 
 .  .  .  .  .  .  .  .  K  .  .  m 
 .  .  .  .  .  .  .  .  .  .  .  . 
 .  .  .  .  .  .  .  @  @  .  .  . 
 .  .  .  .  .  .  .  .  .  .  .  . 

Dogs 'team': 
D. Stephan's position: Y: 4 X: 5. Has no idea what he's doing.

Mice team: 
m. Dorothy's position: Y: 8 X: 11. Alive for 18 turns.
m. Gerthrude's position: Y: 1 X: 0. Alive for 18 turns.

Cats team: 
K. Mew's position: Y: 10 X: 8.Has killed 3 mice. Mew is sleeping at the moment.
K. Mr. Whiskers 's position: Y: 8 X: 8.Has killed 1 mice.
K. Alexander Anderson's position: Y: 10 X: 7.Has killed 0 mice. Alexander Anderson is sleeping at the moment.

 .  .  .  .  .  .  .  .  .  .  .  . 
 .  .  .  .  .  .  .  .  .  .  .  . 
 m  .  .  .  .  .  .  .  .  .  .  . 
 .  .  .  .  .  .  .  .  .  .  .  . 
 .  .  .  .  .  .  .  .  .  .  .  . 
 .  .  .  .  .  .  .  .  .  .  .  . 
 .  .  .  .  .  .  .  D  .  .  .  . 
 .  .  .  .  .  .  .  .  .  K  .  m 
 .  .  .  .  .  .  .  .  .  .  .  . 
 .  .  .  .  .  .  .  .  .  K  .  . 
 .  .  .  .  .  .  .  .  K  .  .  . 
 .  .  .  .  .  .  .  .  .  .  .  . 

Dogs 'team': 
D. Stephan's position: Y: 6 X: 7. Has done nothing so far.

Mice team: 
m. Dorothy's position: Y: 7 X: 11. Alive for 19 turns.
m. Gerthrude's position: Y: 2 X: 0. Alive for 19 turns.

Cats team: 
K. Mew's position: Y: 9 X: 9.Has killed 3 mice.
K. Mr. Whiskers 's position: Y: 7 X: 9.Has killed 1 mice.
K. Alexander Anderson's position: Y: 10 X: 8.Has killed 0 mice.

 .  .  .  .  .  .  .  .  .  .  .  . 
 m  .  .  .  .  .  .  .  .  .  .  . 
 .  .  .  .  .  .  .  .  .  .  .  . 
 .  .  .  .  .  .  .  .  .  .  .  . 
 .  .  .  .  .  .  .  .  .  .  .  . 
 .  .  .  .  .  .  .  .  .  .  .  . 
 .  .  .  .  .  D  .  .  .  .  K  m 
 .  .  .  .  .  .  .  .  .  .  .  . 
 .  .  .  .  .  .  .  .  .  K  .  . 
 .  .  .  .  .  .  .  .  K  .  .  . 
 .  .  .  .  .  .  .  .  .  .  .  . 
 .  .  .  .  .  .  .  .  .  .  .  . 

Dogs 'team': 
D. Stephan's position: Y: 6 X: 5.  

Mice team: 
m. Dorothy's position: Y: 6 X: 11. Alive for 20 turns.
m. Gerthrude's position: Y: 1 X: 0. Alive for 20 turns.

Cats team: 
K. Mew's position: Y: 8 X: 9.Has killed 3 mice.
K. Mr. Whiskers 's position: Y: 6 X: 10.Has killed 1 mice.
K. Alexander Anderson's position: Y: 9 X: 8.Has killed 0 mice.

 .  .  .  .  .  .  .  .  .  .  .  . 
 .  m  .  .  .  .  .  .  .  .  .  . 
 .  .  .  .  .  .  .  .  .  .  .  . 
 .  .  .  .  .  .  .  .  .  .  .  . 
 .  .  .  .  .  .  .  .  .  .  .  . 
 .  .  .  .  .  .  .  .  .  .  .  . 
 .  .  .  .  .  .  .  D  .  .  .  . 
 .  .  .  .  .  .  .  .  .  .  K  @ 
 .  .  .  .  .  .  .  .  K  .  .  . 
 .  .  .  .  .  .  .  .  .  .  .  . 
 .  .  .  .  .  .  .  .  .  .  .  . 
 .  .  .  .  .  .  .  .  .  .  .  . 

Dogs 'team': 
D. Stephan's position: Y: 6 X: 7.  

Mice team: 
m. Gerthrude's position: Y: 1 X: 1. Alive for 21 turns.

Cats team: 
K. Mew's position: Y: 7 X: 10.Has killed 3 mice.
K. Mr. Whiskers 's position: Y: 7 X: 11.Has killed 2 mice. Mr. Whiskers  is sleeping at the moment.
K. Alexander Anderson's position: Y: 8 X: 8.Has killed 0 mice.

 .  .  .  .  .  .  .  .  .  .  .  . 
 .  .  m  .  .  .  .  .  .  .  .  . 
 .  .  .  .  .  .  .  .  .  .  .  . 
 .  .  .  .  .  .  .  .  .  .  .  . 
 .  .  .  .  .  .  .  .  .  D  .  . 
 .  .  .  .  .  .  .  .  .  .  .  . 
 .  .  .  .  .  .  .  .  .  .  .  . 
 .  .  .  .  .  .  .  .  K  K  .  @ 
 .  .  .  .  .  .  .  .  .  .  .  . 
 .  .  .  .  .  .  .  .  .  .  .  . 
 .  .  .  .  .  .  .  .  .  .  .  . 
 .  .  .  .  .  .  .  .  .  .  .  . 

Dogs 'team': 
D. Stephan's position: Y: 4 X: 9.  

Mice team: 
m. Gerthrude's position: Y: 1 X: 2. Alive for 22 turns.

Cats team: 
K. Mew's position: Y: 7 X: 9.Has killed 3 mice.
K. Mr. Whiskers 's position: Y: 7 X: 11.Has killed 2 mice. Mr. Whiskers  is sleeping at the moment.
K. Alexander Anderson's position: Y: 7 X: 8.Has killed 0 mice.

 .  .  .  .  .  .  .  .  .  .  .  . 
 .  .  m  .  .  .  .  .  .  .  .  . 
 .  .  .  .  .  .  .  .  .  .  .  . 
 .  .  .  .  .  .  .  .  .  .  .  . 
 .  .  .  .  .  .  .  .  .  .  .  . 
 .  .  .  .  .  .  .  .  .  .  .  . 
 .  .  .  .  .  .  .  D  .  .  .  . 
 .  .  .  .  .  .  .  .  .  K  K  . 
 .  .  .  .  .  .  .  .  K  .  .  . 
 .  .  .  .  .  .  .  .  .  .  .  . 
 .  .  .  .  .  .  .  .  .  .  .  . 
 .  .  .  .  .  .  .  .  .  .  .  . 

Dogs 'team': 
D. Stephan's position: Y: 6 X: 7.  

Mice team: 
m. Gerthrude's position: Y: 1 X: 2. Alive for 23 turns.

Cats team: 
K. Mew's position: Y: 7 X: 9.Has killed 3 mice.
K. Mr. Whiskers 's position: Y: 7 X: 10.Has killed 2 mice.
K. Alexander Anderson's position: Y: 8 X: 8.Has killed 0 mice.

 .  .  .  .  .  .  .  .  .  .  .  . 
 .  .  m  .  .  .  .  .  .  .  .  . 
 .  .  .  .  .  .  .  .  .  .  .  . 
 .  .  .  .  .  .  .  .  .  .  .  . 
 .  .  .  .  .  .  .  .  .  .  .  . 
 .  .  .  .  .  .  .  .  .  .  .  . 
 .  .  .  .  .  .  .  .  K  K  .  . 
 .  .  .  .  .  .  .  K  .  .  .  . 
 .  .  .  .  .  .  .  .  .  D  .  . 
 .  .  .  .  .  .  .  .  .  .  .  . 
 .  .  .  .  .  .  .  .  .  .  .  . 
 .  .  .  .  .  .  .  .  .  .  .  . 

Dogs 'team': 
D. Stephan's position: Y: 8 X: 9.  

Mice team: 
m. Gerthrude's position: Y: 1 X: 2. Alive for 24 turns.

Cats team: 
K. Mew's position: Y: 6 X: 8.Has killed 3 mice.
K. Mr. Whiskers 's position: Y: 6 X: 9.Has killed 2 mice.
K. Alexander Anderson's position: Y: 7 X: 7.Has killed 0 mice.

 .  .  .  .  .  .  .  .  .  .  .  . 
 .  .  .  .  .  .  .  .  .  .  .  . 
 .  .  m  .  .  .  .  .  .  .  .  . 
 .  .  .  .  .  .  .  .  .  .  .  . 
 .  .  .  .  .  .  .  .  .  .  .  . 
 .  .  .  .  .  .  .  .  .  .  .  . 
 .  .  .  .  .  .  K  K  K  .  .  . 
 .  .  .  .  .  .  .  .  .  .  .  . 
 .  .  .  .  .  .  .  .  .  .  .  . 
 .  .  .  .  .  .  .  .  .  .  .  . 
 .  .  .  .  .  .  .  D  .  .  .  . 
 .  .  .  .  .  .  .  .  .  .  .  . 

Dogs 'team': 
D. Stephan's position: Y: 10 X: 7. Just wandering around.

Mice team: 
m. Gerthrude's position: Y: 2 X: 2. Alive for 25 turns.

Cats team: 
K. Mew's position: Y: 6 X: 7.Has killed 3 mice.
K. Mr. Whiskers 's position: Y: 6 X: 8.Has killed 2 mice.
K. Alexander Anderson's position: Y: 6 X: 6.Has killed 0 mice.

 .  .  .  .  .  .  .  .  .  .  .  . 
 .  .  m  .  .  .  .  .  .  .  .  . 
 .  .  .  .  .  .  .  .  .  .  .  . 
 .  .  .  .  .  .  .  .  .  .  .  . 
 .  .  .  .  .  .  .  .  .  .  .  . 
 .  .  .  .  .  @  @  .  .  .  .  . 
 .  .  .  .  .  .  .  K  .  .  .  . 
 .  .  .  .  .  .  .  .  .  .  .  . 
 .  .  .  .  .  D  .  .  .  .  .  . 
 .  .  .  .  .  .  .  .  .  .  .  . 
 .  .  .  .  .  .  .  .  .  .  .  . 
 .  .  .  .  .  .  .  .  .  .  .  . 

Dogs 'team': 
D. Stephan's position: Y: 8 X: 5. Just being a dog.

Mice team: 
m. Gerthrude's position: Y: 1 X: 2. Alive for 26 turns.

Cats team: 
K. Mew's position: Y: 5 X: 6.Has killed 3 mice. Mew is sleeping at the moment.
K. Mr. Whiskers 's position: Y: 6 X: 7.Has killed 2 mice.
K. Alexander Anderson's position: Y: 5 X: 5.Has killed 0 mice. Alexander Anderson is sleeping at the moment.

 .  .  m  .  .  .  .  .  .  .  .  . 
 .  .  .  .  .  .  .  .  .  .  .  . 
 .  .  .  .  .  .  .  .  .  .  .  . 
 .  .  .  .  .  .  .  .  .  .  .  . 
 .  .  .  .  .  .  .  .  .  .  .  . 
 .  .  .  .  .  @  @  K  .  .  .  . 
 .  .  .  .  .  .  .  .  .  .  .  . 
 .  .  .  .  .  .  .  .  .  .  .  . 
 .  .  .  .  .  .  .  D  .  .  .  . 
 .  .  .  .  .  .  .  .  .  .  .  . 
 .  .  .  .  .  .  .  .  .  .  .  . 
 .  .  .  .  .  .  .  .  .  .  .  . 

Dogs 'team': 
D. Stephan's position: Y: 8 X: 7.  

Mice team: 
m. Gerthrude's position: Y: 0 X: 2. Alive for 27 turns.

Cats team: 
K. Mew's position: Y: 5 X: 6.Has killed 3 mice. Mew is sleeping at the moment.
K. Mr. Whiskers 's position: Y: 5 X: 7.Has killed 2 mice.
K. Alexander Anderson's position: Y: 5 X: 5.Has killed 0 mice. Alexander Anderson is sleeping at the moment.

 .  m  .  .  .  .  .  .  .  .  .  . 
 .  .  .  .  .  .  .  .  .  .  .  . 
 .  .  .  .  .  .  .  .  .  .  .  . 
 .  .  .  .  .  .  .  .  .  .  .  . 
 .  .  .  .  K  K  .  .  .  .  .  . 
 .  .  .  .  .  .  K  .  .  .  .  . 
 .  .  .  .  .  .  .  .  .  D  .  . 
 .  .  .  .  .  .  .  .  .  .  .  . 
 .  .  .  .  .  .  .  .  .  .  .  . 
 .  .  .  .  .  .  .  .  .  .  .  . 
 .  .  .  .  .  .  .  .  .  .  .  . 
 .  .  .  .  .  .  .  .  .  .  .  . 

Dogs 'team': 
D. Stephan's position: Y: 6 X: 9. Barking at a tree.

Mice team: 
m. Gerthrude's position: Y: 0 X: 1. Alive for 28 turns.

Cats team: 
K. Mew's position: Y: 4 X: 5.Has killed 3 mice.
K. Mr. Whiskers 's position: Y: 5 X: 6.Has killed 2 mice.
K. Alexander Anderson's position: Y: 4 X: 4.Has killed 0 mice.

 m  .  .  .  .  .  .  .  .  .  .  . 
 .  .  .  .  .  .  .  .  .  .  .  . 
 .  .  .  .  .  .  .  .  .  .  .  . 
 .  .  .  K  K  .  .  .  .  .  .  . 
 .  .  .  .  .  .  .  .  .  .  .  . 
 .  .  .  .  .  K  .  .  .  .  .  . 
 .  .  .  .  .  .  .  D  .  .  .  . 
 .  .  .  .  .  .  .  .  .  .  .  . 
 .  .  .  .  .  .  .  .  .  .  .  . 
 .  .  .  .  .  .  .  .  .  .  .  . 
 .  .  .  .  .  .  .  .  .  .  .  . 
 .  .  .  .  .  .  .  .  .  .  .  . 

Dogs 'team': 
D. Stephan's position: Y: 6 X: 7.  

Mice team: 
m. Gerthrude's position: Y: 0 X: 0. Alive for 29 turns.

Cats team: 
K. Mew's position: Y: 3 X: 4.Has killed 3 mice.
K. Mr. Whiskers 's position: Y: 5 X: 5.Has killed 2 mice.
K. Alexander Anderson's position: Y: 3 X: 3.Has killed 0 mice.

 .  .  .  .  .  .  .  .  .  .  .  . 
 m  .  .  .  .  .  .  .  .  .  .  . 
 .  .  .  K  .  .  .  .  .  .  .  . 
 .  .  K  .  .  .  .  .  .  .  .  . 
 .  .  .  .  .  .  .  D  .  .  .  . 
 .  .  .  .  @  .  .  .  .  .  .  . 
 .  .  .  .  .  .  .  .  .  .  .  . 
 .  .  .  .  .  .  .  .  .  .  .  . 
 .  .  .  .  .  .  .  .  .  .  .  . 
 .  .  .  .  .  .  .  .  .  .  .  . 
 .  .  .  .  .  .  .  .  .  .  .  . 
 .  .  .  .  .  .  .  .  .  .  .  . 

Dogs 'team': 
D. Stephan's position: Y: 4 X: 7.  

Mice team: 
m. Gerthrude's position: Y: 1 X: 0. Alive for 30 turns.

Cats team: 
K. Mew's position: Y: 2 X: 3.Has killed 3 mice.
K. Mr. Whiskers 's position: Y: 5 X: 4.Has killed 2 mice. Mr. Whiskers  is sleeping at the moment.
K. Alexander Anderson's position: Y: 3 X: 2.Has killed 0 mice.