diff --git a/jsssnake/simplesnake.html b/jsssnake/simplesnake.html index 86367cd..a4a9eac 100644 --- a/jsssnake/simplesnake.html +++ b/jsssnake/simplesnake.html @@ -27,6 +27,22 @@ var Snake = { players: null, field_size: null, + // utils... + random_point: function(){ + var cells = this._cells + var l = cells.length + var w = this.field_size.width + + do { + var i = Math.floor(Math.random() * l) + } while(cells[i].style.backgroundColor != '') + + return { + x: i%w, + y: Math.floor(i/w), + } + }, + // XXX BUG: going down into bottom left corner breaks the snake... // ...check other corner cases! // ...looks like the only corner case... @@ -136,9 +152,9 @@ var Snake = { // constructors... // XXX normalize input x/y... - snake: function(color, x, y, direction, age){ - var head = this._cells[x + y * this.field_size.width] - + snake: function(color, point, direction, age){ + point = point || this.random_point() + var head = this._cells[point.x + point.y * this.field_size.width] head.style.backgroundColor = color head.direction = direction head.age = (age || 5) - 1 @@ -147,12 +163,16 @@ var Snake = { return this }, - apple: function(x, y){ - this._cells[x + y * this.field_size.width] + apple: function(point){ + point = point || this.random_point() + this._cells[point.x + point.y * this.field_size.width] .style.backgroundColor = this.config.apple_color return this }, - wall: function(x, y, direction, length){ + wall: function(point, direction, length){ + point = point || this.random_point() + var x = point.x + var y = point.y length = length || 1 while(length > 0){ this._cells[x + y * this.field_size.width] @@ -175,9 +195,9 @@ var Snake = { }, // actions... - start: function(){ + start: function(t){ this.__timer = this.__timer - || setInterval(this._tick.bind(this), this.config.interval || 200) + || setInterval(this._tick.bind(this), t || this.config.interval || 200) return this }, stop: function(){ @@ -202,15 +222,15 @@ function test(game){ .setup(game || '.snake') // XXX BUG: this will break as soon as it reaches the corner... - .snake('blue', 0, 0, 's', 5) + .snake('blue', {x:0, y:0}, 's', 5) // hit an apple... - .snake('green', 5, 3, 's', 5) - .apple(5, 5) + .snake('green', {x:5, y:3}, 's', 5) + .apple({x:5, y:5}) // hit a wall... - .snake('silver', 14, 3, 'w', 5) - .wall(2, 14, 's', 7) + .snake('silver', {x:14, y:3}, 'w', 5) + .wall({x:2, y:14}, 's', 7) .start() } @@ -228,15 +248,32 @@ function kbHandler(event){ } +var Levels = { + basicLevel: function(){ + return this + .wall({x:3, y:10}, 's', 11) + .wall({x:3, y:5}, 'e', 5) + .wall({x:3+5, y:5}, 's', 5) + .wall({x:3+5, y:5+4}, 'e', 12) }, + randomLevel: function(){ + return this + .wall(null, 's', 11) + .wall(null, 's', 11) + .wall(null, 'e', 11) + .wall(null, 'e', 11) }, +} +Snake.__proto__ = Levels + function setup(){ Snake .setup('.snake') - // setup base level... - .wall(2, 10, 's', 11) - .wall(2, 5, 'e', 5) - .wall(2+5, 5, 's', 5) - .wall(2+5, 5+4, 'e', 12) + + //.randomLevel() + .basicLevel() + + .apple() + .apple() .start()