X-Git-Url: https://disinclined.org/git/?a=blobdiff_plain;f=mud%2Fmud.js;fp=mud%2Fmud.js;h=2d3aad1150405140fa2bc3c58edb45e281828754;hb=8b5b99bd8db49077c68a3db3432d36a55f6be30a;hp=0000000000000000000000000000000000000000;hpb=950e73c8a7e3c2f2c4ff18b825d3cd0281afc693;p=dylansserver.git diff --git a/mud/mud.js b/mud/mud.js new file mode 100644 index 0000000..2d3aad1 --- /dev/null +++ b/mud/mud.js @@ -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(); + +});