Click here to Skip to main content
15,890,512 members
Please Sign up or sign in to vote.
0.00/5 (No votes)
following cod is working in firefox but not in crome if i change a canvas position.....
I have downloaded a ready-made HTML5 Canvas Tile Swapping Puzzle, but I am not getting how to change that canvas position. If we change canvas position by giving margin to body then puzzle will not work. So, someone please help me about how do we align the puzzle to the middle of the page?

Following is a link from where i used code for this puzzle. http://code.tutsplus.com/tutorials/create-an-html5-canvas-tile-swapping-puzzle--active-10747[^]

Following is the code for that puzzle.

HTML
<!DOCTYPE html>
<html>
<head>
    <title>HTML5 Puzzle</title>
    <script>

             const PUZZLE_DIFFICULTY = 2;
            const PUZZLE_HOVER_TINT = '#009900';

            var _canvas;
            var _stage;

            var _img;
            var _pieces;
            var _puzzleWidth;
            var _puzzleHeight;
            var _pieceWidth;
            var _pieceHeight;
            var _currentPiece;
            var _currentDropPiece;

            var _mouse;

            function init(){
                _img = new Image();
                _img.addEventListener('load',onImage,false);
                _img.src = "apple.jpg";
            }


            function onImage(e){
                _pieceWidth = Math.floor(_img.width / PUZZLE_DIFFICULTY)
                _pieceHeight = Math.floor(_img.height / PUZZLE_DIFFICULTY)
                _puzzleWidth = _pieceWidth * PUZZLE_DIFFICULTY;
                _puzzleHeight = _pieceHeight * PUZZLE_DIFFICULTY;
                setCanvas();
                initPuzzle();
            }

            function setCanvas(){
                _canvas = document.getElementById('canvas');
                _stage = _canvas.getContext('2d');
                _canvas.width = _puzzleWidth;
                _canvas.height = _puzzleHeight;
                _canvas.style.border = "1px solid black";

            }

            function initPuzzle(){
                _pieces = [];
                _mouse = {x:0,y:0};
                _currentPiece = null;
                _currentDropPiece = null;
                _stage.drawImage(_img, 0, 0, _puzzleWidth, _puzzleHeight, 0, 0, _puzzleWidth, _puzzleHeight);
                createTitle("Click to Start Puzzle");
                buildPieces();
            }
            function createTitle(msg){
                _stage.fillStyle = "#000000";
                _stage.globalAlpha = .4;
                _stage.fillRect(100,_puzzleHeight - 40,_puzzleWidth - 200,40);
                _stage.fillStyle = "#FFFFFF";//text color
                _stage.globalAlpha = 1;
                _stage.textAlign = "center";
                _stage.textBaseline = "middle";
                _stage.font = "20px Arial";
                _stage.fillText(msg,_puzzleWidth / 2,_puzzleHeight - 20);
            }

            function buildPieces(){
                var i;
                var piece;
                var xPos = 0;
                var yPos = 0;
                for(i = 0;i < PUZZLE_DIFFICULTY * PUZZLE_DIFFICULTY;i++){
                    piece = {};
                    piece.sx = xPos;
                    piece.sy = yPos;
                    _pieces.push(piece);
                    xPos += _pieceWidth;
                    if(xPos >= _puzzleWidth){
                        xPos = 0;
                        yPos += _pieceHeight;
                    }
                }
                document.onmousedown = shufflePuzzle;
            }



            function shufflePuzzle(){
                _pieces = shuffleArray(_pieces);
                _stage.clearRect(0,0,_puzzleWidth,_puzzleHeight);
                var i;
                var piece;
                var xPos = 0;
                var yPos = 0;
                for(i = 0;i < _pieces.length;i++){
                    piece = _pieces[i];
                    piece.xPos = xPos;
                    piece.yPos = yPos;
                    _stage.drawImage(_img, piece.sx, piece.sy, _pieceWidth, _pieceHeight, xPos, yPos, _pieceWidth, _pieceHeight);
                    _stage.strokeRect(xPos, yPos, _pieceWidth,_pieceHeight);
                    xPos += _pieceWidth;
                    if(xPos >= _puzzleWidth){
                        xPos = 0;
                        yPos += _pieceHeight;
                    }
                }
                document.onmousedown = onPuzzleClick;
            }

            function shuffleArray(o){
                for(var j, x, i = o.length; i; j = parseInt(Math.random() * i), x = o[--i], o[i] = o[j], o[j] = x);
                return o;
            }



            function onPuzzleClick(e){
                if(e.layerX || e.layerX == 0){
                    _mouse.x = e.layerX - _canvas.offsetLeft;
                    _mouse.y = e.layerY - _canvas.offsetTop;
                }
                else if(e.offsetX || e.offsetX == 0){
                    _mouse.x = e.offsetX - _canvas.offsetLeft;
                    _mouse.y = e.offsetY - _canvas.offsetTop;
                }
                _currentPiece = checkPieceClicked();
                if(_currentPiece != null){
                    _stage.clearRect(_currentPiece.xPos,_currentPiece.yPos,_pieceWidth,_pieceHeight);
                    _stage.save();
                    _stage.globalAlpha = .9;
                    _stage.drawImage(_img, _currentPiece.sx, _currentPiece.sy, _pieceWidth, _pieceHeight, _mouse.x - (_pieceWidth / 2), _mouse.y - (_pieceHeight / 2), _pieceWidth, _pieceHeight);
                    _stage.restore();
                    document.onmousemove = updatePuzzle;
                    document.onmouseup = pieceDropped;
                }
            }

            function checkPieceClicked(){
                var i;
                var piece;
                for(i = 0;i < _pieces.length;i++){
                    piece = _pieces[i];
                    if(_mouse.x < piece.xPos || _mouse.x > (piece.xPos + _pieceWidth) || _mouse.y < piece.yPos || _mouse.y > (piece.yPos + _pieceHeight)){
                        //PIECE NOT HIT
                    }
                    else{
                        return piece;
                    }
                }
                return null;
            }

            function updatePuzzle(e){
                _currentDropPiece = null;
                if(e.layerX || e.layerX == 0){
                    _mouse.x = e.layerX - _canvas.offsetLeft;
                    _mouse.y = e.layerY - _canvas.offsetTop;
                }
                else if(e.offsetX || e.offsetX == 0){
                    _mouse.x = e.offsetX - _canvas.offsetLeft;
                    _mouse.y = e.offsetY - _canvas.offsetTop;
                }
                _stage.clearRect(0,0,_puzzleWidth,_puzzleHeight);
                var i;
                var piece;
                for(i = 0;i < _pieces.length;i++){
                    piece = _pieces[i];
                    if(piece == _currentPiece){
                        continue;
                    }
                    _stage.drawImage(_img, piece.sx, piece.sy, _pieceWidth, _pieceHeight, piece.xPos, piece.yPos, _pieceWidth, _pieceHeight);
                    _stage.strokeRect(piece.xPos, piece.yPos, _pieceWidth,_pieceHeight);
                    if(_currentDropPiece == null){
                        if(_mouse.x < piece.xPos || _mouse.x > (piece.xPos + _pieceWidth) || _mouse.y < piece.yPos || _mouse.y > (piece.yPos + _pieceHeight)){
                            //NOT OVER
                        }
                        else{
                            _currentDropPiece = piece;
                            _stage.save();
                            _stage.globalAlpha = .4;
                            _stage.fillStyle = PUZZLE_HOVER_TINT;
                            _stage.fillRect(_currentDropPiece.xPos,_currentDropPiece.yPos,_pieceWidth, _pieceHeight);
                            _stage.restore();
                        }
                    }
                }
                _stage.save();
                _stage.globalAlpha = .6;
                _stage.drawImage(_img, _currentPiece.sx, _currentPiece.sy, _pieceWidth, _pieceHeight, _mouse.x - (_pieceWidth / 2), _mouse.y - (_pieceHeight / 2), _pieceWidth, _pieceHeight);
                _stage.restore();
                _stage.strokeRect( _mouse.x - (_pieceWidth / 2), _mouse.y - (_pieceHeight / 2), _pieceWidth,_pieceHeight);
            }


    function pieceDropped(e){
        document.onmousemove = null;
        document.onmouseup = null;
        if(_currentDropPiece != null){
            var tmp = {xPos:_currentPiece.xPos,yPos:_currentPiece.yPos};
            _currentPiece.xPos = _currentDropPiece.xPos;
            _currentPiece.yPos = _currentDropPiece.yPos;
            _currentDropPiece.xPos = tmp.xPos;
            _currentDropPiece.yPos = tmp.yPos;
        }
        resetPuzzleAndCheckWin();
}

