MinesweeperGame.prototype ._openNearCells = function ( x, y) {
var minesCounter = this .countNearMines ( x, y) ;
if ( minesCounter != 0 ) {
return false ;
}
var nearCellList = this ._getNearCells( x, y) ;
for ( var nearCellY in nearCellList) {
if ( ! nearCellList.hasOwnProperty ( nearCellY) ) continue ;
for ( var nearCellX in nearCellList[ nearCellY] ) {
if ( ! nearCellList[ nearCellY] .hasOwnProperty ( nearCellX) ) continue ;
if ( ! this .hasOpened ( nearCellX, nearCellY) &&
! this .hasFlag ( nearCellX, nearCellY) ) {
this .open ( nearCellX, nearCellY) ;
}
}
}
} ;
MinesweeperGame.prototype ._isCellInDict = function ( x, y, dict) {
if ( dict[ y] ) {
return dict[ y] [ x] ;
}
return false ;
} ;
MinesweeperGame.prototype ._addCellToDict = function ( x, y, dict) {
if ( ! this ._isCorrectCell( x, y) ) {
throw new MinesweeperGameException( "При добавлении превышены размеры поля." ) ;
}
if ( this ._isCellInDict( x, y, dict) ) {
throw new MinesweeperGameException( "Клетка уже существует в словаре." ) ;
}
dict[ y] [ x] = true ;
return dict;
} ;
MinesweeperGame.prototype ._isCorrectCell = function ( x, y) {
if ( x < 1 ||
y < 1 ||
x > this ._width ||
y > this ._height) {
return false ;
}
return true ;
} ;
TWluZXN3ZWVwZXJHYW1lLnByb3RvdHlwZS5fb3Blbk5lYXJDZWxscyA9IGZ1bmN0aW9uKHgsIHkpIHsKICAgIHZhciBtaW5lc0NvdW50ZXIgPSB0aGlzLmNvdW50TmVhck1pbmVzKHgsIHkpOwogICAgaWYgKG1pbmVzQ291bnRlciAhPSAwKSB7CiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgfQogICAgdmFyIG5lYXJDZWxsTGlzdCA9IHRoaXMuX2dldE5lYXJDZWxscyh4LCB5KTsKICAgIGZvciAodmFyIG5lYXJDZWxsWSBpbiBuZWFyQ2VsbExpc3QpIHsKICAgICAgICBpZiAoIW5lYXJDZWxsTGlzdC5oYXNPd25Qcm9wZXJ0eShuZWFyQ2VsbFkpKSBjb250aW51ZTsKICAgICAgICBmb3IgKHZhciBuZWFyQ2VsbFggaW4gbmVhckNlbGxMaXN0W25lYXJDZWxsWV0pIHsKICAgICAgICAgICAgaWYgKCFuZWFyQ2VsbExpc3RbbmVhckNlbGxZXS5oYXNPd25Qcm9wZXJ0eShuZWFyQ2VsbFgpKSBjb250aW51ZTsKICAgICAgICAgICAgaWYgKCF0aGlzLmhhc09wZW5lZChuZWFyQ2VsbFgsIG5lYXJDZWxsWSkgJiYKICAgICAgICAgICAgICAgICF0aGlzLmhhc0ZsYWcobmVhckNlbGxYLCAgIG5lYXJDZWxsWSkpIHsKICAgICAgICAgICAgICAgIHRoaXMub3BlbihuZWFyQ2VsbFgsIG5lYXJDZWxsWSk7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9Cn07CgpNaW5lc3dlZXBlckdhbWUucHJvdG90eXBlLl9pc0NlbGxJbkRpY3QgPSBmdW5jdGlvbih4LCB5LCBkaWN0KSB7CiAgICBpZiAoZGljdFt5XSkgewogICAgICAgIHJldHVybiBkaWN0W3ldW3hdOwogICAgfQogICAgcmV0dXJuIGZhbHNlOwp9OwoKTWluZXN3ZWVwZXJHYW1lLnByb3RvdHlwZS5fYWRkQ2VsbFRvRGljdCA9IGZ1bmN0aW9uKHgsIHksIGRpY3QpIHsKICAgIGlmICghdGhpcy5faXNDb3JyZWN0Q2VsbCh4LCB5KSkgewogICAgICAgIHRocm93IG5ldyBNaW5lc3dlZXBlckdhbWVFeGNlcHRpb24oItCf0YDQuCDQtNC+0LHQsNCy0LvQtdC90LjQuCDQv9GA0LXQstGL0YjQtdC90Ysg0YDQsNC30LzQtdGA0Ysg0L/QvtC70Y8uIik7CiAgICB9CiAgICBpZiAodGhpcy5faXNDZWxsSW5EaWN0KHgsIHksIGRpY3QpKSB7CiAgICAgICAgdGhyb3cgbmV3IE1pbmVzd2VlcGVyR2FtZUV4Y2VwdGlvbigi0JrQu9C10YLQutCwINGD0LbQtSDRgdGD0YnQtdGB0YLQstGD0LXRgiDQsiDRgdC70L7QstCw0YDQtS4iKTsKICAgIH0KICAgIGRpY3RbeV1beF0gPSB0cnVlOwogICAgcmV0dXJuIGRpY3Q7Cn07CgpNaW5lc3dlZXBlckdhbWUucHJvdG90eXBlLl9pc0NvcnJlY3RDZWxsID0gZnVuY3Rpb24oeCwgeSkgewogICAgaWYgKHggPCAxICAgICAgICAgICB8fAogICAgICAgIHkgPCAxICAgICAgICAgICB8fAogICAgICAgIHggPiB0aGlzLl93aWR0aCB8fAogICAgICAgIHkgPiB0aGlzLl9oZWlnaHQpIHsKICAgICAgICByZXR1cm4gZmFsc2U7CiAgICB9CiAgICByZXR1cm4gdHJ1ZTsKfTs=