This is a version of Snake using Canvas and Javascript. Enjoy!
A Pen by Liliana Kastilio on CodePen.
<body> | |
<div id="container"> | |
<h1>[SNAKE]</h1> | |
<div id="score"><span>0000</span></div> | |
</div> | |
</body> |
var canvas, ctx, mouse_pos, mouse_pos_msg="Mouse:0,0", snake = [], isPaused=false, score=0, tick=0, food, headfwd, currentheadfwd, WIDTH=20; | |
var colors = [ '#9184e5', '#317874', '#6e783f', '#F38630', '#FA6900', '#FF4E50', '#453a1b' ]; | |
console.info('******************************Begin******************************'); | |
canvas = document.createElement('canvas'); | |
window.requestAnimFrame = | |
window.requestAnimationFrame || | |
window.webkitRequestAnimationFrame || | |
window.mozRequestAnimationFrame || | |
window.oRequestAnimationFrame || | |
window.msRequestAnimationFrame || | |
function (callback) { | |
window.setTimeout(callback, 1000); | |
}; | |
function init() { | |
//console.info('init()'); | |
if(canvas.getContext && canvas.getContext('2d')) { | |
var container = document.getElementById('container'); | |
container.appendChild(canvas); | |
ctx = canvas.getContext('2d'); | |
canvas.style.position = 'relative'; | |
canvas.id="snakecanvas"; | |
canvas.height = 400; | |
canvas.width = 600; | |
canvas.style.top = 0; | |
canvas.style.bottom = 0; | |
canvas.style.left = 0; | |
canvas.style.right = 0; | |
canvas.style.zIndex = -1; | |
window.addEventListener('keydown', key_down, true); | |
//console.info("ball: x="+ball.x+" y:"+ball.y); | |
game_start(); | |
//console.log("x: " + food.x + " y: " + food.y); | |
update(); | |
} | |
else { | |
// text | |
var text = document.createElement("div"); | |
text.innerHTML = "This game can't play on browser:"; | |
text.setAttribute('class', 'text'); | |
document.getElementById("container").appendChild(text); | |
// Browser | |
var browser = document.createElement("div"); | |
browser.innerHTML = get_browser(); | |
browser.setAttribute('class', 'browser-version'); | |
document.getElementById("container").appendChild(browser); | |
// text | |
var text1 = document.createElement("div"); | |
text1.innerHTML = "version"; | |
text1.setAttribute('class', 'text'); | |
document.getElementById("container").appendChild(text1); | |
// Version | |
var version = document.createElement("div"); | |
version.innerHTML = get_browser_version(); | |
version.setAttribute('class', 'browser-version'); | |
document.getElementById("container").appendChild(version); | |
// text | |
var text3 = document.createElement("div"); | |
text3.innerHTML = "=( sorry"; | |
text3.setAttribute('class', 'text'); | |
document.getElementById("container").appendChild(text3); | |
} | |
} | |
function draw_snake(){ | |
for(var i =0; i < snake.length; i++){ | |
ctx.beginPath(); | |
ctx.rect(snake[i].x,snake[i].y,WIDTH, WIDTH); | |
ctx.fillStyle = '#3c3c3c'; | |
ctx.fill(); | |
ctx.closePath(); | |
} | |
} | |
function update_score() | |
{ | |
document.getElementById("score").innerHTML = score; | |
//console.log("score:" + score); | |
} | |
function game_start() { | |
currentheadfwd = { | |
x:0, | |
y:0 | |
}; | |
headfwd = { | |
x:0, | |
y:0 | |
}; | |
snake = []; | |
score=0; | |
update_score(); | |
snake.push({ | |
x: WIDTH*Math.floor(Math.random()*canvas.width/WIDTH), | |
y: WIDTH*Math.floor(Math.random()*canvas.height/WIDTH) | |
}); | |
//print_snake(); | |
isPaused=true; | |
//draw grid | |
init_food(); | |
} | |
function key_down(e) { | |
// SPACE BAR | |
if(e.keyCode == 13) { | |
isPaused = !isPaused; | |
} | |
// LEFT KEY | |
if(e.keyCode == 37 && !isPaused && currentheadfwd.x==0) { | |
headfwd.x = -WIDTH; | |
headfwd.y = 0; | |
//console.info('LEFT'); | |
} | |
// RIGHT KEY | |
else if(e.keyCode == 39 && !isPaused && currentheadfwd.x==0) { | |
headfwd.x = WIDTH; | |
headfwd.y = 0; | |
// console.info('RIGHT'); | |
} | |
// UP KEY | |
else if(e.keyCode == 38 && !isPaused && currentheadfwd.y==0) { | |
headfwd.y = -WIDTH; | |
headfwd.x = 0; | |
//console.info('UP'); | |
} | |
//DOWN KEY | |
else if(e.keyCode == 40 && !isPaused && currentheadfwd.y==0){ | |
headfwd.y = WIDTH; | |
headfwd.x = 0; | |
//console.info('DOWN'); | |
} | |
} | |
function print_snake(){ | |
console.log("-----------------------------"); | |
for(var i=0; i <snake.length; i++){ | |
console.log("snake["+ i +"]= x:"+snake[i].x +", y:"+snake[i].y); | |
} | |
} | |
function draw_food(){ | |
ctx.beginPath(); | |
ctx.rect(food.x,food.y,WIDTH, WIDTH); | |
ctx.fillStyle = '#9f3142'; | |
ctx.fill(); | |
ctx.closePath(); | |
} | |
function init_food(){ | |
food = { | |
x: WIDTH*Math.floor(Math.random()*canvas.width/WIDTH), | |
y: WIDTH*Math.floor(Math.random()*canvas.height/WIDTH) | |
} | |
for(var i=0; i<snake.length; i++){ | |
if(food.x == snake[i].x && food.y == snake[i].y) | |
init_food(); | |
} | |
} | |
/** Find out the browser version and name by **/ | |
function get_browser(){ | |
var N=navigator.appName, ua=navigator.userAgent, tem; | |
var M=ua.match(/(opera|chrome|safari|firefox|msie)\/?\s*(\.?\d+(\.\d+)*)/i); | |
if(M && (tem= ua.match(/version\/([\.\d]+)/i))!= null) M[2]= tem[1]; | |
M=M? [M[1], M[2]]: [N, navigator.appVersion, '-?']; | |
return M[0]; | |
} | |
function get_browser_version(){ | |
var N=navigator.appName, ua=navigator.userAgent, tem; | |
var M=ua.match(/(opera|chrome|safari|firefox|msie)\/?\s*(\.?\d+(\.\d+)*)/i); | |
if(M && (tem= ua.match(/version\/([\.\d]+)/i))!= null) M[2]= tem[1]; | |
M=M? [M[1], M[2]]: [N, navigator.appVersion, '-?']; | |
return M[1]; | |
} | |
function update(){ | |
reset(); | |
if (!isPaused){ | |
draw_snake(); | |
draw_food(); | |
tick++; | |
//console.log(tick); | |
if(tick == 5){ | |
currentheadfwd.x = headfwd.x; | |
currentheadfwd.y = headfwd.y; | |
//move snake by creating a new head | |
snake.unshift({ | |
x: snake[0].x + headfwd.x, | |
y: snake[0].y + headfwd.y | |
}); | |
//remove tail | |
snake.pop(); | |
//check if right bottom wall? | |
if(snake[0].x + WIDTH> canvas.width || snake[0].x < 0){ | |
//console.log("RIGHT / LEFT WALL"); | |
game_start(); | |
} | |
if(snake[0].y + WIDTH > canvas.height || snake[0].y + WIDTH< 0){ | |
//console.log("BOTTOM / TOP WALL"); | |
game_start(); | |
} | |
//if snake crashes into itself | |
for(var i=1; i<snake.length; i++){ | |
if(snake.length > 2 && snake[0].x == snake[i].x && snake[0].y == snake[i].y) | |
game_start(); | |
} | |
//check if next cell is food | |
if(snake[0].x == food.x && snake[0].y == food.y){ | |
//console.log("OMNOMNOM begin growing"); | |
//print_snake(); | |
snake.unshift({ | |
x: snake[0].x + headfwd.x, | |
y: snake[0].y + headfwd.y | |
}); | |
//print_snake(); | |
score+= 10; | |
update_score(); | |
init_food(); | |
} | |
} | |
if(tick==5) | |
tick=0; | |
} | |
else { | |
ctx.beginPath(); | |
ctx.font = 'bold 20pt segoe ui light'; | |
ctx.fillStyle = '#3c3c3c'; | |
ctx.fillText("PRESS ENTER TO PLAY", canvas.width/2-140, canvas.height/2); | |
ctx.closePath(); | |
} | |
window.setTimeout(requestAnimFrame(update),1000); | |
} | |
function reset() { | |
canvas.width = canvas.width; | |
} | |
window.onload = function () { | |
canvas.width = canvas.width; | |
canvas.height = canvas.height; | |
init(); | |
}; |
This is a version of Snake using Canvas and Javascript. Enjoy!
A Pen by Liliana Kastilio on CodePen.
.text { | |
margin: 0 auto; | |
padding: 1em; | |
width:auto; | |
height:auto; | |
text-align: center; | |
color: #3c3c3c; | |
font-size: 2em; | |
} | |
#snakecanvas { | |
margin:1em auto; | |
padding:0; | |
border: 5px solid #3c3c3c; | |
} | |
#container { | |
max-width:38em; | |
margin:0 auto; | |
padding: 1em; | |
display:block; | |
} | |
h1 { | |
margin:0 auto; | |
text-align:center; | |
} | |
#score { | |
margin:0 auto; | |
border-bottom: 5px solid #3c3c3c; | |
font-size:3em; | |
} | |
.browser-version { | |
text-decoration: underline; | |
margin:0 auto; | |
text-align: center; | |
color: #d2a9d6; | |
font-size: 3em; | |
text-decoration: underline; | |
} | |
body { | |
width: 100%; | |
height: 100%; | |
margin: 0 auto; | |
padding:0; | |
font-size:16px, 62.5%; | |
font-family:'Segoe ui light','open sans','Lucida Console'; | |
font-weight:thin; | |
color:#3c3c3c; | |
background-color: #bef8cc; | |
} | |