function resetPuzzleAndCheckWin(){
    _stage.clearRect(0,0,_puzzleWidth,_puzzleHeight);
    var gameWin = true;
    var i;
    var piece;
    for(i = 0;i < _pieces.length;i++){
        piece = _pieces[i];
        _stage.drawImage(_img, piece.sx, piece.sy, _pieceWidth, _pieceHeight, piece.xPos, piece.yPos, _pieceWidth, _pieceHeight);
        _stage.strokeRect(piece.xPos, piece.yPos, _pieceWidth,_pieceHeight);
        if(piece.xPos != piece.sx || piece.yPos != piece.sy){
            gameWin = false;
        }
    }
    if(gameWin){
        setTimeout(gameOver,500);
    }
}
function ButtonClick(){

             window.location="http://www.tutorialspoint.com";

}
function Add(){
    alert("Congratulation...! You have Won...!!");
        var btn=document.createElement("input");
        btn.type="button";
        btn.id="mybutton";
        btn.value="Submit";
        btn.style.width="100px";
        btn.style.height="50px";
        btn.style.removed="green";
        btn.style.margin="100px";
        document.body.appendChild(btn);
        var buttonid =document.getElementById("mybutton");
        buttonid.addEventListener('click', ButtonClick,false);

    }
function gameOver(){
    document.>
</head>


    <body onload="init();">
        <canvas id="canvas"></canvas>


    </body>

    </html>
Posted
Updated 22-Aug-15 4:29am
v2

This content, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)



CodeProject, 20 Bay Street, 11th Floor Toronto, Ontario, Canada M5J 2N8 +1 (416) 849-8900