diff options
Diffstat (limited to 'examples/declarative/tutorials/samegame/samegame3/samegame.js')
-rw-r--r-- | examples/declarative/tutorials/samegame/samegame3/samegame.js | 153 |
1 files changed, 74 insertions, 79 deletions
diff --git a/examples/declarative/tutorials/samegame/samegame3/samegame.js b/examples/declarative/tutorials/samegame/samegame3/samegame.js index 9620e25..c12def7 100644 --- a/examples/declarative/tutorials/samegame/samegame3/samegame.js +++ b/examples/declarative/tutorials/samegame/samegame3/samegame.js @@ -1,21 +1,20 @@ /* This script file handles the game logic */ var maxColumn = 10; var maxRow = 15; -var maxIndex = maxColumn*maxRow; +var maxIndex = maxColumn * maxRow; var board = new Array(maxIndex); var component; //Index function used instead of a 2D array -function index(column,row) { +function index(column, row) { return column + (row * maxColumn); } -function startNewGame() -{ +function startNewGame() { //Calculate board size - maxColumn = Math.floor(gameCanvas.width/gameCanvas.blockSize); - maxRow = Math.floor(gameCanvas.height/gameCanvas.blockSize); - maxIndex = maxRow*maxColumn; + maxColumn = Math.floor(gameCanvas.width / gameCanvas.blockSize); + maxRow = Math.floor(gameCanvas.height / gameCanvas.blockSize); + maxIndex = maxRow * maxColumn; //Close dialogs dialog.forceClose(); @@ -23,36 +22,36 @@ function startNewGame() //Initialize Board board = new Array(maxIndex); gameCanvas.score = 0; - for(var column=0; column<maxColumn; column++){ - for(var row=0; row<maxRow; row++){ - board[index(column,row)] = null; - createBlock(column,row); + for (var column = 0; column < maxColumn; column++) { + for (var row = 0; row < maxRow; row++) { + board[index(column, row)] = null; + createBlock(column, row); } } } -function createBlock(column,row){ - if(component==null) +function createBlock(column, row) { + if (component == null) component = createComponent("Block.qml"); // Note that if Block.qml was not a local file, component.isReady would be // false and we should wait for the component's statusChanged() signal to // know when the file is downloaded and fully loaded before calling createObject(). - if(component.isReady){ + if (component.isReady) { var dynamicObject = component.createObject(); - if(dynamicObject == null){ + if (dynamicObject == null) { print("error creating block"); print(component.errorsString()); return false; } dynamicObject.type = Math.floor(Math.random() * 3); dynamicObject.parent = gameCanvas; - dynamicObject.x = column*gameCanvas.blockSize; - dynamicObject.y = row*gameCanvas.blockSize; + dynamicObject.x = column * gameCanvas.blockSize; + dynamicObject.y = row * gameCanvas.blockSize; dynamicObject.width = gameCanvas.blockSize; dynamicObject.height = gameCanvas.blockSize; - board[index(column,row)] = dynamicObject; - }else{ + board[index(column, row)] = dynamicObject; + } else { print("error loading block component"); print(component.errorsString()); return false; @@ -60,21 +59,21 @@ function createBlock(column,row){ return true; } -var fillFound;//Set after a floodFill call to the number of blocks found -var floodBoard;//Set to 1 if the floodFill reaches off that node - +var fillFound; +//Set after a floodFill call to the number of blocks found +var floodBoard; +//Set to 1 if the floodFill reaches off that node //![1] -function handleClick(xPos,yPos) -{ - var column = Math.floor(xPos/gameCanvas.blockSize); - var row = Math.floor(yPos/gameCanvas.blockSize); - if(column >= maxColumn || column < 0 || row >= maxRow || row < 0) +function handleClick(xPos, yPos) { + var column = Math.floor(xPos / gameCanvas.blockSize); + var row = Math.floor(yPos / gameCanvas.blockSize); + if (column >= maxColumn || column < 0 || row >= maxRow || row < 0) return; - if(board[index(column, row)] == null) + if (board[index(column, row)] == null) return; //If it's a valid block, remove it and all connected (does nothing if it's not connected) - floodFill(column,row, -1); - if(fillFound <= 0) + floodFill(column, row, -1); + if (fillFound <= 0) return; gameCanvas.score += (fillFound - 1) * (fillFound - 1); shuffleDown(); @@ -82,67 +81,65 @@ function handleClick(xPos,yPos) } //![1] -function floodFill(column,row,type) -{ - if(board[index(column, row)] == null) +function floodFill(column, row, type) { + if (board[index(column, row)] == null) return; var first = false; - if(type == -1){ + if (type == -1) { first = true; - type = board[index(column,row)].type; - + type = board[index(column, row)].type; + //Flood fill initialization fillFound = 0; floodBoard = new Array(maxIndex); } - if(column >= maxColumn || column < 0 || row >= maxRow || row < 0) + if (column >= maxColumn || column < 0 || row >= maxRow || row < 0) return; - if(floodBoard[index(column, row)] == 1 || (!first && type != board[index(column,row)].type)) + if (floodBoard[index(column, row)] == 1 || (!first && type != board[index(column, row)].type)) return; floodBoard[index(column, row)] = 1; - floodFill(column+1,row,type); - floodFill(column-1,row,type); - floodFill(column,row+1,type); - floodFill(column,row-1,type); - if(first==true && fillFound == 0) - return;//Can't remove single blocks - board[index(column,row)].opacity = 0; - board[index(column,row)] = null; + floodFill(column + 1, row, type); + floodFill(column - 1, row, type); + floodFill(column, row + 1, type); + floodFill(column, row - 1, type); + if (first == true && fillFound == 0) + return; //Can't remove single blocks + board[index(column, row)].opacity = 0; + board[index(column, row)] = null; fillFound += 1; } -function shuffleDown() -{ +function shuffleDown() { //Fall down - for(var column=0; column<maxColumn; column++){ + for (var column = 0; column < maxColumn; column++) { var fallDist = 0; - for(var row=maxRow-1; row>=0; row--){ - if(board[index(column,row)] == null){ + for (var row = maxRow - 1; row >= 0; row--) { + if (board[index(column, row)] == null) { fallDist += 1; - }else{ - if(fallDist > 0){ - var obj = board[index(column,row)]; + } else { + if (fallDist > 0) { + var obj = board[index(column, row)]; obj.y += fallDist * gameCanvas.blockSize; - board[index(column,row+fallDist)] = obj; - board[index(column,row)] = null; + board[index(column, row + fallDist)] = obj; + board[index(column, row)] = null; } } } } //Fall to the left var fallDist = 0; - for(var column=0; column<maxColumn; column++){ - if(board[index(column, maxRow - 1)] == null){ + for (var column = 0; column < maxColumn; column++) { + if (board[index(column, maxRow - 1)] == null) { fallDist += 1; - }else{ - if(fallDist > 0){ - for(var row=0; row<maxRow; row++){ - var obj = board[index(column,row)]; - if(obj == null) + } else { + if (fallDist > 0) { + for (var row = 0; row < maxRow; row++) { + var obj = board[index(column, row)]; + if (obj == null) continue; obj.x -= fallDist * gameCanvas.blockSize; - board[index(column-fallDist,row)] = obj; - board[index(column,row)] = null; + board[index(column - fallDist, row)] = obj; + board[index(column, row)] = null; } } } @@ -150,32 +147,30 @@ function shuffleDown() } //![2] -function victoryCheck() -{ +function victoryCheck() { //Award bonus points if no blocks left var deservesBonus = true; - for(var column=maxColumn-1; column>=0; column--) - if(board[index(column, maxRow - 1)] != null) - deservesBonus = false; - if(deservesBonus) + for (var column = maxColumn - 1; column >= 0; column--) + if (board[index(column, maxRow - 1)] != null) + deservesBonus = false; + if (deservesBonus) gameCanvas.score += 500; //Check whether game has finished - if(deservesBonus || !(floodMoveCheck(0,maxRow-1, -1))) + if (deservesBonus || !(floodMoveCheck(0, maxRow - 1, -1))) dialog.show("Game Over. Your score is " + gameCanvas.score); } //![2] //only floods up and right, to see if it can find adjacent same-typed blocks -function floodMoveCheck(column, row, type) -{ - if(column >= maxColumn || column < 0 || row >= maxRow || row < 0) +function floodMoveCheck(column, row, type) { + if (column >= maxColumn || column < 0 || row >= maxRow || row < 0) return false; - if(board[index(column, row)] == null) + if (board[index(column, row)] == null) return false; var myType = board[index(column, row)].type; - if(type == myType) + if (type == myType) return true; - return floodMoveCheck(column + 1, row, myType) || - floodMoveCheck(column, row - 1, board[index(column,row)].type); + return floodMoveCheck(column + 1, row, myType) || floodMoveCheck(column, row - 1, board[index(column, row)].type); } + |