Skip to content

Instantly share code, notes, and snippets.

@delta1
Created December 9, 2011 10:31
Show Gist options
  • Save delta1/1451033 to your computer and use it in GitHub Desktop.
Save delta1/1451033 to your computer and use it in GitHub Desktop.
snake
function P(x, y) {
return {
x: x,
y: y
}
}
function R() {
return {
x: Math.floor(Math.random() * 16),
y: Math.floor(Math.random() * 16)
}
}
function A(a, b) {
return {
x: a.x + b.x,
y: a.y + b.y
}
}
function Q(a, b) {
return a.x == b.x && a.y == b.y
}
function O(p) {
return p.x < 0 || p.x > 15 || p.y < 0 || p.y > 15
}
function T(p) {
return s.filter(Q.bind(this, p)).length
}
function M(p) {
if (p.x != -d.x && p.y != -d.y) m = p
}
function B(l) {
s.map(function (p) {
c.fillRect(p.x << 3, p.y << 3, 8, 8)
})
}
function C(p) {
c.beginPath();
c.arc((p.x << 3) + 4, (p.y << 3) + 4, 4, 0, 7);
c.fill()
}
function F() {
clearInterval(t);
setTimeout(I, 5000);
alert('FAIL')
}
window.addEventListener('keydown', function (e) {
M({
37: P(-1, 0),
38: P(0, -1),
39: P(1, 0),
40: P(0, 1)
}[e.keyCode])
}, false);
function I() {
document.body.innerHTML = '<canvas width=128 height=128 style="width:256px;height:256px;border:8px solid black"></canvas>';
c = document.body.firstChild.getContext('2d');
s = [P(8, 8), P(7, 8), P(6, 8)];
a = R();
m = P(1, 0);
t = setInterval(function () {
d = m;
n = A(s[0], d);
(O(n) || T(n)) && F();
s.unshift(n);
Q(s[0], a) && (a = R()) || s.pop();
c.clearRect(0, 0, 128, 128);
B(s);
C(a)
}, 500);
}
setTimeout(I, 0)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment