写了一个无聊的小游戏--无聊碰碰球

实现功能点

  1. 小球出生有一个等级和收入
  2. 小球每次随机获得一个目标点,在一定的时间范围内,然后移动到目标点,超时和到达则重新获取目标点。
  3. 小球在移动的过程中,碰到相同的size的球,会自动融合,成为一个新的球,size和gain是原来的两倍。
  4. 利用本地的存储对数据进行存储和恢复,利用平均收益和离线时间,计算离线收益。
  5. 增加出生速度,运动速度的属性的时候都需要对应的收益,玩家控制好金钱分配,把收益最大化。
阅读更多

AMD的规范演化

对于web项目来说,打交道的不仅仅有后台,前台页面也是少不了的,而前台的页面js也常常是我们后台程序员必须要使用的语言, 今天说下项目中的js的组织方式。

文件函数型

所谓文件函数型是指所有的js的脚本都是中都是一个一个的方法,没有任何的封装,这也是传统的项目中常用的方法。如下:

file1.js

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
 function add(a,b){
return a+b;
}

```

**file2.js**
```js
function minutes(a,b){
return a-b;
}

```

当我们想使用个方法的时候只需要应用相应的js就行了,这样的缺点很明显,就是要时刻明确文件之间的相互依赖关系的顺序,不然就会导致程序无法正常的运行。 比如还是上面的两个js,我在file1.js中有家一段代码:

**file1.js**
```js
function add(a,b){
return a+b;
}

function sum(a,b,c){
return add(a,minutes(b,c));
}

```
如果在引用的时候,先引用的file1.js则会导致files1.js中有方法没有找到。 如果项目足够的大,就纯粹的js的依赖关系就足以让我们焦头烂额。

这种方法还有很多潜在的风险,如果我在file1.js中有定义了一个minutes方法,这样file2.js中的方法就面临被覆盖的风险,所以这种布局的方式,不应该是项目的首选。

### jquery扩展型

在web的项目中,在面对dom操作的时候,传统的js的过于繁杂,所以jquery的使用应该占了很大的一部分的比重(确切的说在MVVM框架流行前)。

jquery也提供了两种扩展方法:   

- **静态方法扩展**    

jquery静态方法的扩展是直接扩展到$对象上面 :

``` js
$.funcA=function(){
// do something
}

在任何引入jquery的地方都可以使用$.funcA()来调用

  • jquery对象方法扩展
1
2
3
4
$.fn.funcB=function(){
//do something
}

使用的方法: $(“#id”).funcB()来调用。

上面的方面解决了方法见的相互的依赖顺序问题,但没有解决方法被覆盖的问题,同时又带来了一个副作用,增加了js方法的调用深度,降低了js的执行效率。

模块加载型

模块话加载是对jquery扩展和文件方法的一个进化,把每个方法都用一个模块封装起来,不至于被外面的方法覆盖。

阅读更多

博客添加浮动目录

一直都想给自己的博客添加一个浮动的目录,在网上也找也几个,从易用性方面都不是太理想,所以今天才有了想法自己去写一个插件 。

需求


 1. 当打开博客的时候在右下角自动生成对应的目录  

 2. 支持拖拽移动  

 3. 可以点击展开和收缩  (目前未实现)

易用性方面,希望能够直接引用 js后,来执行一句代码来完成对应的动作 。

实现逻辑


  1. 读取页面的所有h1,h2,h3,h4,h5

  2. 根据对应的元素和排序,生成对应的数据,格式如下:

      [
        {
            text: "目录",
            level: 2,
            achorName: "目录",
            order: 1,
            chapterIndex: "1"
        }, {
            text: "UTF8的出现",
            level: 3,
            achorName: "utf8的出现",
            order: 6,
            chapterIndex: "1.5"
        }
    ]
    
  3. 根据数据生成对应的html

    CataLog

相关使用

代码地址:ICatalogJs

使用时候只需要引用js后,执行init方法:

阅读更多

js如何操作本地程序

背景

假设有这样一个产品,一个web和一个winform客户端,在客户在web的网页上面点击启动客户端来处理,这个时候开始调用本地的客户端,来完成指定的工作。这种场景在日常的上网中也比较常见,如使用迅雷下载。当然实现的方式也有很多种,今天我来演示一种用监控Http请求来实现这个功能,思路如下:

jsApp

HttpListener

对于上面的分析,最重要的功能虽实现对Http的监控,而.net中已经封装了我们的需求,下面看下如何具体的实现:

   static void Main(string[] args)
    {
        HttpListener listerner = new HttpListener();

        try
        {
            listerner.AuthenticationSchemes = AuthenticationSchemes.Anonymous;//指定身份验证 Anonymous匿名访问
            listerner.Prefixes.Add("http://localhost:8080/Service/");
            listerner.Start();
        }
        catch (Exception ex)
        {
            Console.WriteLine("无法启动监视:" + ex.Message);
        }

        Task.Factory.StartNew(() =>  //使用一个线程对监听
        {
            while (true)
            {
                HttpListenerContext ctx = listerner.GetContext();
                Task.Factory.StartNew(TaskProc, ctx);//回调函数,开启新线程进行调用,不影响下次监听
            }
        });

        Console.ReadKey();
    }

实现请求的响应

现在我们可以拿到请求的上下文的信息ctx,先定义一个参数的格式,简单的定义如下:

    public class ReciveInfo
    {
        public string path { get; set; }//应用程序所在的路径

        public string name { get; set; }//应用程序名称
    }

下面对ctx的Response数据进行填写.

阅读更多