anchor.diff:        }
       }
     }
  -  
  +
     /**
      * Nachdem die Koordinaten des Schiffes eingetragen sind, werden [_leftMost] und [_rightMost]
      * ausgerechnet. In Klassen, die von [Ship] erben, werden möglicherweise noch [_bottomMost] und 
      * [_topMost] ausgerechnet. Ggf kann auch [_cannons] ausgerechnet werden
      */
     setup();
  -  
  +
     reduceHitpointsBy(int damage);
  -  
  +
     /**
      * Stringrepräsentation eines Schiffes
      */
  -  String toString(){
  +  String toString() {
       return _parts.toString();
     }
   }
  
positive.code:  * Besitzt neben [_leftMost] und [_rightMost] auch noch [_bottomMost] um festzustellen, ob das Spiel verloren wurde
   */
  class EnemyShip extends Ship {
    
    Map<String, int> _bottomMost;
    
    EnemyShip(SpaceInvaderModel model, List<Map<String, int>> parts, int hitpoints) : super(model, parts, hitpoints);
    
    void move(){ 
      switch(determineDirection()){
        case 'down':
          if(this._bottomMost['row'] == gamesize-1) { _model.setGameOver(); break; }
          else {
            for(Map coor in _parts){
              coor['row'] += 1;
              if(coor['row'] > this._bottomMost['row']) this._bottomMost = coor; 
            }
          }
          print("moved down");
          break;
        case 'left':
          if(this._leftMost['col'] == 0) break;
          else {
            for(Map coor in _parts){
              coor['col'] -= 1;
              if(coor['col'] < _leftMost['col']) this._leftMost = coor; 
            }
          print("moved left");
          }
          break;
        case 'right':
          if(this._rightMost['col'] == gamesize-1) break;
          else { 
            for(Map coor in _parts){
              coor['col'] += 1;
              if(coor['col'] > this._rightMost['col']) this._rightMost = coor; 
            }
          print("moved right");
          }
          break;
      }
      
      this.detectCollision();
  
    }
    
    determineDirection(){
      int dir = _rng.nextInt(12);
      
      if(dir<=5)                 return 'down';
      else if(dir>=6 && dir<=8)  return 'left';
      else if(dir>=9 && dir<=11) return 'right';
    }
    
    shoot() {
      for(Map<String, int> coor in _cannons) {
        int chance = _rng.nextInt(10);
        if(chance == 1)  this._model.spawnProjectile({'row': (coor['row']+1), 'col': coor['col'], 'dir': 1});
      }
    }
    
    reduceHitpointsBy(int damage){
      this._hitpoints -= damage;
      
      if(this._hitpoints <= 0) {
        this._model.removeEnemy(this);
        this._model.addScore(this._hitpoints);
        print('Ship is destroyed!');
      }
    }
    
    setup(){
      this._leftMost = _parts[0];
      this._rightMost = _parts[0];
      this._bottomMost = _parts[0];
      
      for(Map coor in _parts){
        if(coor['row'] > this._bottomMost['row']) this._bottomMost = coor; 
        if(coor['col'] < this._leftMost['col']) this._leftMost = coor; 
        if(coor['col'] > this._rightMost['col']) this._rightMost = coor;
        if(coor['cannon'] == 1) this._cannons.add(coor);
      }
    }
    
  }
  
  /**
  
negative.code:  * Besteht aus einer Liste von Koordinatenpaaren relativ zum jeweiligen Schiffsmittelpunkt [0/0]
   * Wird genutzt um [EnemyShip] auf einem [SpawnPoint] zu spawnen
   */
  class ShipType {
    List<Map<String, int>> _parts = [];
    int _hitpoints;
  
    ShipType(this._parts, this._hitpoints);
  
    List<Map<String, int>> get parts => _parts;
    int get hitpoints => this._hitpoints;
  }
  
  /**
  