_='hjBjEjs=L=T=S=4,H=a.height?=H/2,W=a.w@font="60px Impact",setInterval(){if(!L){s++,N,(S=mO(+,50)F=6,60(t=*`FT=W/(S-3B[t:[t+F,H])4--T<0B[*`N21$*+i]Xs/|Zb-s/|q.5, H,Xg-^q1arc(W-s%N*tan(s/50F,Wi,h[i]Vs/a.w@+1|0h.shift(HHX^2ZN,s>W(XZ^lOeW@=##()XZ^0]-=S, 0:1:2:3]V3 +70*i?,6$V $Q4, 15Q3,2F=s%zG=4+F/$o=.8-F/z $0-F?-15-F/S*4,G,G;Z^2r*|q+.2S+1JJ-S--_40]J++_38],Rs,S,60<0]+2+$0>0Y<1]+3g+Y>1R"DEAD.",L?V_38Uax(Y-S)_40UO`g?))}},$Kdown3},Kup0};,()random(),begOPa~(B[i][lOeTo(hsO((i+s)/N)*(+N)+.8*HVStyle="rgba("+rgbo+")";i--;) rect(0,=i){_i.keyCode]=Ma~.),for(*F|fills%=010i=].push(=255B.leng~c.+S+","+function(*SW,#,stroke$20:],?,Y@id~JY+Kb.onkeyN99OinQ0?-1RText(U(Y=mV);Xr=Zg=^b=_E[`(H-j=[:qo=z(*i~th&&';for(Y in $='~zqj`_^ZXVURQONKJ@?:$# ')with(_.split($[Y]))_=join(pop());eval(_)
h = []; // Hills
B = []; // Blocks
E = []; // Up, Down
s = // Steps
L = // Game over
T = 0; // Tunel is on
S = 4; // Speed
H = a.height;
Y = H / 2; // Train Y Coor
W = i = a.width;
// make hills
for(; i--;){
h.push(Math.sin((i+s)/99) * (Math.random()*S+99) + H*0.8);
}
c.font = 60 + "px Impact";
setInterval(function(e){
// if we are not dead
if(!L){
//
// INCREASE STEPS
//
s++;
i = 99;
if(s % i == 0){
S = Math.min(++S, 50); // increase speed
}
F = S * 6;
//
// ADD TUNEL
//
i = 600;
if(s % i == 0){
t = Math.random() * (H-F); // tunel start
T = W / (S-3);
// x, y, width, height
B.push([W, 0, W, t], [W, t + F, W, H]);
}
//
// ADD BLOCK
//
i = 40;
if(--T < 0){ // If there is no tunel
if(s % i == 0){
B.push([
W,
Math.random() * (H-99),
20,
Math.random() * 120 + i
]);
}
}
//
// Background
//
r = s/10 | 0; // more red
g = Math.random() * F | 0; // more random
b = 255 - s/10 | 0; // less blue
o = 0.5;
c.rect(0, 0, W, H);
c.fillStyle = 'rgba(' + r + ',' + g + ',' + b + ',' + o + ')';
c.fill();
//
// Sun
//
r = g = 255 - Math.random() * F | 0;
b = 0;
o = 1;
c.beginPath()
c.arc(W - s%W, Math.tan(s/50)*99, F, 0, 10);
c.fillStyle = 'rgba(' + r + ',' + g + ',' + b + ',' + o + ')';
c.fill()
//
// Hills
//
c.beginPath();
i = W;
for(; i--; ){
c.lineTo(i, h[i]);
}
// hills move
i = s / a.width + 1 | 0;
for(; i--; ){
h.shift();
h.push(Math.sin((i+s)/99) * (Math.random()*S+99) + H*0.8);
}
c.lineTo(0, H);
c.lineTo(W, H);
r = b = 20;
g = 99;
// hills gets funky
if(s > W){
r = Math.random() * F | 0;
g = Math.random() * F | 0;
b = Math.random() * F | 0;
c.lineWidth = Math.random() * S;
c.strokeStyle = 'rgba(' + r + ',' + g + ',' + b + ',' + o + ')';
}
c.fillStyle = 'rgba(' + r + ',' + g + ',' + b + ',' + o + ')';
c.fill();
c.stroke();
//
// Blocks
//
c.beginPath();
r = g = b = 0;
i = B.length;
for(; i--;){
B[i][0] -= S;
c.rect(B[i][0], B[i][1], B[i][2], B[i][3]);
}
//
// Train
//
i = 3;
for(; i--;){
c.rect(10 + i * 70 + S, Y, 60, 20);
}
c.rect(200 + S, Y-10, 4, 10); // chimney
c.rect(150 + S, Y-10, 30, 10); // cabin
c.fillStyle = 'rgba(' + r + ',' + g + ',' + b + ',' + o + ')';
c.fill();
//
// Steam
//
i = S*2;
for(; i--; ){
F = s % (i * 10);
G = 4 + F / 20;
c.beginPath();
o = 0.8 - F / (i*10);
c.rect(200 + S - F, Y-15 - F/S*4, G, G);
c.fillStyle = 'rgba(' + r + ',' + g + ',' + b + ',' + o + ')';
c.fill();
}
//
// Fire
//
g = b = 20;
r = Math.random() * 255 | 0;
o = Math.random() + 0.2;
c.beginPath();
c.lineTo(S + 10, Y + 10);
c.lineTo(0, Y + 10 - S - Math.random() * S - E[40] * S);
c.lineTo(0, Y + 10 + S + Math.random() * S + E[38] * S);
c.fillStyle = 'rgba(' + r + ',' + g + ',' + b + ',' + o + ')';
c.fill();
//
// Points
//
c.fillText(s, S, 60);
//
// CHECK COLLISION
//
i = B.length;
for(; i--;){
if (10 + S < B[i][0] + B[i][2] && 10 + S + 200 > B[i][0] && Y < B[i][1] + B[i][3] && g + Y > B[i][1]){
c.fillText('DEAD.', L = 255, Y);
}
}
//
// MOVE
//
if(E[38]){ // up
Y = Math.max(0, Y-S);
}
if(E[40]){ // down
Y = Math.min(H - g, Y+S);
}
}
}, 20);
b.onkeydown = function(e){
E[e.keyCode] = 3;
};
b.onkeyup = function(e){
E[e.keyCode] = 0;
};