anchor.diff:              ..armies = 1);
         }
       }
  +  }
  +
  +  void onMove(Move 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 - event.armies < 1) return;
  +
  +    // if the attacked country is in the neighbourhood
  +    if (!Country.findById(event.from).neighbours.contains(Country.findById(
  +        event.to))) return;
  +
  +    // if attack move, countries must be the same as attack
  +    if (game.step == null && (event.from != game.lastAttack.from || event.to !=
  +        game.lastAttack.to)) return;
  +
       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;
  
positive.code:   void onAttack(Attack event) {
      if (event.playerId != game.activePlayerId) return;
  
      game.lastAttack = event;
    }
  
  
negative.code: 
  import 'dart:async';
  import 'dart:math';
  
  import 'event.dart';
  import 'map.dart';
  
  const PLAYERS_MIN = 2;
  const PLAYERS_MAX = 6;
  