| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294 |
- function CGameField() {
- var _aGrid = new Array();
- var _bAnimFullLines = false;
- this._init = function () {
- if (s_bMobile) {
- START_GRID_Y = CANVAS_HEIGHT_HALF - (GRID_Y * GRID_Y);
- }
- var iX = START_GRID_X;
- var iY = START_GRID_Y;
- for (var i = 0; i < GRID_Y; i++) {
- _aGrid[i] = new Array();
- for (var j = 0; j < GRID_X; j++) {
- _aGrid[i][j] = {x: iX, y: iY, occupied: false, cell: null, childID: null};
- this.createCellTest(iX, iY);
- iX += CELL_SIZE + CELL_OFFSET.x;
- }
- iY += CELL_SIZE + CELL_OFFSET.y;
- iX = START_GRID_X;
- }
- this.setID();
- };
- this.createCellTest = function (iX, iY) {
- if (!SHOW_CELL) {
- return;
- }
- var oCellGraphic;
- var oSpriteCell = s_oSpriteLibrary.getSprite("cell");
- oCellGraphic = createBitmap(oSpriteCell);
- oCellGraphic.x = iX;
- oCellGraphic.y = iY;
- oCellGraphic.regX = oSpriteCell.width * 0.5;
- oCellGraphic.regY = oSpriteCell.height * 0.5;
- s_oStage.addChild(oCellGraphic);
- s_oStage.setChildIndex(oCellGraphic, 1);
- };
- this.setID = function () {
- var oSprite = s_oSpriteLibrary.getSprite("cell_" + 0);
- for (var i = GRID_Y - 1; i > -1; i--) {
- for (var j = GRID_X - 1; j > -1; j--) {
- _aGrid[i][j].childID = new CCell(_aGrid[i][j].x, _aGrid[i][j].y, 0, oSprite, s_oGame.getContainerGame());
- _aGrid[i][j].childID.setVisible(false);
- }
- }
- };
- this.getMiddleGridX = function () {
- return _aGrid[0][GRID_X_HALF].x;
- };
- this.getStartGridY = function () {
- return _aGrid[0][0].y;
- };
- this.getXByCol = function (iCol) {
- return _aGrid[0][iCol].x;
- };
- this.getYByRow = function (iRow) {
- return _aGrid[iRow][0].y;
- };
- this.setCellState = function (iRow, iCol, bState) {
- _aGrid[iRow][iCol].occupied = bState;
- };
- this.getCellState = function (iRow, iCol) {
- return _aGrid[iRow][iCol].occupied;
- };
- this.checkDirection = function (oBlock, iDir) {
- var bHitSomething = false, oRenderOffsets = {x: 0, y: 0}, bFilled,
- iRenderCoordX, iRenderCoordY;
- for (var iStep = 0; iStep < oBlock.getWidth() * oBlock.getHeight(); iStep++) {
- iRenderCoordX = oBlock.getCol() + oRenderOffsets.x;
- iRenderCoordY = oBlock.getRow() + oRenderOffsets.y;
- switch (iDir) {
- case UP:
- iRenderCoordY--;
- break;
- case RIGHT:
- iRenderCoordX++;
- break;
- case DOWN:
- iRenderCoordY++;
- break;
- case LEFT:
- iRenderCoordX--;
- break;
- }
- if (iRenderCoordY > GRID_Y - 1) {
- return true;
- }
- if (_aGrid[iRenderCoordY][iRenderCoordX].occupied) {
- bFilled = oBlock.pieceFilled(iStep);
- if (bFilled) {
- bHitSomething = true;
- break;
- }
- }
- oRenderOffsets = oBlock.updateRenderOffsets(oRenderOffsets);
- }
- return bHitSomething;
- };
- this.getChildID = function (iRow, iCol) {
- return _aGrid[iRow][iCol].childID.getChildIndex();
- };
- this.checkHitBottom = function (oBlock) {
- var _bHitSomething = this.checkDirection(oBlock, DOWN);
- if (oBlock.getRow() + oBlock.getHeight() >= _aGrid.length) {
- _bHitSomething = true;
- }
- if (!_bHitSomething) {
- return;
- }
- oBlock.setReplace(true);
- var aCells = oBlock.getBlock();
- for (var i = 0; i < aCells.length; i++) {
- _aGrid[aCells[i].getRow()][aCells[i].getCol()].occupied = true;
- _aGrid[aCells[i].getRow()][aCells[i].getCol()].cell = aCells[i];
- }
- this.checkForFullLines();
- };
- this.checkBadRotation = function (aRotateBlock, oBlock) {
- var iHit = this._checkHit(aRotateBlock, oBlock);
-
- switch(iHit){
- case 2:{
- ///TRY SHIFT PIECE
- var iOriginalCol = oBlock.getCol();
- var iShift = GRID_X - aRotateBlock[0].length;
- oBlock.setCol(iShift);
-
- var iHitTest = this._checkHit(aRotateBlock, oBlock);
- if(iHitTest !== 0){
- oBlock.setCol(iOriginalCol);
- }else{
- iHit = 0;
- }
-
- break;
- }
- }
-
- return iHit;
- };
- this._checkHit = function(aRotateBlock, oBlock){
- var oRenderOffsets = {x: 0, y: 0},
- iRenderCoordX, iRenderCoordY;
- for (var iStep = 0; iStep < aRotateBlock[0].length * aRotateBlock.length; iStep++) {
- iRenderCoordX = oBlock.getCol() + oRenderOffsets.x;
- iRenderCoordY = oBlock.getRow() + oRenderOffsets.y;
- //console.log("X:"+iRenderCoordX + " Y:"+iRenderCoordY)
-
- if (iRenderCoordY > GRID_Y - 1) {
- return 1;
- }
- if (iRenderCoordX > GRID_X - 1) {
- return 2;
- }
- if (_aGrid[iRenderCoordY][iRenderCoordX].occupied) {
- return 1;
- }
-
- oRenderOffsets.x++;
- if (oRenderOffsets.x >= aRotateBlock[0].length) {
- oRenderOffsets.y++;
- oRenderOffsets.x = 0;
- }
- }
-
- return 0;
- };
- this.isAnimFullLines = function () {
- return _bAnimFullLines;
- };
- this.checkForFullLines = function () {
- var iFullLines = 0, iLinePieceCount;
- var aDeleteLine = new Array();
- var iID = 0;
- for (var i = 0; i < _aGrid.length; i++) {
- iLinePieceCount = 0;
- for (var j = 0; j < _aGrid[0].length; j++) {
- if (_aGrid[i][j].occupied) {
- iLinePieceCount++;
- }
- }
- if (iLinePieceCount === _aGrid[0].length) {
- iFullLines++;
- aDeleteLine[iID] = i;
- iID++;
- var iTime = DELAY_CELL_DESTROY_MS;
- for (var j = 0; j < _aGrid[0].length; j++) {
- _aGrid[i][j].occupied = false;
- this.animCellDestroy(_aGrid[i][j], iTime);
- iTime += DELAY_CELL_DESTROY_MS;
- }
- }
- }
- if (iFullLines > 0) {
- _bAnimFullLines = true;
- playSound("delete_lines", 1, false);
- iTime += CELL_DESTROY_MS * 2;
- createjs.Tween.get(this).wait(iTime).call(function () {
- s_oGame.calculateScore(iFullLines);
- s_oGame.checkForNewLevel(iFullLines);
- this.checkEmptyRowForFall(aDeleteLine);
- _bAnimFullLines = false;
- });
- }
- };
- this.animCellDestroy = function (oCell, iTime) {
- oCell.cell.changeState(1);
- createjs.Tween.get(oCell.cell.getSprite()).wait(iTime).to({scaleX: 0, scaleY: 0}, CELL_DESTROY_MS, createjs.Ease.cubicOut).call(function () {
- if (oCell.occupied === true) {
- oCell.cell.unload();
- }
- });
- };
- this.checkEmptyRowForFall = function (aDeleteLine) {
- var iTimeWait = 0;
- for (var i = 0; i < aDeleteLine.length; i++) {
- for (var k = 0; k < _aGrid[i].length; k++) {
- for (var j = aDeleteLine[i] - 1; j > -1; j--) {
- if (_aGrid[j][k].occupied === true) {
- _aGrid[j][k].occupied = false;
- _aGrid[j + 1][k].cell = _aGrid[j][k].cell;
- _aGrid[j][k].cell = null;
- _aGrid[j + 1][k].occupied = true;
- }
- }
- }
- }
- for (var j = _aGrid[i].length - 1; j > -1; j--) {
- for (var i = _aGrid.length - 1; i > -1; i--) {
- if (_aGrid[i][j].occupied === true) {
- _aGrid[i][j].cell.setChildIndex(this.getChildID(i, j));
- this.animateLineDown(_aGrid[i][j].cell.getSprite(), _aGrid[i][j].y, iTimeWait);
- iTimeWait += DELAY_LINE_DOWN;
- }
- }
- }
- };
- this.animateLineDown = function (oCell, iY, iTimeWait) {
- createjs.Tween.get(oCell).wait(iTimeWait).to({y: iY}, LINE_DOWN_TIME, createjs.Ease.cubicOut);
- };
- this.unload = function () {
- for (var i = 0; i < _aGrid.length; i++) {
- for (var j = 0; j < _aGrid[0].length; j++) {
- if (_aGrid[i][j].occupied) {
- _aGrid[i][j].cell.unload();
- }
- }
- }
- _aGrid = null;
- s_oGameField = null;
- };
- this._init();
- s_oGameField = this;
- return this;
- }
- var s_oGameField;
|