Гоночка на JavaScript (30 строк кода)

HTML

<canvas id="canvas" style="green ground:#CC"></canvas>

JavaScript

(function(elid, width, height, speed, strength) {
      var canvas = document.querySelector(elid),
        ctx = canvas.getContext("2d"),
        pos = 0,
        blocks = [],
        curHeight = 0,
        mousePos, newHeight = -1;
      canvas.width = width;
      canvas.height = height;
      ctx.fillStyle = "black";
      var game = setInterval(function() {
        strength += 0.001;
        var tetha = (strength > 0.6) ? 0.6 : strength;
        if (Math.random() < tetha) blocks.push([Math.random() * (width - 10), height + 10, 10 + Math.random() * 40]);
        ctx.clearRect(0, 0, width, height);
        ctx.beginPath();
        ctx.arc(pos + 5, curHeight + 5, 5, 0, 2 * Math.PI);
        ctx.fill();
        for (var i = 0; i < blocks.length; i++) {
          ctx.fillRect(blocks[i][0], blocks[i][1], blocks[i][2], 10);
          if (blocks[i][0] - 5 < pos && (blocks[i][0] + blocks[i][2] - 5 > pos) && (curHeight - blocks[i][1] < 0 && curHeight - blocks[i][1] > -15) && curHeight == newHeight)
            newHeight = blocks[i][1] - 15;
          if (blocks[i][1] < 0)
            blocks.splice(i--, 1);
          else
            blocks[i][1] -= 5;
        }
        if (curHeight == newHeight)
          newHeight = curHeight += 10 * ((strength > 0.6) ? 0.6 : strength);
        if ((!(curHeight = newHeight) || curHeight < -1 || curHeight > height) && clearInterval(game) == undefined)
          alert("Game over. You have " + Math.floor(1000 * strength) + " points.");
        pos += (Math.abs(pos - mousePos) > 10) ? (mousePos > pos) ? ((mousePos < width) ? 10 : 0) : ((mousePos > 0) ? -10 : 0) : 0;
      }, speed);
      document.addEventListener('mousemove', function(e) {
        mousePos = e.pageX;
      }, false);
    })("#canvas", 400, 300, 33, 0.05);