init
[dylansserver.git] / mud / mud.js
diff --git a/mud/mud.js b/mud/mud.js
new file mode 100644 (file)
index 0000000..2d3aad1
--- /dev/null
@@ -0,0 +1,136 @@
+$(document).ready(function(){
+    
+    var canvas = $('#world')[0];
+    var c = canvas.getContext('2d');
+
+    function player(x, y) {
+        this.x = x;
+        this.y = y;
+
+        this.move = function(direction) {
+            var rooms = mud.rooms;
+            switch (direction) {
+                case 'left':
+                    if (rooms[this.x-1] && rooms[this.x-1][this.y]
+                            && !rooms[this.x-1][this.y].state) {
+                        rooms[this.x][this.y].clear();
+                        rooms[this.x-1][this.y].join();
+                        this.x++;
+                    }
+                    break;
+                case 'up':
+                    if (rooms[this.x][this.y-1]
+                            && !rooms[this.x][this.y-1].state) {
+                        rooms[this.x][this.y].clear();
+                        rooms[this.x][this.y-1].join();
+                        this.y++;
+                    }
+                    break;
+                case 'right':
+                    if (rooms[this.x+1] && rooms[this.x+1][this.y+1]
+                        && !rooms[this.x+1][this.y].state) {
+                        rooms[this.x][this.y].clear();
+                        rooms[this.x+1][this.y].join();
+                        this.x++;
+                    }
+                    break;
+                case 'down':
+                    if (rooms[this.x][this.y+1]
+                        && !rooms[this.x][this.y+1].state) {
+                        rooms[this.x][this.y].clear();
+                        rooms[this.x][this.y+1].join();
+                        this.y++;
+                    }
+                    break;
+            }
+        }
+    }
+
+    function room(x, y, h, l) {
+        this.x = x;
+        this.y = y;
+        this.h = h;
+        this.l = l;
+        this.state = 0;
+        this.fill = function() {
+            c.fillStyle = "rgb(0,0,0)";
+            c.fillRect(this.x, this.y, this.h, this.l);
+            this.state = 1;
+        }
+        this.clear = function() {
+            console.log('clearing');
+            c.fillStyle = "rgb(255,255,255)";
+            c.fillRect(this.x, this.y, this.h, this.l);
+            this.state = 0;
+        }
+        this.join = function() {
+            c.fillStyle = "rgb(0,255,0)";
+            c.fillRect(this.x, this.y, this.h, this.l);
+        }
+    }
+
+    function universe() {
+        this.rooms = [];
+
+        this.rows = 30;
+        this.columns = 30;
+
+        this.roomWidth = canvas.width / this.rows;
+        this.roomHeight = canvas.height / this.columns;
+
+        for (var i = 0; i < this.columns; i++) {
+            var column = [];
+            var x = i * this.roomWidth;
+            var y = 0;
+            for (var ii = 0; ii < this.columns; ii++) {
+                column.push(new room(x, y, this.roomWidth, this.roomHeight));
+                y += this.roomWidth;
+                Math.random() > .5 ? column[ii].clear() : column[ii].fill();
+            }
+            this.rooms.push(column);
+        }
+
+        this.populate = function(seed) {
+            for (var i = 0; i < this.rows; i++) {
+                for (var ii = 0; ii < this.columns; ii++) {
+                    seed[i][ii] ? this.rooms[i][ii].clear()
+                                : this.rooms[i][ii].fill();
+                }
+            }
+        }
+
+        this.join = function() {
+            do {
+                var x = Math.floor(Math.random()*(this.columns));
+                var y = Math.floor(Math.random()*(this.rows));
+            } while (!this.rooms[x][y].state);
+            this.rooms[x][y].join();
+            return player = new player(x,y);
+        }
+
+        $(document).keydown(function(e) {
+            if (typeof player == undefined) return;
+            switch (e.which) {
+                case 37:
+                    player.move('left');
+                    break;
+                case 38:
+                    player.move('up');
+                    break;
+                case 39:
+                    player.move('right');
+                    break;
+                case 40:
+                    player.move('down');
+                    break;
+                default:
+                    return;
+            }
+            e.preventDefault();
+        });
+    }
+
+    var mud = new universe;
+    var player = mud.join();
+
+});