<!DOCTYPE HTML>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>Feed the Snake v 1.1 beta</title>
<style>
body
{
background:#000;
color:#FFF;
}
canvas
{
background:#FFF;
}
#controls
{
position:absolute;
top:0;
right:0;
margin:10px;
}
</style>
<script type="text/javascript">
var snake = window.snake || {};
function launchFullscreen(element) {
if(element.requestFullscreen) {
element.requestFullscreen();
} else if(element.mozRequestFullScreen) {
element.mozRequestFullScreen();
} else if(element.webkitRequestFullscreen) {
element.webkitRequestFullscreen();
} else if(element.msRequestFullscreen) {
element.msRequestFullscreen();
}
}
window.onload = function(){
document.addEventListener("fullscreenchange", function(){snake.game.adjust();});
document.addEventListener("webkitfullscreenchange", function(){snake.game.adjust();});
document.addEventListener("mozfullscreenchange", function(){snake.game.adjust();});
document.addEventListener("MSFullscreenChange", function(){snake.game.adjust();});
snake.game = (function()
{
var canvas = document.getElementById('canvas');
var ctx = canvas.getContext('2d');
var status=false;
var score = 0;
var old_direction = 'right';
var direction = 'right';
var block = 10;
var score = 0;
var refresh_rate = 250;
var pos = [[5,1],[4,1],[3,1],[2,1],[1,1]];
var scoreboard = document.getElementById('scoreboard');
var control = document.getElementById('controls');
var keys = {
37 : 'left',
38 : 'up',
39 : 'right',
40 : 'down'
};
function adjust()
{
if (document.fullscreenElement || document.webkitFullscreenElement || document.mozFullScreenElement || document.msFullscreenElement )
{
canvas.width=window.innerWidth;
canvas.height=window.innerHeight;
control.style.display='none';
}
else
{
canvas.width=850;
canvas.height=600;
control.style.display='inline';
}
}
var food
= [Math.
round(Math.
random(4)*(canvas.
width - 10)),
Math.
round(Math.
random(4)*(canvas.
height - 10)),
]; function todraw()
{
for(var i = 0; i < pos.length; i++)
{
draw(pos[i]);
}
}
function giveLife()
{
var nextPosition = pos[0].slice();
switch(old_direction)
{
case 'right':
nextPosition[0] += 1;
break;
case 'left':
nextPosition[0] -= 1;
break;
case 'up':
nextPosition[1] -= 1;
break;
case 'down':
nextPosition[1] += 1;
break;
}
pos.unshift(nextPosition);
pos.pop();
}
function grow()
{
var nextPosition = pos[0].slice();
switch(old_direction)
{
case 'right':
nextPosition[0] += 1;
break;
case 'left':
nextPosition[0] -= 1;
break;
case 'up':
nextPosition[1] -= 1;
break;
case 'down':
nextPosition[1] += 1;
break;
}
pos.unshift(nextPosition);
}
function loop()
{
ctx.clearRect(0,0,canvas.width,canvas.height);
todraw();
giveLife();
feed();
if(is_catched(pos[0][0]*block,pos[0][1]*block,block,block,food[0],food[1],10,10))
{
score += 10;
createfood();
scoreboard.innerHTML = score;
grow();
if(refresh_rate > 100)
{
refresh_rate -=5;
}
}
snake.game.status = setTimeout(function() { loop(); },refresh_rate);
}
window.onkeydown = function(event){
direction = keys[event.keyCode];
if(direction)
{
setWay(direction);
event.preventDefault();
}
};
function setWay(direction)
{
switch(direction)
{
case 'left':
if(old_direction!='right')
{
old_direction = direction;
}
break;
case 'right':
if(old_direction!='left')
{
old_direction = direction;
}
break;
case 'up':
if(old_direction!='down')
{
old_direction = direction;
}
break;
case 'down':
if(old_direction!='up')
{
old_direction = direction;
}
break;
}
}
function feed()
{
ctx.beginPath();
ctx.fillStyle = "#ff0000";
ctx.fillRect(food[0],food[1],10,10);
ctx.fill();
ctx.closePath();
}
function createfood()
{
}
function is_catched(ax,ay,awidth,aheight,bx,by,bwidth,bheight) {
return !(
((ay + aheight) < (by)) ||
(ay > (by + bheight)) ||
((ax + awidth) < bx) ||
(ax > (bx + bwidth))
);
}
function draw(pos)
{
var x = pos[0] * block;
var y = pos[1] * block;
if(x >= canvas.width || x <= 0 || y >= canvas.height || y<= 0)
{
document.getElementById('pause').disabled='true';
snake.game.status=false;
ctx.clearRect(0,0,canvas.width,canvas.height);
ctx.font='40px san-serif';
ctx.fillText('Game Over',300,250);
ctx.font = '20px san-serif';
ctx.fillStyle='#000000';
ctx.fillText('To Play again Refresh the page or click the Restarts button',200,300);
throw ('Game Over');
}
else
{
ctx.beginPath();
ctx.fillStyle='#000000';
ctx.fillRect(x,y,block,block);
ctx.closePath();
}
}
function pause(elem)
{
if(snake.game.status)
{
clearTimeout(snake.game.status);
snake.game.status=false;
elem.value='Play'
}
else
{
loop();
elem.value='Pause';
}
}
function begin()
{
loop();
}
function restart()
{
location.reload();
}
function start()
{
ctx.fillStyle='#000000';
ctx.fillRect(0,0,canvas.width,canvas.height);
ctx.fillStyle='#ffffff';
ctx.font='40px helvatica';
ctx.fillText('ZeX_EVO',370,140);
ctx.font='20px san-serif';
ctx.fillText('presents',395,190);
ctx.font='italic 60px san-serif';
ctx.fillText('Friendly Snake',240,280);
img.onload = function()
{
ctx.drawImage(img,300,300,200,200);
ctx.fillRect(410,330,10,10);
}
img.src ='snake.png';
}
function fullscreen()
{
launchFullscreen(canvas);
}
return {
pause: pause,
restart : restart,
start : start,
begin: begin,
fullscreen : fullscreen,
adjust : adjust,
};
})();
snake.game.start();
}
</script>
</head>
<body>
<canvas width="850" height="600" id="canvas" style="border:1px solid #333;" onclick="snake.game.begin();">
</canvas>
<div id="controls" style="float:right; text-align:center;">
<input type="button" id="pause" value="Play" onClick="snake.game.pause(this);" accesskey="p">
<input type="button" id="restart" value="Restart" onClick="snake.game.restart();">
<br/><br/>
<input type="button" id="fullscreen" value="Play Fullscreen" onClick="snake.game.fullscreen();">
<br/><br/>
<div style="font-size:24px;">
Score :
<span id="scoreboard">0</span>
</div>
</div>
</body>
</html>
You can see a live version of the game here.
javascript html5 canvas snake-game
PCFET0NUWVBFIEhUTUw+CjxodG1sPgo8aGVhZD4KPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9dXRmLTgiPgo8dGl0bGU+RmVlZCB0aGUgU25ha2UgdiAxLjEgYmV0YTwvdGl0bGU+CjxzdHlsZT4KYm9keQp7CiAgICBiYWNrZ3JvdW5kOiMwMDA7CiAgICBjb2xvcjojRkZGOwp9CmNhbnZhcwp7CiAgICBiYWNrZ3JvdW5kOiNGRkY7Cn0KI2NvbnRyb2xzCnsKICAgIHBvc2l0aW9uOmFic29sdXRlOwogICAgdG9wOjA7CiAgICByaWdodDowOwogICAgbWFyZ2luOjEwcHg7Cn0KPC9zdHlsZT4KPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgp2YXIgc25ha2UgPSB3aW5kb3cuc25ha2UgfHwge307CmZ1bmN0aW9uIGxhdW5jaEZ1bGxzY3JlZW4oZWxlbWVudCkgewogIGlmKGVsZW1lbnQucmVxdWVzdEZ1bGxzY3JlZW4pIHsKICAgIGVsZW1lbnQucmVxdWVzdEZ1bGxzY3JlZW4oKTsKICB9IGVsc2UgaWYoZWxlbWVudC5tb3pSZXF1ZXN0RnVsbFNjcmVlbikgewogICAgZWxlbWVudC5tb3pSZXF1ZXN0RnVsbFNjcmVlbigpOwogIH0gZWxzZSBpZihlbGVtZW50LndlYmtpdFJlcXVlc3RGdWxsc2NyZWVuKSB7CiAgICBlbGVtZW50LndlYmtpdFJlcXVlc3RGdWxsc2NyZWVuKCk7CiAgfSBlbHNlIGlmKGVsZW1lbnQubXNSZXF1ZXN0RnVsbHNjcmVlbikgewogICAgZWxlbWVudC5tc1JlcXVlc3RGdWxsc2NyZWVuKCk7CiAgfQp9CndpbmRvdy5vbmxvYWQgPSBmdW5jdGlvbigpewogICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigiZnVsbHNjcmVlbmNoYW5nZSIsIGZ1bmN0aW9uKCl7c25ha2UuZ2FtZS5hZGp1c3QoKTt9KTsKICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoIndlYmtpdGZ1bGxzY3JlZW5jaGFuZ2UiLCBmdW5jdGlvbigpe3NuYWtlLmdhbWUuYWRqdXN0KCk7fSk7CiAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCJtb3pmdWxsc2NyZWVuY2hhbmdlIiwgZnVuY3Rpb24oKXtzbmFrZS5nYW1lLmFkanVzdCgpO30pOwogICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigiTVNGdWxsc2NyZWVuQ2hhbmdlIiwgZnVuY3Rpb24oKXtzbmFrZS5nYW1lLmFkanVzdCgpO30pOwoKICAgIHNuYWtlLmdhbWUgPSAoZnVuY3Rpb24oKQogICAgewogICAgICAgIHZhciBjYW52YXMgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnY2FudmFzJyk7CiAgICAgICAgdmFyIGN0eCA9IGNhbnZhcy5nZXRDb250ZXh0KCcyZCcpOwogICAgICAgIHZhciBzdGF0dXM9ZmFsc2U7CiAgICAgICAgdmFyIHNjb3JlID0gMDsKICAgICAgICB2YXIgb2xkX2RpcmVjdGlvbiA9ICdyaWdodCc7CiAgICAgICAgdmFyIGRpcmVjdGlvbiA9ICdyaWdodCc7CiAgICAgICAgdmFyIGJsb2NrID0gMTA7CiAgICAgICAgdmFyIHNjb3JlID0gMDsKICAgICAgICB2YXIgcmVmcmVzaF9yYXRlID0gMjUwOwogICAgICAgIHZhciBwb3MgPSBbWzUsMV0sWzQsMV0sWzMsMV0sWzIsMV0sWzEsMV1dOwogICAgICAgIHZhciBzY29yZWJvYXJkID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Njb3JlYm9hcmQnKTsKICAgICAgICB2YXIgY29udHJvbCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdjb250cm9scycpOwogICAgICAgIHZhciBrZXlzID0gewogICAgICAgICAgICAzNyA6ICdsZWZ0JywKICAgICAgICAgICAgMzggOiAndXAnLAogICAgICAgICAgICAzOSA6ICdyaWdodCcsCiAgICAgICAgICAgIDQwIDogJ2Rvd24nCiAgICAgICAgICAgIH07CiAgICAgICAgZnVuY3Rpb24gYWRqdXN0KCkKICAgICAgICB7CiAgICAgICAgICAgIGlmIChkb2N1bWVudC5mdWxsc2NyZWVuRWxlbWVudCB8fCBkb2N1bWVudC53ZWJraXRGdWxsc2NyZWVuRWxlbWVudCB8fCBkb2N1bWVudC5tb3pGdWxsU2NyZWVuRWxlbWVudCB8fCBkb2N1bWVudC5tc0Z1bGxzY3JlZW5FbGVtZW50ICkKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgY2FudmFzLndpZHRoPXdpbmRvdy5pbm5lcldpZHRoOwogICAgICAgICAgICAgICAgY2FudmFzLmhlaWdodD13aW5kb3cuaW5uZXJIZWlnaHQ7CiAgICAgICAgICAgICAgICBjb250cm9sLnN0eWxlLmRpc3BsYXk9J25vbmUnOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgY2FudmFzLndpZHRoPTg1MDsKICAgICAgICAgICAgICAgIGNhbnZhcy5oZWlnaHQ9NjAwOwogICAgICAgICAgICAgICAgY29udHJvbC5zdHlsZS5kaXNwbGF5PSdpbmxpbmUnOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIHZhciBmb29kID0gW01hdGgucm91bmQoTWF0aC5yYW5kb20oNCkqKGNhbnZhcy53aWR0aCAtIDEwKSksIE1hdGgucm91bmQoTWF0aC5yYW5kb20oNCkqKGNhbnZhcy5oZWlnaHQgLSAxMCkpLF07CiAgICAgICAgZnVuY3Rpb24gdG9kcmF3KCkKICAgICAgICB7CiAgICAgICAgICAgIGZvcih2YXIgaSA9IDA7IGkgPCBwb3MubGVuZ3RoOyBpKyspCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIGRyYXcocG9zW2ldKTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBmdW5jdGlvbiBnaXZlTGlmZSgpCiAgICAgICAgewogICAgICAgICAgICB2YXIgbmV4dFBvc2l0aW9uID0gcG9zWzBdLnNsaWNlKCk7CiAgICAgICAgICAgIHN3aXRjaChvbGRfZGlyZWN0aW9uKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBjYXNlICdyaWdodCc6CiAgICAgICAgICAgICAgICAgICAgbmV4dFBvc2l0aW9uWzBdICs9IDE7CiAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICBjYXNlICdsZWZ0JzoKICAgICAgICAgICAgICAgICAgICBuZXh0UG9zaXRpb25bMF0gLT0gMTsKICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgIGNhc2UgJ3VwJzoKICAgICAgICAgICAgICAgICAgICBuZXh0UG9zaXRpb25bMV0gLT0gMTsKICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgIGNhc2UgJ2Rvd24nOgogICAgICAgICAgICAgICAgICAgIG5leHRQb3NpdGlvblsxXSArPSAxOwogICAgICAgICAgICAgICAgICAgIGJyZWFrOyAgICAKICAgICAgICAgICAgfQogICAgICAgICAgICBwb3MudW5zaGlmdChuZXh0UG9zaXRpb24pOwogICAgICAgICAgICBwb3MucG9wKCk7CiAgICAgICAgfQogICAgICAgIGZ1bmN0aW9uIGdyb3coKQogICAgICAgIHsKICAgICAgICAgICAgdmFyIG5leHRQb3NpdGlvbiA9IHBvc1swXS5zbGljZSgpOwogICAgICAgICAgICBzd2l0Y2gob2xkX2RpcmVjdGlvbikKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgY2FzZSAncmlnaHQnOgogICAgICAgICAgICAgICAgICAgIG5leHRQb3NpdGlvblswXSArPSAxOwogICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgY2FzZSAnbGVmdCc6CiAgICAgICAgICAgICAgICAgICAgbmV4dFBvc2l0aW9uWzBdIC09IDE7CiAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICBjYXNlICd1cCc6CiAgICAgICAgICAgICAgICAgICAgbmV4dFBvc2l0aW9uWzFdIC09IDE7CiAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICBjYXNlICdkb3duJzoKICAgICAgICAgICAgICAgICAgICBuZXh0UG9zaXRpb25bMV0gKz0gMTsKICAgICAgICAgICAgICAgICAgICBicmVhazsgICAgCiAgICAgICAgICAgIH0KICAgICAgICAgICAgcG9zLnVuc2hpZnQobmV4dFBvc2l0aW9uKTsKICAgICAgICB9CiAgICAgICAgZnVuY3Rpb24gbG9vcCgpCiAgICAgICAgewogICAgICAgICAgICBjdHguY2xlYXJSZWN0KDAsMCxjYW52YXMud2lkdGgsY2FudmFzLmhlaWdodCk7CiAgICAgICAgICAgIHRvZHJhdygpOwogICAgICAgICAgICBnaXZlTGlmZSgpOwogICAgICAgICAgICBmZWVkKCk7CiAgICAgICAgICAgIGlmKGlzX2NhdGNoZWQocG9zWzBdWzBdKmJsb2NrLHBvc1swXVsxXSpibG9jayxibG9jayxibG9jayxmb29kWzBdLGZvb2RbMV0sMTAsMTApKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBzY29yZSArPSAxMDsKICAgICAgICAgICAgICAgIGNyZWF0ZWZvb2QoKTsKICAgICAgICAgICAgICAgIHNjb3JlYm9hcmQuaW5uZXJIVE1MID0gc2NvcmU7CiAgICAgICAgICAgICAgICBncm93KCk7CiAgICAgICAgICAgICAgICBpZihyZWZyZXNoX3JhdGUgPiAxMDApCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgcmVmcmVzaF9yYXRlIC09NTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgICBzbmFrZS5nYW1lLnN0YXR1cyA9IHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7IGxvb3AoKTsgfSxyZWZyZXNoX3JhdGUpOwogICAgICAgIH0KICAgICAgICB3aW5kb3cub25rZXlkb3duID0gZnVuY3Rpb24oZXZlbnQpewogICAgICAgICAgICAgZGlyZWN0aW9uID0ga2V5c1tldmVudC5rZXlDb2RlXTsKICAgICAgICAgICAgICAgIGlmKGRpcmVjdGlvbikKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBzZXRXYXkoZGlyZWN0aW9uKTsKICAgICAgICAgICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9OwogICAgICAgIGZ1bmN0aW9uIHNldFdheShkaXJlY3Rpb24pCiAgICAgICAgewogICAgICAgICAgICBzd2l0Y2goZGlyZWN0aW9uKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBjYXNlICdsZWZ0JzoKICAgICAgICAgICAgICAgICAgICBpZihvbGRfZGlyZWN0aW9uIT0ncmlnaHQnKQogICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgb2xkX2RpcmVjdGlvbiA9IGRpcmVjdGlvbjsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICBjYXNlICdyaWdodCc6CiAgICAgICAgICAgICAgICAgICAgaWYob2xkX2RpcmVjdGlvbiE9J2xlZnQnKQogICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgb2xkX2RpcmVjdGlvbiA9IGRpcmVjdGlvbjsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICBjYXNlICd1cCc6CiAgICAgICAgICAgICAgICAgICAgaWYob2xkX2RpcmVjdGlvbiE9J2Rvd24nKQogICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgb2xkX2RpcmVjdGlvbiA9IGRpcmVjdGlvbjsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICBjYXNlICdkb3duJzoKICAgICAgICAgICAgICAgICAgICBpZihvbGRfZGlyZWN0aW9uIT0ndXAnKQogICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgb2xkX2RpcmVjdGlvbiA9IGRpcmVjdGlvbjsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIH0KCiAgICAgICAgfQogICAgICAgIGZ1bmN0aW9uIGZlZWQoKQogICAgICAgIHsKICAgICAgICAgICAgY3R4LmJlZ2luUGF0aCgpOwogICAgICAgICAgICBjdHguZmlsbFN0eWxlID0gIiNmZjAwMDAiOwogICAgICAgICAgICBjdHguZmlsbFJlY3QoZm9vZFswXSxmb29kWzFdLDEwLDEwKTsKICAgICAgICAgICAgY3R4LmZpbGwoKTsKICAgICAgICAgICAgY3R4LmNsb3NlUGF0aCgpOwogICAgICAgIH0KICAgICAgICBmdW5jdGlvbiBjcmVhdGVmb29kKCkKICAgICAgICB7CiAgICAgICAgICAgIGZvb2QgPSBbTWF0aC5yb3VuZChNYXRoLnJhbmRvbSg0KSo4NTApLCBNYXRoLnJvdW5kKE1hdGgucmFuZG9tKDQpKjYwMCldOwogICAgICAgIH0KICAgICAgICBmdW5jdGlvbiBpc19jYXRjaGVkKGF4LGF5LGF3aWR0aCxhaGVpZ2h0LGJ4LGJ5LGJ3aWR0aCxiaGVpZ2h0KSB7CiAgICAgICAgICAgIHJldHVybiAhKAogICAgICAgICAgICAoKGF5ICsgYWhlaWdodCkgPCAoYnkpKSB8fAogICAgICAgICAgICAoYXkgPiAoYnkgKyBiaGVpZ2h0KSkgfHwKICAgICAgICAgICAgKChheCArIGF3aWR0aCkgPCBieCkgfHwKICAgICAgICAgICAgKGF4ID4gKGJ4ICsgYndpZHRoKSkKICAgICAgICAgICAgKTsKICAgICAgICB9CiAgICAgICAgZnVuY3Rpb24gZHJhdyhwb3MpCiAgICAgICAgewogICAgICAgICAgICB2YXIgeCA9IHBvc1swXSAqIGJsb2NrOwogICAgICAgICAgICB2YXIgeSA9IHBvc1sxXSAqIGJsb2NrOwogICAgICAgICAgICBpZih4ID49IGNhbnZhcy53aWR0aCB8fCB4IDw9IDAgfHwgeSA+PSBjYW52YXMuaGVpZ2h0IHx8IHk8PSAwKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3BhdXNlJykuZGlzYWJsZWQ9J3RydWUnOwogICAgICAgICAgICAgICAgICAgIHNuYWtlLmdhbWUuc3RhdHVzPWZhbHNlOwogICAgICAgICAgICAgICAgICAgIGN0eC5jbGVhclJlY3QoMCwwLGNhbnZhcy53aWR0aCxjYW52YXMuaGVpZ2h0KTsKICAgICAgICAgICAgICAgICAgICBjdHguZm9udD0nNDBweCBzYW4tc2VyaWYnOwogICAgICAgICAgICAgICAgICAgIGN0eC5maWxsVGV4dCgnR2FtZSBPdmVyJywzMDAsMjUwKTsKICAgICAgICAgICAgICAgICAgICBjdHguZm9udCA9ICcyMHB4IHNhbi1zZXJpZic7CiAgICAgICAgICAgICAgICAgICAgY3R4LmZpbGxTdHlsZT0nIzAwMDAwMCc7CiAgICAgICAgICAgICAgICAgICAgY3R4LmZpbGxUZXh0KCdUbyBQbGF5IGFnYWluIFJlZnJlc2ggdGhlIHBhZ2Ugb3IgY2xpY2sgdGhlIFJlc3RhcnRzIGJ1dHRvbicsMjAwLDMwMCk7CiAgICAgICAgICAgICAgICAgICAgdGhyb3cgKCdHYW1lIE92ZXInKTsKICAgICAgICAgICAgfQogICAgICAgICAgICBlbHNlCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIGN0eC5iZWdpblBhdGgoKTsKICAgICAgICAgICAgICAgIGN0eC5maWxsU3R5bGU9JyMwMDAwMDAnOwogICAgICAgICAgICAgICAgY3R4LmZpbGxSZWN0KHgseSxibG9jayxibG9jayk7CiAgICAgICAgICAgICAgICBjdHguY2xvc2VQYXRoKCk7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgZnVuY3Rpb24gcGF1c2UoZWxlbSkKICAgICAgICB7CiAgICAgICAgICAgIGlmKHNuYWtlLmdhbWUuc3RhdHVzKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBjbGVhclRpbWVvdXQoc25ha2UuZ2FtZS5zdGF0dXMpOwogICAgICAgICAgICAgICAgc25ha2UuZ2FtZS5zdGF0dXM9ZmFsc2U7CiAgICAgICAgICAgICAgICBlbGVtLnZhbHVlPSdQbGF5JwogICAgICAgICAgICB9CiAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgbG9vcCgpOwogICAgICAgICAgICAgICAgZWxlbS52YWx1ZT0nUGF1c2UnOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGZ1bmN0aW9uIGJlZ2luKCkKICAgICAgICB7CiAgICAgICAgICAgIGxvb3AoKTsKICAgICAgICB9CiAgICAgICAgZnVuY3Rpb24gcmVzdGFydCgpCiAgICAgICAgewogICAgICAgICAgICBsb2NhdGlvbi5yZWxvYWQoKTsKICAgICAgICB9CiAgICAgICAgZnVuY3Rpb24gc3RhcnQoKQogICAgICAgIHsKICAgICAgICAgICAgY3R4LmZpbGxTdHlsZT0nIzAwMDAwMCc7CiAgICAgICAgICAgIGN0eC5maWxsUmVjdCgwLDAsY2FudmFzLndpZHRoLGNhbnZhcy5oZWlnaHQpOwogICAgICAgICAgICBjdHguZmlsbFN0eWxlPScjZmZmZmZmJzsKICAgICAgICAgICAgY3R4LmZvbnQ9JzQwcHggaGVsdmF0aWNhJzsKICAgICAgICAgICAgY3R4LmZpbGxUZXh0KCdaZVhfRVZPJywzNzAsMTQwKTsKICAgICAgICAgICAgY3R4LmZvbnQ9JzIwcHggc2FuLXNlcmlmJzsKICAgICAgICAgICAgY3R4LmZpbGxUZXh0KCdwcmVzZW50cycsMzk1LDE5MCk7CiAgICAgICAgICAgIGN0eC5mb250PSdpdGFsaWMgNjBweCBzYW4tc2VyaWYnOwogICAgICAgICAgICBjdHguZmlsbFRleHQoJ0ZyaWVuZGx5IFNuYWtlJywyNDAsMjgwKTsKICAgICAgICAgICAgdmFyIGltZyA9IG5ldyBJbWFnZSgpOwogICAgICAgICAgICBpbWcub25sb2FkID0gZnVuY3Rpb24oKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBjdHguZHJhd0ltYWdlKGltZywzMDAsMzAwLDIwMCwyMDApOwogICAgICAgICAgICAgICAgY3R4LmZpbGxSZWN0KDQxMCwzMzAsMTAsMTApOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGltZy5zcmMgPSdzbmFrZS5wbmcnOwogICAgICAgIH0KICAgICAgICBmdW5jdGlvbiBmdWxsc2NyZWVuKCkKICAgICAgICB7CiAgICAgICAgICAgIGxhdW5jaEZ1bGxzY3JlZW4oY2FudmFzKTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIHsKICAgICAgICAgICAgcGF1c2U6IHBhdXNlLAogICAgICAgICAgICByZXN0YXJ0IDogcmVzdGFydCwKICAgICAgICAgICAgc3RhcnQgOiBzdGFydCwKICAgICAgICAgICAgYmVnaW46IGJlZ2luLAogICAgICAgICAgICBmdWxsc2NyZWVuIDogZnVsbHNjcmVlbiwKICAgICAgICAgICAgYWRqdXN0IDogYWRqdXN0LAogICAgICAgIH07CiAgICB9KSgpOwogICAgc25ha2UuZ2FtZS5zdGFydCgpOwp9Cjwvc2NyaXB0Pgo8L2hlYWQ+Cjxib2R5Pgo8Y2FudmFzIHdpZHRoPSI4NTAiIGhlaWdodD0iNjAwIiBpZD0iY2FudmFzIiBzdHlsZT0iYm9yZGVyOjFweCBzb2xpZCAjMzMzOyIgb25jbGljaz0ic25ha2UuZ2FtZS5iZWdpbigpOyI+CjwvY2FudmFzPgo8ZGl2IGlkPSJjb250cm9scyIgc3R5bGU9ImZsb2F0OnJpZ2h0OyB0ZXh0LWFsaWduOmNlbnRlcjsiPgogICAgPGlucHV0IHR5cGU9ImJ1dHRvbiIgaWQ9InBhdXNlIiB2YWx1ZT0iUGxheSIgb25DbGljaz0ic25ha2UuZ2FtZS5wYXVzZSh0aGlzKTsiIGFjY2Vzc2tleT0icCI+CiAgICA8aW5wdXQgdHlwZT0iYnV0dG9uIiBpZD0icmVzdGFydCIgdmFsdWU9IlJlc3RhcnQiIG9uQ2xpY2s9InNuYWtlLmdhbWUucmVzdGFydCgpOyI+CiAgICA8YnIvPjxici8+CiAgICA8aW5wdXQgdHlwZT0iYnV0dG9uIiBpZD0iZnVsbHNjcmVlbiIgdmFsdWU9IlBsYXkgRnVsbHNjcmVlbiIgb25DbGljaz0ic25ha2UuZ2FtZS5mdWxsc2NyZWVuKCk7Ij4KICAgIDxici8+PGJyLz4KICAgIDxkaXYgc3R5bGU9ImZvbnQtc2l6ZToyNHB4OyI+CiAgICBTY29yZSA6IAogICAgPHNwYW4gaWQ9InNjb3JlYm9hcmQiPjA8L3NwYW4+CiAgICA8L2Rpdj4KPC9kaXY+CjwvYm9keT4KPC9odG1sPgpZb3UgY2FuIHNlZSBhIGxpdmUgdmVyc2lvbiBvZiB0aGUgZ2FtZSBoZXJlLgoKamF2YXNjcmlwdCBodG1sNSBjYW52YXMgc25ha2UtZ2FtZQ==
Main.java:1: error: class, interface, or enum expected
<!DOCTYPE HTML>
^
Main.java:1: error: class, interface, or enum expected
<!DOCTYPE HTML>
^
Main.java:1: error: class, interface, or enum expected
<!DOCTYPE HTML>
^
Main.java:9: error: illegal character: '#'
background:#000;
^
Main.java:10: error: class, interface, or enum expected
color:#FFF;
^
Main.java:10: error: illegal character: '#'
color:#FFF;
^
Main.java:11: error: class, interface, or enum expected
}
^
Main.java:14: error: illegal character: '#'
background:#FFF;
^
Main.java:15: error: class, interface, or enum expected
}
^
Main.java:16: error: illegal character: '#'
#controls
^
Main.java:19: error: class, interface, or enum expected
top:0;
^
Main.java:20: error: class, interface, or enum expected
right:0;
^
Main.java:21: error: class, interface, or enum expected
margin:10px;
^
Main.java:22: error: class, interface, or enum expected
}
^
Main.java:26: error: class, interface, or enum expected
function launchFullscreen(element) {
^
Main.java:29: error: class, interface, or enum expected
} else if(element.mozRequestFullScreen) {
^
Main.java:31: error: class, interface, or enum expected
} else if(element.webkitRequestFullscreen) {
^
Main.java:33: error: class, interface, or enum expected
} else if(element.msRequestFullscreen) {
^
Main.java:35: error: class, interface, or enum expected
}
^
Main.java:38: error: class, interface, or enum expected
document.addEventListener("fullscreenchange", function(){snake.game.adjust();});
^
Main.java:39: error: class, interface, or enum expected
document.addEventListener("webkitfullscreenchange", function(){snake.game.adjust();});
^
Main.java:39: error: class, interface, or enum expected
document.addEventListener("webkitfullscreenchange", function(){snake.game.adjust();});
^
Main.java:40: error: class, interface, or enum expected
document.addEventListener("mozfullscreenchange", function(){snake.game.adjust();});
^
Main.java:40: error: class, interface, or enum expected
document.addEventListener("mozfullscreenchange", function(){snake.game.adjust();});
^
Main.java:41: error: class, interface, or enum expected
document.addEventListener("MSFullscreenChange", function(){snake.game.adjust();});
^
Main.java:41: error: class, interface, or enum expected
document.addEventListener("MSFullscreenChange", function(){snake.game.adjust();});
^
Main.java:43: error: class, interface, or enum expected
snake.game = (function()
^
Main.java:45: error: unclosed character literal
var canvas = document.getElementById('canvas');
^
Main.java:45: error: unclosed character literal
var canvas = document.getElementById('canvas');
^
Main.java:46: error: class, interface, or enum expected
var ctx = canvas.getContext('2d');
^
Main.java:46: error: unclosed character literal
var ctx = canvas.getContext('2d');
^
Main.java:46: error: unclosed character literal
var ctx = canvas.getContext('2d');
^
Main.java:47: error: class, interface, or enum expected
var status=false;
^
Main.java:48: error: class, interface, or enum expected
var score = 0;
^
Main.java:49: error: class, interface, or enum expected
var old_direction = 'right';
^
Main.java:49: error: unclosed character literal
var old_direction = 'right';
^
Main.java:49: error: unclosed character literal
var old_direction = 'right';
^
Main.java:50: error: unclosed character literal
var direction = 'right';
^
Main.java:50: error: unclosed character literal
var direction = 'right';
^
Main.java:52: error: class, interface, or enum expected
var score = 0;
^
Main.java:53: error: class, interface, or enum expected
var refresh_rate = 250;
^
Main.java:54: error: class, interface, or enum expected
var pos = [[5,1],[4,1],[3,1],[2,1],[1,1]];
^
Main.java:55: error: class, interface, or enum expected
var scoreboard = document.getElementById('scoreboard');
^
Main.java:55: error: unclosed character literal
var scoreboard = document.getElementById('scoreboard');
^
Main.java:55: error: unclosed character literal
var scoreboard = document.getElementById('scoreboard');
^
Main.java:56: error: class, interface, or enum expected
var control = document.getElementById('controls');
^
Main.java:56: error: unclosed character literal
var control = document.getElementById('controls');
^
Main.java:56: error: unclosed character literal
var control = document.getElementById('controls');
^
Main.java:57: error: class, interface, or enum expected
var keys = {
^
Main.java:58: error: unclosed character literal
37 : 'left',
^
Main.java:58: error: unclosed character literal
37 : 'left',
^
Main.java:59: error: unclosed character literal
38 : 'up',
^
Main.java:59: error: unclosed character literal
38 : 'up',
^
Main.java:60: error: unclosed character literal
39 : 'right',
^
Main.java:60: error: unclosed character literal
39 : 'right',
^
Main.java:61: error: unclosed character literal
40 : 'down'
^
Main.java:61: error: illegal line end in character literal
40 : 'down'
^
Main.java:63: error: class, interface, or enum expected
function adjust()
^
Main.java:68: error: class, interface, or enum expected
canvas.height=window.innerHeight;
^
Main.java:69: error: class, interface, or enum expected
control.style.display='none';
^
Main.java:69: error: unclosed character literal
control.style.display='none';
^
Main.java:69: error: unclosed character literal
control.style.display='none';
^
Main.java:74: error: class, interface, or enum expected
canvas.height=600;
^
Main.java:75: error: class, interface, or enum expected
control.style.display='inline';
^
Main.java:75: error: unclosed character literal
control.style.display='inline';
^
Main.java:75: error: unclosed character literal
control.style.display='inline';
^
Main.java:79: error: class, interface, or enum expected
function todraw()
^
Main.java:81: error: class, interface, or enum expected
for(var i = 0; i < pos.length; i++)
^
Main.java:81: error: class, interface, or enum expected
for(var i = 0; i < pos.length; i++)
^
Main.java:84: error: class, interface, or enum expected
}
^
Main.java:89: error: class, interface, or enum expected
switch(old_direction)
^
Main.java:91: error: unclosed character literal
case 'right':
^
Main.java:91: error: unclosed character literal
case 'right':
^
Main.java:93: error: class, interface, or enum expected
break;
^
Main.java:94: error: class, interface, or enum expected
case 'left':
^
Main.java:94: error: unclosed character literal
case 'left':
^
Main.java:94: error: unclosed character literal
case 'left':
^
Main.java:96: error: class, interface, or enum expected
break;
^
Main.java:97: error: class, interface, or enum expected
case 'up':
^
Main.java:97: error: unclosed character literal
case 'up':
^
Main.java:97: error: unclosed character literal
case 'up':
^
Main.java:99: error: class, interface, or enum expected
break;
^
Main.java:100: error: class, interface, or enum expected
case 'down':
^
Main.java:100: error: unclosed character literal
case 'down':
^
Main.java:100: error: unclosed character literal
case 'down':
^
Main.java:102: error: class, interface, or enum expected
break;
^
Main.java:103: error: class, interface, or enum expected
}
^
Main.java:105: error: class, interface, or enum expected
pos.pop();
^
Main.java:106: error: class, interface, or enum expected
}
^
Main.java:110: error: class, interface, or enum expected
switch(old_direction)
^
Main.java:112: error: unclosed character literal
case 'right':
^
Main.java:112: error: unclosed character literal
case 'right':
^
Main.java:114: error: class, interface, or enum expected
break;
^
Main.java:115: error: class, interface, or enum expected
case 'left':
^
Main.java:115: error: unclosed character literal
case 'left':
^
Main.java:115: error: unclosed character literal
case 'left':
^
Main.java:117: error: class, interface, or enum expected
break;
^
Main.java:118: error: class, interface, or enum expected
case 'up':
^
Main.java:118: error: unclosed character literal
case 'up':
^
Main.java:118: error: unclosed character literal
case 'up':
^
100 errors