美文网首页代码改变世界程序员
编程模拟自然系统,程序2:mover

编程模拟自然系统,程序2:mover

作者: 江欲行 | 来源:发表于2014-12-17 15:36 被阅读66次
文/江欲行(jiqingwu@gmail.com)

这个例子里,描述了一个一直向前的对象。

每一次,对象会随机选一个出生位置和一个方向,然后一直运动下去。如果碰到边缘,就会转到画布的另一边继续沿原来的方向前进。

html5代码如下(可以从https://github.com/jollywing/nature_of_code_examples_html5/blob/master/chp1_vectors/mover.html 下载该文件):

<!doctype html>
<html>
  <head>
    <title>Mover</title>
    <meta charset="utf-8" />
    <meta name="author" content="JollyWing(jiqingwu@gmail.com)"/>
    <meta name="create" content="2014-12-17 Wed"/>
    <style type="text/css">
     #screen {border:1px solid #000;}
    </style>
    <script>
     var mover = {
       /* x:100,
       y:100,
       xspeed:11,
       yspeed:10, */
       radius:2,
       init:function(canvasWidth, canvasHeight){
         this.x = Math.floor(Math.random() * canvasWidth);
         this.y = Math.floor(Math.random() * canvasHeight);
         this.xspeed = 1 + Math.floor(Math.random() * 10);
         this.yspeed = 1 + Math.floor(Math.random() * 10);
         console.log(this.xspeed + ',' + this.yspeed);
       },

       move:function(canvasWidth, canvasHeight){
         this.x = this.x + this.xspeed;
         this.y = this.y + this.yspeed;

         if(this.x > canvasWidth - this.radius){
           this.x = this.radius;
         }
         else if(this.x < this.radius) {
           this.x = canvasWidth - this.radius;
         }
         if(this.y > canvasHeight - this.radius){
           this.y = this.radius;
         }
         else if(this.y < this.radius) {
           this.y = canvasHeight - this.radius;
         }
       },

       draw:function(context){
         context.moveTo(this.x, this.y);
         context.arc(this.x, this.y, this.radius, 0, 2*Math.PI);
         context.stroke();
       }
     };

     var timeOut;
     var scr, width, height, context;

     function initScr(){
       scr = document.getElementById('screen');
       width = scr.width;
       height = scr.height;
       context = scr.getContext('2d');
       context.strokeStyle="red";
     }

     function walk(){
       mover.move(width, height);
       mover.draw(context);
       timeOut = setTimeout('walk()', 200);
       // console.log(mover.x + ',' + mover.y);
     }

     function stopWalk(){
       clearTimeout(timeOut);
     }

     function init(){
       initScr();
       mover.init(width, height);
     }
    </script>
  </head>
  <body onload='init()'>
    <p>
    <canvas id="screen" width="640" height="480"></canvas>
    </p>
    <input type="button" value='Start' onclick='walk()'/>
    <input type="button" value='Stop' onclick='stopWalk()' />
  </body>
</html>

运行结果:

一直向前

2014-12-17 周三

相关文章

  • 编程模拟自然系统,程序2:mover

    这个例子里,描述了一个一直向前的对象。 每一次,对象会随机选一个出生位置和一个方向,然后一直运动下去。如果碰到边缘...

  • 编程模拟自然系统,程序1:bouncing ball

    《代码本色:用编程模拟自然系统》是一本好书,一定要读一读。用编程模拟自然,是我一直以来都想做的事,也是我编程的热情...

  • 《代码本色》的故事

    书名:代码本色:用编程模拟自然系统作者:Daniel Shiffman译者:周晗彬ISBN:978-7-115-3...

  • 为什么要用软件模拟自然现象呢?

    书名:代码本色:用编程模拟自然系统作者:Daniel Shiffman译者:周晗彬ISBN:978-7-115-3...

  • 随机游走类

    书名:代码本色:用编程模拟自然系统作者:Daniel Shiffman译者:周晗彬ISBN:978-7-115-3...

  • Perlin噪声:noise()函数的不同点

    书名:代码本色:用编程模拟自然系统作者:Daniel Shiffman译者:周晗彬ISBN:978-7-115-3...

  • 概率和非均匀分布

    书名:代码本色:用编程模拟自然系统作者:Daniel Shiffman译者:周晗彬ISBN:978-7-115-3...

  • 自定义分布的随机数

    书名:代码本色:用编程模拟自然系统作者:Daniel Shiffman译者:周晗彬ISBN:978-7-115-3...

  • 映射噪声(漫步游走程序)

    书名:代码本色:用编程模拟自然系统作者:Daniel Shiffman译者:周晗彬ISBN:978-7-115-3...

  • 随机游走

    书名:代码本色:用编程模拟自然系统作者:Daniel Shiffman译者:周晗彬ISBN:978-7-115-3...

网友评论

    本文标题:编程模拟自然系统,程序2:mover

    本文链接:https://www.haomeiwen.com/subject/mnuotttx.html