Dungeon Rats
Artificial Neural Net Rat Simulator
by Andy Novocin
HTML
<script src="http://cdnjs.cloudflare.com/ajax/libs/underscore.js/1.5.2/underscore-min.js"></script>
<script src="http://cdnjs.cloudflare.com/ajax/libs/backbone.js/1.1.0/backbone-min.js"></script>
<link rel="stylesheet" href="http://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/3.0.3/css/bootstrap.css">
<script src="http://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/3.0.3/js/bootstrap.js"></script>
<script src="http://code.createjs.com/easeljs-0.7.0.min.js"></script>
<input type="textarea" id="boardseed" placeholder="board seed here format n:n:values" value="25:25:..$.$.X.............X....$X.X*..X$..X...*X$..$...X$.$......X.$.X...XX.$.X*.*.*..X..X.**.......X..$$$...........XX.....................$...X...*.$..X..$X..........$.*..X.....$.X..$*.$X......$...X.*X$......$.**.X.X..XX$X..*....*..X.X....$...X...X........$.X....$...*...X$*........X..$*$$......$$...$*..X.$.$......$.$.$...$..X.*.....X..$......$.XX*..X.$.X......X$*.**.....X*...$..XX..X.....$....X....X...X....X.$X$..X..........$...*.X$..X...$*...........*....XXX$$.$.$..*$XX..XX..*.....$......X.XX$..$$..X$.XX.$$..X.*..*......X......$..$.$$..*...X.........$X....$X.$$.*.$.$.$..**.....X.$.$X.*.$.........$**..X.X.X$X.$.*X.X*..$*."/>
<input type="textarea" id="genome" placeholder="Rat genome goes here" value="Sfz2smu:zej,9j:R\[thR73RzRdP0U.v2TF9-X/PTlOPdYF+k1N;o3`[uTfT>RTq:rsTBk:gYlNq-[@OmMrvVo^U\z=JV>l.tAq*\BLM3vJQLfnnpr_mN-7RN;^.-9j4ddZKXN,gvH;x:qYAgPz+tb29Li[qJ/jH+UepmPpV0qC^u2tpvl_/Z-`OTmijR@XW5iJRk0/\ztnzDHBu+HmsY*,AlZy`aJZ?WFQf*?>3`z6\TiU+O,MvIH\7zL?:=/.w^V/XH-`[X+8L7.+zxDBEm;jwW29jp/oj<Y"/>
<input type="number" id="start_x" placeholder="start x position" value="12"/>
<input type="number" id="start_y" placeholder="start y position" value="12"/>
<button class="btn btn-std" id="start_game">Click to Start</button>
<h3>
Ate <span id="food">0</span> time(s) ::
Energy <span id="energy">30</span> ::
Hit <span id="obst">0</span> obstacles ::
<span id="moves">0</span> move(s) :: Status <span...
CSS
.tile {
display: inline;
}
#gameCanvas {
background-color: lightgray;
}
JavaScript
var CanvasView = Backbone.View.extend({
initialize : function(options){
options = options || {};
this.container = options.container || new createjs.Container();
this.canvasEvents(this.cEvents);
this.init(options);
},
init : function(options){
},
canvasEvents : function(cEvents){
if (!cEvents) return this;
for (var key in cEvents){
var method = cEvents[key];
if (!_.isFunction(method)) method = this[cEvents[key]];
if (!method) continue;
method = _.bind(method, this);
var eventName = key;
this.container.on(eventName, method, this);
}
return this;
}
});
var GenRand = Backbone.Model.extend({
genRand: function(nnums, values, weights, replaceToggle){
if(replaceToggle) // if true then with replacement
return this.genRandWithReplacement(nnums, values, weights);
else
return this.genRandWithoutReplacement(nnums, values, weights);
},
genRandWithReplacement: function(nnums, values, weights){
var retnums = new Array()
var pdf = new Array();
var cdf = new Array();
var i, j;
var s = 0;
var rand;
for(i = 0; i < weights.length; i++){
s += weights[i];
}
for(i = 0; i < weights.length; i++){
pdf[i] = weights[i]/s;
}
cdf[0] = pdf[0];
for(i = 1; i < weights.length; i++){
cdf[i] = cdf[i-1] + pdf[i];
}
for(i = 0; i < nnums; i++){
rand = Math.random();
for(j = 0; j < cdf.length; j++)
{
if(cdf[j] > rand){
retnums[i] = values[j];
break;
}
}
}
return retnums.slice(0,nnums);
},
genRandWithoutReplacement: function(nnums, values, weights){
var retnums = new Array();
var dist = new Array();
...