/
bangle.min.js
1 lines (1 loc) · 4.35 KB
/
bangle.min.js
1
var e={};var n;var i=false;function z(r){if(i){return}var a=(new Date).getTime();if(n){var t=a-n;if(e[r]){e[r].t=(e[r].t*e[r].i+t)/(e[r].i+1);e[r].i+=1}else{e[r]={t:t,i:1}}}n=a;if(e[r]&&e[r].i===10){console.log("times: ",e);Object.keys(e).forEach(function(r){console.log(r+";"+e[r].t)});i=true}}function c(r){return(r+360)%360}function l(r){return Math.cos(r/180*Math.PI)}function o(r){return Math.sin(r/180*Math.PI)}function F(r){return Math.tan(r/180*Math.PI)}function A(r,a,t,e){return(t-r)*(t-r)+(e-a)*(e-a)}function D(r,a){return!(a.x>=0&&a.x<r[0].length&&a.y>=0&&a.y<r.length)}function u(a,r){var t=[{x:r.x-2,y:r.y},{x:r.x,y:r.y-2},{x:r.x+2,y:r.y},{x:r.x,y:r.y+2}];return t.filter(function(r){return!D(a,r)&&a[r.y][r.x]===-1})}function s(r,a){return Math.floor(Math.random()*(a-r+1)+r)}function r(r,a){var t=new Array(a);for(var e=0;e<a;e++){t[e]=new Array(r);for(var n=0;n<r;n++){if(e%2===0||n%2===0){t[e][n]=1}else{t[e][n]=-1}}}var i=[];var o={x:1,y:1};t[o.y][o.x]=0;i.push(o);var f;while(i.length){o=i.pop();f=u(t,o);if(f.length){i.push(o);var v=f[s(0,f.length-1)];t[(v.y+o.y)/2][(v.x+o.x)/2]=0;t[v.y][v.x]=0;i.push(v)}}t[1][1]=2;t[a-2][r-2]=3;return t}var a=3;var t=3;var f=240;var v=160;var h=1.5;var M=1.5;var d=70;var w=7;var y=.1;var m=a*2+1;var T=t*2+1;var B=8;var G=r(m,T);var x=G[1][2]===1?90:0;var H={o:a,v:t,u:f,l:v,s:d,h:w,M:y,g:m,m:T,T:h,B:M,N:G,p:x,F:function(r){},A:function(){}};var N=true;function p(r){N=true;k(r)}function b(){N=false}function P(r,a,t){var e=Math.floor(r/90);var n;var i;var o=0;var f;var v;var u;var c;var l;var s;var h;var M;var g;var d;var w;var y;var m;var T;var B;var x;z("01 collision start hor");while(!n||!i){g=e===2||e===3;if(!n){if(!f){if(g){v=Math.floor(H.B)}else{v=Math.floor(H.B)+1}f=H.T-(H.B-v)/F(r)}z("02 after hor intersect");if(o!==0&&!l){if(g){s=-1}else{s=1}l=1/F(r)}z("03 after hor offset");w=f+(l||0)*o*(g?-1:1);y=v+(s||0)*o;m={x:Math.floor(w),y:Math.floor(y)+(g?-1:0)};z("04 after hor grid location");if(D(G,m)||G[m.y][m.x]===1){if(a){t.D(w,y)}n={x:w,y:y}}else{if(a){t.D(w,y,"#FF0000")}}z("05 after hor found location")}z("06 collision start vert");d=e===0||e===3;if(!i){if(!u){if(d){u=Math.floor(H.T)+1}else{u=Math.floor(H.T)}c=H.B-(H.T-u)*F(r)}z("07 after vert intersect");if(o!==0&&!h){h=d?1:-1;M=Math.abs(F(r))*(g?-1:1)}z("08 after vert offset");T=u+(h||0)*o;B=c+(M||0)*o;x={x:Math.floor(T)+(d?0:-1),y:Math.floor(B)};z("09 after vert grid location");if(D(G,x)||G[x.y][x.x]===1){if(a){t.D(T,B)}i={x:T,y:B}}else{if(a){t.D(T,B,"#FF0000")}}z("10 after vert found location")}o++}z("11 after intersection found location");var N=A(H.T,H.B,n.x,n.y);var p=A(H.T,H.B,i.x,i.y);var b=N<p?n:i;if(a){t.D(b.x,b.y,"#00FF00")}t.G(H.T,H.B,b.x,b.y);if(!b){throw new Error("intersection is null")}z("12 return intersection");return b}function S(r){r.H(G);var a=c(H.p-H.s/2);var t=H.s/H.u;var e=[];for(var n=0;n<H.u;n+=B){var i=c(a+t*n);var o=P(i,n===0||n>=H.u-1,r);var f=Math.sqrt(A(H.T,H.B,o.x,o.y));var v=f*l(c(i-H.p));var u=H.l/v;r.P(n,Math.round((H.l-u)/2));r.P(n,Math.round((H.l-u)/2+u))}}function W(r,a){return G[Math.floor(a)][Math.floor(r)]===1}function C(r,a){var t=H.T+r;var e=H.B+a;if(!W(t,e)){H.T=t;H.B=e;return}t=H.T;e=H.B+a;if(!W(t,e)){H.T=t;H.B=e;return}t=H.T+r;e=H.B;if(!W(t,e)){H.T=t;H.B=e;return}}var L;var V;var j;function k(r){if(r.S.read()){console.log("left");H.p=c(H.p-H.h)}if(r.W.read()){console.log("right");H.p=c(H.p+H.h)}var a;var t;var e;var n;var i;if(r.C.read()){console.log("forward");a=Math.floor(H.p/90);t=a===2||a===3;e=a===3||a===0;n=Math.abs(l(H.p)*H.M)*(e?1:-1);i=Math.abs(o(H.p)*H.M)*(t?-1:1);C(n,i)}if(r.L.read()){console.log("backward");a=Math.floor(H.p/90);t=a===2||a===3;e=a===3||a===0;n=Math.abs(l(H.p)*H.M)*(e?-1:1);i=Math.abs(o(H.p)*H.M)*(t?1:-1);C(n,i)}if(!N){return}if(L!==H.T||V!==H.B||j!==H.p){r.clear();S(r);r.flip()}L=H.T;V=H.B;j=H.p;setTimeout(function(){return k(r)},50)}H.F=p;H.A=b;var E=H;Bangle.setLCDMode("doublebuffered");function O(r,a,t){g.setPixel(r,a)}function X(r,a,t){g.drawLine(r,a,r,t)}function clear(){g.clear()}function flip(){g.flip()}var Y={C:BTN1,L:BTN2,V:BTN3,S:BTN4,W:BTN5,P:O,j:X,clear:clear,flip:flip,H:function(){},G:function(){},D:function(){}};g.setFontAlign(0,-1);g.clear();g.drawString("Press button 2 to start game ==>",120,(g.getHeight()-6)/2);g.flip();console.log("version: "+process.version);function q(){if(BTN2.read()){console.log("starting game");E.F(Y)}else{setTimeout(q,16)}}console.log("starting maze runner");q();