MinesweeperGame.prototype .toggleFlag = function ( x, y) {
if ( ! this .hasFlag ( x, y) ) {
this .setFlag ( x, y) ;
} else {
this .removeFlag ( x, y) ;
}
} ;
MinesweeperGame.prototype .setFlag = function ( x, y) {
if ( ! this ._isCorrectCell( x, y) ) {
throw new MinesweeperGameException( "Некорректные координаты." ) ;
} else if ( this .hasOpened ( x, y) ||
this ._flagsCounter < MinesweeperGame.MIN_FLAGS ) {
return false ;
}
this ._flags.addCell ( x, y) ;
this .dispatchEvent ( new GameEvent( GameEvent.CELL_CHANGED , { "x" : x, "y" : y} ) ) ;
this ._flagsCounter--;
this .dispatchEvent ( new GameEvent( GameEvent.FLAGS_COUNTER_CHANGED ) ) ;
} ;
MinesweeperGame.prototype .removeFlag = function ( x, y) {
if ( ! this ._isCorrectCell( x, y) ) {
throw new MinesweeperGameException( "Некорректные координаты." ) ;
} else if ( this .hasOpened ( x, y) ) {
return false ;
} else if ( ! this .hasFlag ( x, y) ) {
throw new MinesweeperGame( "Флаг отсутвует." ) ;
} else if ( this ._flagsCounter > this ._mines) {
throw new MinesweeperGameException( "Что-то пошло не так..." ) ;
}
this ._flags.deleteCell ( x, y) ;
this .dispatchEvent ( new GameEvent( GameEvent.CELL_CHANGED , { "x" : x, "y" : y} ) ) ;
this ._flagsCounter++;
this .dispatchEvent ( new GameEvent( GameEvent.FLAGS_COUNTER_CHANGED ) ) ;
} ;
DomController.prototype ._setEvents = function ( ) {
this ._domView.addRightMouseDownToFieldListener ( this .toggleFlag .bind ( this ) ) ;
} ;
TWluZXN3ZWVwZXJHYW1lLnByb3RvdHlwZS50b2dnbGVGbGFnID0gZnVuY3Rpb24oeCwgeSkgewogICAgaWYgKCF0aGlzLmhhc0ZsYWcoeCwgeSkpIHsKICAgICAgICB0aGlzLnNldEZsYWcoeCwgeSk7CiAgICB9IGVsc2UgewogICAgICAgIHRoaXMucmVtb3ZlRmxhZyh4LCB5KTsKICAgIH0KfTsKCk1pbmVzd2VlcGVyR2FtZS5wcm90b3R5cGUuc2V0RmxhZyA9IGZ1bmN0aW9uKHgsIHkpIHsKICAgIGlmICghdGhpcy5faXNDb3JyZWN0Q2VsbCh4LCB5KSkgewogICAgICAgIHRocm93IG5ldyBNaW5lc3dlZXBlckdhbWVFeGNlcHRpb24oItCd0LXQutC+0YDRgNC10LrRgtC90YvQtSDQutC+0L7RgNC00LjQvdCw0YLRiy4iKTsKICAgIH0gZWxzZSBpZiAodGhpcy5oYXNPcGVuZWQoeCwgeSkgfHwKICAgICAgICAgICAgICAgdGhpcy5fZmxhZ3NDb3VudGVyIDwgTWluZXN3ZWVwZXJHYW1lLk1JTl9GTEFHUykgewogICAgICAgIHJldHVybiBmYWxzZTsKICAgIH0KICAgIHRoaXMuX2ZsYWdzLmFkZENlbGwoeCwgeSk7CiAgICB0aGlzLmRpc3BhdGNoRXZlbnQobmV3IEdhbWVFdmVudChHYW1lRXZlbnQuQ0VMTF9DSEFOR0VELCB7IngiOiB4LCAieSI6IHl9KSk7CiAgICB0aGlzLl9mbGFnc0NvdW50ZXItLTsKICAgIHRoaXMuZGlzcGF0Y2hFdmVudChuZXcgR2FtZUV2ZW50KEdhbWVFdmVudC5GTEFHU19DT1VOVEVSX0NIQU5HRUQpKTsKfTsKCk1pbmVzd2VlcGVyR2FtZS5wcm90b3R5cGUucmVtb3ZlRmxhZyA9IGZ1bmN0aW9uKHgsIHkpIHsKICAgIGlmICghdGhpcy5faXNDb3JyZWN0Q2VsbCh4LCB5KSkgewogICAgICAgIHRocm93IG5ldyBNaW5lc3dlZXBlckdhbWVFeGNlcHRpb24oItCd0LXQutC+0YDRgNC10LrRgtC90YvQtSDQutC+0L7RgNC00LjQvdCw0YLRiy4iKTsKICAgIH1lbHNlIGlmICh0aGlzLmhhc09wZW5lZCh4LCB5KSkgewogICAgICAgIHJldHVybiBmYWxzZTsKICAgIH0gZWxzZSBpZiAoIXRoaXMuaGFzRmxhZyh4LCB5KSkgewogICAgICAgIHRocm93IG5ldyBNaW5lc3dlZXBlckdhbWUoItCk0LvQsNCzINC+0YLRgdGD0YLQstGD0LXRgi4iKTsKICAgIH0gZWxzZSBpZiAodGhpcy5fZmxhZ3NDb3VudGVyID4gdGhpcy5fbWluZXMpIHsKICAgICAgICB0aHJvdyBuZXcgTWluZXN3ZWVwZXJHYW1lRXhjZXB0aW9uKCLQp9GC0L4t0YLQviDQv9C+0YjQu9C+INC90LUg0YLQsNC6Li4uIik7CiAgICB9CiAgICB0aGlzLl9mbGFncy5kZWxldGVDZWxsKHgsIHkpOwogICAgdGhpcy5kaXNwYXRjaEV2ZW50KG5ldyBHYW1lRXZlbnQoR2FtZUV2ZW50LkNFTExfQ0hBTkdFRCwgeyJ4IjogeCwgInkiOiB5fSkpOwogICAgdGhpcy5fZmxhZ3NDb3VudGVyKys7CiAgICB0aGlzLmRpc3BhdGNoRXZlbnQobmV3IEdhbWVFdmVudChHYW1lRXZlbnQuRkxBR1NfQ09VTlRFUl9DSEFOR0VEKSk7Cn07CgpEb21Db250cm9sbGVyLnByb3RvdHlwZS5fc2V0RXZlbnRzID0gZnVuY3Rpb24oKSB7CiAgICB0aGlzLl9kb21WaWV3LmFkZFJpZ2h0TW91c2VEb3duVG9GaWVsZExpc3RlbmVyKHRoaXMudG9nZ2xlRmxhZy5iaW5kKHRoaXMpKTsKfTsK