Created
April 30, 2014 07:46
-
-
Save anonymous/4a9eb777673e701b3835 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| <!DOCTYPE html> | |
| <html> | |
| <head> | |
| <title>East Egg</title> | |
| <style> | |
| body { | |
| background-color: grey; | |
| } | |
| </style> | |
| <script> | |
| const PUZZLE_DIFFICULTY = 4; | |
| const PUZZLE_HOVER_TINT = '#009900'; | |
| var _stage; | |
| var _canvas; | |
| var _img; | |
| var _pieces; | |
| var _puzzleWidth; | |
| var _puzzleHeight; | |
| var _pieceWidth; | |
| var _pieceHeight; | |
| var _currentPiece; | |
| var _currentDropPiece; | |
| var _mouse; | |
| function relMouseCoords(event) { | |
| var canvasX; | |
| var canvasY; | |
| var currentElement = event.target; | |
| canvasX = event.pageX - currentElement.offsetLeft; | |
| canvasY = event.pageY - currentElement.offsetTop; | |
| return {x: canvasX, y: canvasY} | |
| }; | |
| function init(){ | |
| _img = new Image(); | |
| _img.addEventListener('load',onImage,false); | |
| _img.src = "zc.png"; | |
| } | |
| 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"; | |
| _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; | |
| } | |
| } | |
| 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 onPuzzleClick(e){ | |
| _mouse = relMouseCoords(e); | |
| _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; | |
| _mouse = relMouseCoords(e); | |
| _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 gameOver(){ | |
| document.onmousedown = null; | |
| document.onmousemove = null; | |
| document.onmouseup = null; | |
| window.open('mailto:[email protected]?subject=Hex Contest&body=I have completed the contest'); | |
| } | |
| 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; | |
| } | |
| </script> | |
| </head> | |
| <body onload="init();"> | |
| <center> <canvas id="canvas"></canvas></center> | |
| </body> | |
| </html> |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment