diff --git a/jsssnake/simplesnake.html b/jsssnake/simplesnake.html
index 031d01a..042c2eb 100644
--- a/jsssnake/simplesnake.html
+++ b/jsssnake/simplesnake.html
@@ -16,7 +16,7 @@
var Snake = {
config: {
apple_color: 'red',
-
+ wall_color: 'gray',
interval: 200,
},
@@ -83,24 +83,28 @@ var Snake = {
that.players[color] = ''
}
- // apples...
- // XXX TEST
var age = cell.age
- if(next.style.backgroundColor == that.config.apple_color){
- age += 1
-
+ var move = false
// special case: other snake's head -- kill both...
- // XXX TEST
- } else if(next.direction){
+ if(next.direction){
next.style.backgroundColor = ''
// NOTE: we are not deleteing .direction here as
// we can have upto 4 snakes colliding...
next.direction = ''
delete next.age
+ // apples...
+ } else if(next.style.backgroundColor == that.config.apple_color){
+ age += 1
+ move = true
+
// empty...
// NOTE: anything but an apple will kill the snake...
} else if(next.style.backgroundColor == ''){
+ move = true
+ }
+
+ if(move){
next.tick = tick
next.style.backgroundColor = color
next.age = age + 1
@@ -120,17 +124,15 @@ var Snake = {
field = this._field = typeof(field) == typeof('str') ? document.querySelector(field)
: field
this._cells = [].slice.call(field.querySelectorAll('td'))
-
this.field_size = {
width: field.querySelector('tr').querySelectorAll('td').length,
height: field.querySelectorAll('tr').length,
}
-
this.players = {}
-
return this
},
+ // constructors...
snake: function(color, x, y, direction, age){
var head = this._cells[x + y * this.field_size.width]
@@ -142,6 +144,32 @@ var Snake = {
return this
},
+ apple: function(x, y){
+ this._cells[x + y * this.field_size.width]
+ .style.backgroundColor = this.config.apple_color
+ return this
+ },
+ wall: function(x, y, direction, length){
+ length = length || 1
+ while(length > 0){
+ this._cells[x + y * this.field_size.width]
+ .style.backgroundColor = this.config.wall_color
+
+ x += direction == 'e' ? 1
+ : direction == 'w' ? -1
+ : 0
+ x = x < 0 ? this.field_size.width + x
+ : x % this.field_size.width
+ y += direction == 'n' ? -1
+ : direction == 's' ? 1
+ : 0
+ y = y < 0 ? this.field_size.height + y
+ : y % this.field_size.height
+
+ length -= 1
+ }
+ return this
+ },
// actions...
start: function(){
@@ -155,7 +183,6 @@ var Snake = {
delete this.__tick
return this
},
-
left: function(color){
this.players[color || Object.keys(this.players)[0]] = 'left'
return this
@@ -167,6 +194,25 @@ var Snake = {
}
+function test(){
+ return Snake
+ .setup('.snake')
+
+ // XXX BUG: this will break as soon as it reaches the corner...
+ .snake('blue', 0, 0, 's', 5)
+
+ // hit an apple...
+ .snake('green', 5, 3, 's', 5)
+ .apple(5, 5)
+
+ // hit a wall...
+ .snake('silver', 14, 3, 'w', 5)
+ .wall(2, 14, 's', 7)
+
+ .start()
+}
+
+