anchor.diff:  
   import 'dart:async';
   import 'dart:math';
  +
   import 'event.dart';
  +import 'map.dart';
   
   const PLAYERS_MIN = 2;
   const PLAYERS_MAX = 6;
  
positive.code:             ..armies = 1);
        }
      }
      game.lastAttack = null;
    }
  
    void onMove(Move event) {
      if (event.playerId != game.activePlayerId) return;
  
      game.countries[event.from].armies -= event.armies;
      game.countries[event.to].armies += event.armies;
  
negative.code:   void onAttack(Attack event) {
      if (event.playerId != game.activePlayerId) return;
  
      // if the attacked country is owned by another player
      if (game.countries[event.to].playerId == event.playerId) return;
  
      // if the attacker has enough armies in the from country
      if (game.countries[event.from].armies < 2) return;
  
      // if the attacked country is in the neighbourhood
      if (!Country.findById(event.from).neighbours.contains(Country.findById(
          event.to))) return;
  
      // valid attack
      game.lastAttack = event;
    }
  
  