努力,成長,提高

          在追求中進步
          數據加載中……

          2009年9月15日

          html5 基于canvas的基礎類設計

          先給大家看一個demo
          http://www.koooi.com/html5/
          代碼很簡單
          頁面上面加一個<canvas style="border:1px solid" id="canvas" width="1000" height="800">
                      <p>
                          Your browser does not support the canvas element.
                      </p>
                  </canvas>
          然后javascript中寫上

          var canvas = null;
          var ctx = null;
          var score = 0;
          var num = 51;
          function getRandomInt(a, b){
              
          return Math.floor(Math.random() * (b - a + 1)) + a;
              
          }

          window.onload 
          = init;

          function init(){
              canvas 
          = document.getElementById('canvas');
              scoreID 
          = document.getElementById('score');
              ctx 
          = canvas.getContext('2d');
              
          //    setInterval(draw, 1000 / FPS);
              
              controller 
          = new ERIC.CanvasController(ctx, canvas.width, canvas.height);
              controller.animateStopBySignal();
              canvas.onclick 
          = function(e){
                  
          var mousex = e.clientX;
                  
          var mousey = e.clientY;
                  
          var relativex = mousex - canvas.offsetLeft;
                  
          var relativey = mousey - canvas.offsetTop;
                  
          var len = controller.canvasObjectList.length;
                  
          var infig = false;
                  
          for (i = len - 1; i >= 0; i--) {
                      
          if (controller.canvasObjectList[i].isInFigure(relativex, relativey)) {
                          score 
          = score + 10;
                          infig 
          = true;
                          controller.canvasObjectList[i].removeFromControl();
                      }
                  }
                  
          if (!infig) {
                      score 
          = score - 10;
                  }
                  scoreID.innerHTML 
          = score;
              }
              
              ERIC.run(
          function test(){
                  
          var t = getRandomInt(00);
                  
          if (t == 0) {
                      num
          --;
                      
          if(num==0){
                          ERIC.stop();
                          
          return;
                      }
                      
          var cir1 = new ERIC.Circle(getRandomInt(70930), getRandomInt(70730), 5);
                      cir1.setTriggerDelete(
          function(){
                          
          return this.radius >= 40;
                      });
                      cir1.setAction(
          function(){
                          
          this.radius = this.radius + 1;
                      });
                      controller.add(cir1);
                  }
              }, 
          400);
          }

          很簡單的代碼,利用了我寫的基礎類ERIC.Circle Eric.CanvasController 以及ERIC.Run
          使用簡介:
          1.先實例化ERIC.
          CanvasController,假設實例名字controller
          2.實例化一個ERIC.BasicFigure類的子類的對象,現在EricUtils.js只提供了一個擴展類Circle,假設實例名字為cir
          3.設置cir實例的動作和刪除的條件。動作意思是每一個動畫要執行什么操作,比如圓的半徑加1, 或者圓心移動。刪除的條件比如半徑大于50就從畫布當中刪除掉,不再顯示這個圓。
          cir1.setTriggerDelete(function(){
                          return this.radius >= 40;
                      });
                      cir1.setAction(function(){
                          this.radius = this.radius + 1;
                      });
          4.把cir添加到controller中。controller.add(cir)
          5.調用controller.animate(); 此方法會以每秒30幀來畫出cir對象,每幀結束執行cir在第三步設置的動作。到達刪除條件會刪除掉該object,直到沒有object在controller當中。
          6.也可以調用controller.animateStopBySignal()方法,動作和5相同,但是會一直進行渲染,這樣適合于臨時添加object到controller當中,添加進去以后馬上就可以被渲染,直到滿足被刪除的條件。渲染結束需要調用controller.signalStop()

          基礎類下載地址http://www.koooi.com/html5/js/EricUtils.js
          當然,這只是一個框架,以后要添加更多的功能,如果您對于html5有興趣,打算和我一起來開發,歡迎聯系我
          希望可以起到拋磚引玉的作用。
          QQ627四23四四三

          posted @ 2010-06-13 02:07 孔陽 閱讀(1940) | 評論 (0)編輯 收藏
          用JAVA實現AI

               摘要: 從小就有一個夢想,將來開發機器人,說白了,就是人工智能。現在看來,可喜的是,做的是軟件這行,還有點可行性,可惜的是,做的工作與人工智能不搭嘎,工作又太累,天天加班不說,大老遠跑回家,就沒那么多時間去思考,學習人工智能了。徘徊猶豫了幾個月,一直沒有決心去寫代碼,這不,終于決定繼續小時候的夢想,開始了用java實現人工智能的第一步了,那就是用java來分析語義,讓我們從頭開始。 我的第一個Miles...  閱讀全文

          posted @ 2010-06-06 23:59 孔陽 閱讀(7883) | 評論 (5)編輯 收藏
          用動態規劃算法對最大子串問題的java實現

          最大字串問題描述大概就是給定2個字符串,找出他們兩個共有的最長字符串。比如一個是"tabcfg"另外一個"abckj"那么最大子串就是"abc".
          動態規劃算法最重要的就是分解問題,找出遞歸。說一下我的思考思路,首先拿到2個字符串,如何找到最長子串呢?
          1.假設他們(字符串a,b)的頭字母不相同的話,那么分別去掉首字母比較,也就是說用a.subString(1)和b比較,用b.subString(1)和a比較,最長子字符串沒變吧?答案是肯定的。ok遞歸出現了,結束條件就是有一個字符串變空,返回值就是a和b的最長子串。
          b.假設他們頭字母相同,那么一直比較下去,知道兩者的第n個字母不相同,然后把前n-1個字母存為子字符串c,把a.subString(1)和b返回結果記為d,b.subString(1)和a返回結果記為e,那么返回c,d和e最長的一個(感謝lexy的評論,之前確實遺漏一種情況。不應該直接把前面的相同的去掉直接比較的,現在代碼已經更新了)。
          也許有人說應該從后面往前面比較,找到相同的然后一個個再往前比,其實道理都是一樣的,關鍵要找到分解問題的方法。這里只是拋磚引玉,下面是具體的java實現。

          import java.util.HashMap;
          import java.util.Map;
           
          /**
          @author HEACK
          *
          */
          public class CompareStr {
           
                  
          /**
                  * 
          @param args
                  
          */
                  
          public static void main(String[] args) {
                          
          // TODO Auto-generated method stub
                          String str1 = "abcde1234567abcdefghijk";
                          String str2 
          = "abcdefgh12345";
                         
                          
          //String str2 = "abc happyies dutcbirthday peter";
                          CompareStr cj = new CompareStr();
                          System.out.println(cj.getLongestString(str1,str2));
           
                  }
           
                  
          private boolean isEmpty(String str) {
                          
          return str == null || str.trim().length() == 0;
                  }
                  
          private Map map = new HashMap();
           
                  
          private String getLongestString(String str1, String str2) {
                          
          if (isEmpty(str1) || isEmpty(str2)) {
                                  
          return "";
                          }
                          StringBuffer key 
          = new StringBuffer();
                          key.append(str1).append(
          "&&").append(str2);
                          
          if (map.containsKey(key.toString())) {
                                  
          return (String)map.get(key.toString());
                          }
                          StringBuffer longestStr 
          = new StringBuffer();
                          
          char[] str1List = str1.toCharArray();
                          
          char[] str2List = str2.toCharArray();
                          
          int i = 0;
                          
          for (i = 0; i < str1List.length && i < str2List.length; i++) {
                                  
          if (str1List[i] == str2List[i]) {
                                          longestStr.append(str1List[i]);
                                  } 
          else {
                                          
          break;
                                  }
                          }
                          String subStr1 
          = str1.substring(i);
                          String subStr2 
          = str2.substring(i);
                          
          if (i == 0) {
                                  String retStr1 
          = getLongestString(subStr1.substring(1), subStr2);
                                  String retStr2 
          = getLongestString(subStr1, subStr2.substring(1));
                                  String returnStr 
          = retStr1.length() >= retStr2.length() ? retStr1 : retStr2;
                                  map.put(key.toString(), returnStr);
                                  
          return returnStr;
                          } 
          else {
                                  String retStr1 
          = getLongestString(str1.substring(1), str2);
                                  String retStr2 
          = getLongestString(str1, str2.substring(1));
                                  String retStr 
          = retStr1.length() > retStr2.length() ? retStr1
                              : retStr2;
                                  String returnStr 
          = retStr.length() >= longestStr.toString().length() ? retStr
                                                  : longestStr.toString();
                                  map.put(key.toString(), returnStr);
                                  
          return returnStr;
                          }
                  }
           
          }

          HashMap用來存儲已經計算過的字符串,用空間換時間。代碼當然還可以優化,您也可以一試身手哦。

          posted @ 2009-09-15 01:19 孔陽 閱讀(4445) | 評論 (7)編輯 收藏
          主站蜘蛛池模板: 微山县| 京山县| 龙泉市| 枣强县| 濮阳市| 绥宁县| 固原市| 清苑县| 西和县| 拜泉县| 商水县| 镇雄县| 盐边县| 泰安市| 临湘市| 贵德县| 西安市| 万盛区| 南充市| 禹城市| 永福县| 合肥市| 南和县| 麟游县| 红安县| 抚宁县| 富民县| 汶上县| 馆陶县| 松滋市| 通州区| 泰和县| 海淀区| 绍兴县| 黑水县| 星座| 盐山县| 辽阳市| 郧西县| 西林县| 昭觉县|