HTML5资讯

当前位置: HTML5技术网 > HTML5资讯 > HTML5-笑傲弈林

HTML5-笑傲弈林

      结合笔者发过的html5 贪食蛇和中国象棋程序,整合成了一个基于 html5 的象棋打谱程序,该打谱程序暂时还没有什么亮点,只是有别于东萍的打谱程序,它是用 flash 开发的,本程序则不用依赖 falsh, 但却依赖浏览器 ... (万恶的 IE )。技术上也没有什么可圈可点,无非还是在用 canvas API 画画图。在此抛砖引玉,期待更多 html5 的精彩应用。

      本程序支持以下棋谱格式,比较简陋
      每个棋步由四个字符组成: 棋子纵坐标 + 棋子横坐标  + 目的点纵坐标  +  目的点横坐标
      试下功能没有进行行棋规则的限制,如对此有兴趣,可参考笔者中国象棋程序的实现。
      试下后可保存棋谱,保存格式同上,棋谱保存后可用于演示。

      本程序未来有可能考虑以下扩展
      1. 象棋行棋术语显示与定位
      2. 多种棋谱格式支持
      3. 联网下棋
      4. 象棋比赛直播

      但也不一定,要看时间,心情与兴趣,毕竟这年头,计划赶不上变化。同好棋友,也可自行扩展,你推倒重来更好。本程序用yangguo licence 进行发布。

      Yangguo licence: 任何人有权使用本程序。如要修改源代码,建议通知作者,并提交修改后代码。美女将获得无偿培训,指导。

      闲话休提,来看截图:

      录入棋谱:

      javascript代码:
  1. function Board(pen){   
  2.     this.board = [];   
  3.     this.init = function(){   
  4.         this.board = new Array(   
  5.         [8,9,10,11,12,11,10,9,8],   
  6.         [0,0,0,0,0,0,0,0,0],   
  7.         [0,13,0,0,0,0,0,13,0],   
  8.         [14,0,14,0,14,0,14,0,14],   
  9.         [0,0,0,0,0,0,0,0,0],   
  10.         [0,0,0,0,0,0,0,0,0],   
  11.         [7,0,7,0,7,0,7,0,7],   
  12.         [0,6,0,0,0,0,0,6,0],   
  13.         [0,0,0,0,0,0,0,0,0],   
  14.         [1,2,3,4,5,4,3,2,1]   
  15.         );   
  16.            
  17.     }   
  18.     this.init();   
  19.     this.step = [];   
  20.     this.memory = [];   
  21.     this.cur = 0;   
  22.     this.choosed = false;   
  23.     this.chooseX = 0;   
  24.     this.chooseY = 0;   
  25.     this.id = -1;   
  26.     this.cxt = pen;   
  27.   
  28.     var padder = 50;   
  29.     var dis = 50;   
  30.     var chessSize = 23;   
  31.     var statLength = dis/4;   
  32.     var statDis = dis/7;   
  33.     var range = chessSize;   
  34.     var WIDTH = 8*dis;   
  35.     var HEIGHT = 9*dis;   
  36.       
  37.     var letter = "ABCDEFGHIJKLMN";   
  38.       
  39.     var chessChar = ["","车","马","相","士","帅","炮","兵","车","马","象","士","将","炮","卒"];   
  40.   
  41.     this.clearAll = function(){   
  42.         this.cxt.clearRect(0,0,WIDTH + padder + dis,HEIGHT + padder + dis);   
  43.     }   
  44.     this.drawBoard = function(){   
  45.         this.cxt.fillStyle = "#FDF5E6";   
  46.         this.cxt.fillRect(padder - 8,padder - 8,WIDTH +  16,HEIGHT +  16);   
  47.         this.cxt.moveTo(padder,padder);   
  48.         this.cxt.strokeStyle = "black";   
  49.         for(i=0;i<10;i++){   
  50.             this.cxt.moveTo(padder,padder + i*dis);   
  51.             this.cxt.lineTo(WIDTH + padder,padder + i*dis);   
  52.         }   
  53.         this.cxt.moveTo(padder,padder);   
  54.         this.cxt.lineTo(padder,HEIGHT + padder);   
  55.         this.cxt.moveTo(padder + WIDTH,padder);   
  56.         this.cxt.lineTo(padder + WIDTH,HEIGHT + padder);   
  57.         for(i=1;i<8;i++){   
  58.             this.cxt.moveTo(padder + i*dis,padder);   
  59.             this.cxt.lineTo(padder + i*dis,4*dis + padder);   
  60.             this.cxt.moveTo(padder + i*dis,HEIGHT + padder);   
  61.             this.cxt.lineTo(padder + i*dis,5*dis + padder);   
  62.   
  63.         }   
  64.         this.cxt.moveTo(padder + 3*dis,padder);   
  65.         this.cxt.lineTo(padder + 5*dis,2*dis + padder);   
  66.   
  67.         this.cxt.moveTo(padder + 5*dis,padder);   
  68.         this.cxt.lineTo(padder + 3*dis,2*dis + padder);   
  69.   
  70.         this.cxt.moveTo(padder + 3*dis,padder + HEIGHT);   
  71.         this.cxt.lineTo(padder + 5*dis,7*dis + padder);   
  72.   
  73.         this.cxt.moveTo(padder + 5*dis,padder + HEIGHT);   
  74.         this.cxt.lineTo(padder + 3*dis,7*dis + padder);   
  75.   
  76.         drawStat(this.cxt,padder + dis,padder + 2*dis);   
  77.         drawStat(this.cxt,padder + 7*dis,padder + 2*dis);   
  78.         drawStat(this.cxt,padder + dis,padder + 7*dis);   
  79.         drawStat(this.cxt,padder + 7*dis,padder + 7*dis);   
  80.   
  81.         for(i=3;i<9;i=i+3){   
  82.             for(j=0;j<9;j=j+2){   
  83.                 if(j == 0 )   
  84.                 drawRight(this.cxt,padder + j*dis,padder + i*dis);   
  85.                 else if(j == 8)   
  86.                 drawLeft(this.cxt,padder + j*dis,padder + i*dis);   
  87.                 else  
  88.                 drawStat(this.cxt,padder + j*dis,padder + i*dis);   
  89.             }   
  90.         }   
  91.         this.cxt.rect(padder - 8,padder - 8,WIDTH +  16,HEIGHT +  16);         
  92.         this.cxt.stroke();   
  93.                   
  94.         this.cxt.font = "15px 宋体";   
  95.         for(i=1;i<=9;i++){   
  96.             this.cxt.strokeText(i,padder + (i-1)*dis,padder + HEIGHT +  40);               
  97.         }   
  98.         for(i=0;i<=9;i++){   
  99.             this.cxt.strokeText(letter[i],8,padder + i*dis);   
  100.         }   
  101.     }   
  102.     this.draw = function(){   
  103.         this.clearAll();   
  104.         this.drawBoard();   
  105.            
  106.         for(i=0;i<10;i++){   
  107.             for(j=0;j<9;j++){   
  108.                 if(this.board[i][j] != 0){   
  109.                     //alert(chessChar[2]);   
  110.                     if(this.board[i][j] <= 7)   
  111.                         drawChess(this.cxt,chessChar[this.board[i][j]],j*dis + padder,i*dis + padder,"red");   
  112.                     else  
  113.                         drawChess(this.cxt,chessChar[this.board[i][j]],j*dis + padder,i*dis + padder,"black");   
  114.                
  115.                 }   
  116.             }   
  117.         }         
  118.     }   
  119.     this.startTryPlay = function(){   
  120.         this.memory = this.step;   
  121.         this.memory.length = this.cur;         
  122.     }   
  123.     this.endTryPlay = function(){   
  124.         this.react();   
  125.         this.draw();   
  126.         var code = this.memory.join(" ");   
  127.         return code;           
  128.     }   
  129.     this.stopAutoPlay = function(){   
  130.         clearInterval(this.id);   
  131.     }   
  132.     this.move = function(sx,sy,ex,ey){     
  133.         this.board[ex][ey] = this.board[sx][sy];   
  134.         this.board[sx][sy] = 0;   
  135.     }   
  136.     this.changeBook = function(step){   
  137.         this.step = step;   
  138.         this.cur = 0;   
  139.         this.init();   
  140.         this.draw();   
  141.     }   
  142.     this.next = function(){   
  143.         if(this.cur < this.step.length){   
  144.             var num = this.step[this.cur++];   
  145.             this.move(num.charCodeAt(0) - 65,num[1] - 1,num.charCodeAt(2) - 65,num[3] - 1);   
  146.         }   
  147.         else{   
  148.             if(this.id != -1){   
  149.                 clearInterval(this.id);   
  150.                 alert("演示结束");   
  151.                 this.id = -1;   
  152.             }   
  153.         }   
  154.     }   
  155.     this.prev = function(){   
  156.         if(this.cur > 0){               
  157.             this.cur--;   
  158.             this.react();              
  159.         }         
  160.     }   
  161.     this.react = function(){   
  162.         this.init();   
  163.         for(i=0;i<this.cur;i++){   
  164.             var num = this.step[i];            
  165.             this.move(num.charCodeAt(0) - 65,num[1] - 1,num.charCodeAt(2) - 65,num[3] - 1);   
  166.         }              
  167.     }   
  168.     this.autoPlay = function(){   
  169.         this.id = setInterval("this.next()",1000);   
  170.     }   
  171.            
  172.     this.play = function(e){   
  173.         var x = (e.pageX - padder)%dis;   
  174.         var y = (e.pageY - padder)%dis;   
  175.         var px = 0;   
  176.         var py = 0;   
  177.         if(x<=range || x>=(dis - range)){   
  178.             if(y<=range || y>=(dis-range)){   
  179.                 if(x<=range)   
  180.                  px = e.pageX - x;   
  181.                 else   
  182.                  px = e.pageX - x + dis;   
  183.                 if(y<=range)   
  184.                  py = e.pageY - y;   
  185.                 else   
  186.                  py = e.pageY - y + dis;   
  187.                     
  188.                 var i = (px - padder)/dis;   
  189.                 var j = (py - padder)/dis;   
  190.   
  191.                 if(!this.choosed){                 
  192.                     if(this.board[j][i] != 0){   
  193.                         this.choosed = true;   
  194.                         this.chooseX = i;   
  195.                         this.chooseY = j;   
  196.                         drawBorder(this.cxt,px,py);   
  197.                     }   
  198.                 }   
  199.                 else{   
  200.                     if(i == this.chooseX && j == this.chooseY)   
  201.                         return;                    
  202.                     this.move(this.chooseY,this.chooseX,j,i);   
  203.                     var code = String.fromCharCode(65 + this.chooseY,this.chooseX + 49,65 + j,i+49);   
  204.                     this.memory.push(code);   
  205.                     this.draw();      
  206.                     this.choosed = false;   
  207.                 }   
  208.             }   
  209.         }         
  210.     }   
  211.       
  212.     function drawBorder(cxt,x,y){   
  213.         //cxt.beginPath();   
  214.         cxt.strokeStyle = "blue";   
  215.         cxt.strokeRect(x-chessSize,y-chessSize,2*chessSize,2*chessSize);   
  216.     }   
  217.     function drawChess(cxt,chess,x,y,color){   
  218.         cxt.beginPath();   
  219.         drawCircle(cxt,x,y,chessSize);   
  220.         cxt.fillStyle="#FFDAB9";      
  221.         cxt.fill();   
  222.         cxt.beginPath();   
  223.         drawCircle(cxt,x,y - 1,chessSize - 1);   
  224.         cxt.strokeStyle = "white";   
  225.         cxt.stroke();   
  226.         cxt.beginPath();   
  227.         cxt.font = "30px 宋体";   
  228.         cxt.textAlign = 'center';     
  229.         cxt.strokeStyle = color;   
  230.         cxt.strokeText(chess,x,y + 10);        
  231.     }   
  232.   
  233.     function drawCircle(cxt,x,y,radius){   
  234.         cxt.arc(x,y,radius,0,2*Math.PI,false);   
  235.     }   
  236.   
  237.     function drawStat(cxt,x,y){        
  238.         drawLeft(cxt,x,y);   
  239.         drawRight(cxt,x,y);        
  240.     }   
  241.     function drawLeft(cxt,x,y){   
  242.         cxt.moveTo(x - statDis,y - statDis);   
  243.         cxt.lineTo(x-statDis,y - statDis - statLength);   
  244.         cxt.moveTo(x-statDis,y-statDis);   
  245.         cxt.lineTo(x-statDis - statLength,y - statDis);   
  246.         cxt.moveTo(x-statDis,y+statDis);   
  247.         cxt.lineTo(x-statDis,y + statDis + statLength);   
  248.         cxt.moveTo(x-statDis,y+statDis);   
  249.         cxt.lineTo(x-statDis - statLength,y + statDis);   
  250.     }   
  251.     function drawRight(cxt,x,y){   
  252.         cxt.moveTo(x+statDis,y-statDis);   
  253.         cxt.lineTo(x+statDis,y - statDis - statLength);   
  254.         cxt.moveTo(x+statDis,y-statDis);   
  255.         cxt.lineTo(x+statDis + statLength,y - statDis );   
  256.         cxt.moveTo(x+statDis,y+statDis);   
  257.         cxt.lineTo(x+statDis,y + statDis + statLength);   
  258.         cxt.moveTo(x+statDis,y+statDis);   
  259.         cxt.lineTo(x+statDis + statLength,y + statDis );   
  260.     }   
  261. }  

  262. function Board(pen){
  263.         this.board = [];
  264.         this.init = function(){
  265.                 this.board = new Array(
  266.                 [8,9,10,11,12,11,10,9,8],
  267.                 [0,0,0,0,0,0,0,0,0],
  268.                 [0,13,0,0,0,0,0,13,0],
  269.                 [14,0,14,0,14,0,14,0,14],
  270.                 [0,0,0,0,0,0,0,0,0],
  271.                 [0,0,0,0,0,0,0,0,0],
  272.                 [7,0,7,0,7,0,7,0,7],
  273.                 [0,6,0,0,0,0,0,6,0],
  274.                 [0,0,0,0,0,0,0,0,0],
  275.                 [1,2,3,4,5,4,3,2,1]
  276.                 );
  277.                
  278.         }
  279.         this.init();
  280.         this.step = [];
  281.         this.memory = [];
  282.         this.cur = 0;
  283.         this.choosed = false;
  284.         this.chooseX = 0;
  285.         this.chooseY = 0;
  286.         this.id = -1;
  287.         this.cxt = pen;

  288.         var padder = 50;
  289.         var dis = 50;
  290.         var chessSize = 23;
  291.         var statLength = dis/4;
  292.         var statDis = dis/7;
  293.         var range = chessSize;
  294.         var WIDTH = 8*dis;
  295.         var HEIGHT = 9*dis;
  296.         
  297.         var letter = "ABCDEFGHIJKLMN";
  298.         
  299.         var chessChar = ["","车","马","相","士","帅","炮","兵","车","马","象","士","将","炮","卒"];

  300.         this.clearAll = function(){
  301.                 this.cxt.clearRect(0,0,WIDTH + padder + dis,HEIGHT + padder + dis);
  302.         }
  303.         this.drawBoard = function(){
  304.                 this.cxt.fillStyle = "#FDF5E6";
  305.                 this.cxt.fillRect(padder - 8,padder - 8,WIDTH +  16,HEIGHT +  16);
  306.                 this.cxt.moveTo(padder,padder);
  307.                 this.cxt.strokeStyle = "black";
  308.                 for(i=0;i<10;i++){
  309.                         this.cxt.moveTo(padder,padder + i*dis);
  310.                         this.cxt.lineTo(WIDTH + padder,padder + i*dis);
  311.                 }
  312.                 this.cxt.moveTo(padder,padder);
  313.                 this.cxt.lineTo(padder,HEIGHT + padder);
  314.                 this.cxt.moveTo(padder + WIDTH,padder);
  315.                 this.cxt.lineTo(padder + WIDTH,HEIGHT + padder);
  316.                 for(i=1;i<8;i++){
  317.                         this.cxt.moveTo(padder + i*dis,padder);
  318.                         this.cxt.lineTo(padder + i*dis,4*dis + padder);
  319.                         this.cxt.moveTo(padder + i*dis,HEIGHT + padder);
  320.                         this.cxt.lineTo(padder + i*dis,5*dis + padder);

  321.                 }
  322.                 this.cxt.moveTo(padder + 3*dis,padder);
  323.                 this.cxt.lineTo(padder + 5*dis,2*dis + padder);

  324.                 this.cxt.moveTo(padder + 5*dis,padder);
  325.                 this.cxt.lineTo(padder + 3*dis,2*dis + padder);

  326.                 this.cxt.moveTo(padder + 3*dis,padder + HEIGHT);
  327.                 this.cxt.lineTo(padder + 5*dis,7*dis + padder);

  328.                 this.cxt.moveTo(padder + 5*dis,padder + HEIGHT);
  329.                 this.cxt.lineTo(padder + 3*dis,7*dis + padder);

  330.                 drawStat(this.cxt,padder + dis,padder + 2*dis);
  331.                 drawStat(this.cxt,padder + 7*dis,padder + 2*dis);
  332.                 drawStat(this.cxt,padder + dis,padder + 7*dis);
  333.                 drawStat(this.cxt,padder + 7*dis,padder + 7*dis);

  334.                 for(i=3;i<9;i=i+3){
  335.                         for(j=0;j<9;j=j+2){
  336.                                 if(j == 0 )
  337.                                 drawRight(this.cxt,padder + j*dis,padder + i*dis);
  338.                                 else if(j == 8)
  339.                                 drawLeft(this.cxt,padder + j*dis,padder + i*dis);
  340.                                 else
  341.                                 drawStat(this.cxt,padder + j*dis,padder + i*dis);
  342.                         }
  343.                 }
  344.                 this.cxt.rect(padder - 8,padder - 8,WIDTH +  16,HEIGHT +  16);               
  345.                 this.cxt.stroke();
  346.                                 
  347.                 this.cxt.font = "15px 宋体";
  348.                 for(i=1;i<=9;i++){
  349.                         this.cxt.strokeText(i,padder + (i-1)*dis,padder + HEIGHT +  40);                        
  350.                 }
  351.                 for(i=0;i<=9;i++){
  352.                         this.cxt.strokeText(letter[i],8,padder + i*dis);
  353.                 }
  354.         }
  355.         this.draw = function(){
  356.                 this.clearAll();
  357.                 this.drawBoard();
  358.                
  359.                 for(i=0;i<10;i++){
  360.                         for(j=0;j<9;j++){
  361.                                 if(this.board[i][j] != 0){
  362.                                         //alert(chessChar[2]);
  363.                                         if(this.board[i][j] <= 7)
  364.                                                 drawChess(this.cxt,chessChar[this.board[i][j]],j*dis + padder,i*dis + padder,"red");
  365.                                         else
  366.                                                 drawChess(this.cxt,chessChar[this.board[i][j]],j*dis + padder,i*dis + padder,"black");
  367.                         
  368.                                 }
  369.                         }
  370.                 }               
  371.         }
  372.         this.startTryPlay = function(){
  373.                 this.memory = this.step;
  374.                 this.memory.length = this.cur;               
  375.         }
  376.         this.endTryPlay = function(){
  377.                 this.react();
  378.                 this.draw();
  379.                 var code = this.memory.join(" ");
  380.                 return code;               
  381.         }
  382.         this.stopAutoPlay = function(){
  383.                 clearInterval(this.id);
  384.         }
  385.         this.move = function(sx,sy,ex,ey){        
  386.                 this.board[ex][ey] = this.board[sx][sy];
  387.                 this.board[sx][sy] = 0;
  388.         }
  389.         this.changeBook = function(step){
  390.                 this.step = step;
  391.                 this.cur = 0;
  392.                 this.init();
  393.                 this.draw();
  394.         }
  395.         this.next = function(){
  396.                 if(this.cur < this.step.length){
  397.                         var num = this.step[this.cur++];
  398.                         this.move(num.charCodeAt(0) - 65,num[1] - 1,num.charCodeAt(2) - 65,num[3] - 1);
  399.                 }
  400.                 else{
  401.                         if(this.id != -1){
  402.                                 clearInterval(this.id);
  403.                                 alert("演示结束");
  404.                                 this.id = -1;
  405.                         }
  406.                 }
  407.         }
  408.         this.prev = function(){
  409.                 if(this.cur > 0){                        
  410.                         this.cur--;
  411.                         this.react();                        
  412.                 }               
  413.         }
  414.         this.react = function(){
  415.                 this.init();
  416.                 for(i=0;i<this.cur;i++){
  417.                         var num = this.step[i];                        
  418.                         this.move(num.charCodeAt(0) - 65,num[1] - 1,num.charCodeAt(2) - 65,num[3] - 1);
  419.                 }                        
  420.         }
  421.         this.autoPlay = function(){
  422.                 this.id = setInterval("this.next()",1000);
  423.         }
  424.                
  425.         this.play = function(e){
  426.                 var x = (e.pageX - padder)%dis;
  427.                 var y = (e.pageY - padder)%dis;
  428.                 var px = 0;
  429.                 var py = 0;
  430.                 if(x<=range || x>=(dis - range)){
  431.                         if(y<=range || y>=(dis-range)){
  432.                                 if(x<=range)
  433.                                  px = e.pageX - x;
  434.                                 else
  435.                                  px = e.pageX - x + dis;
  436.                                 if(y<=range)
  437.                                  py = e.pageY - y;
  438.                                 else
  439.                                  py = e.pageY - y + dis;
  440.                                  
  441.                                 var i = (px - padder)/dis;
  442.                                 var j = (py - padder)/dis;

  443.                                 if(!this.choosed){                                
  444.                                         if(this.board[j][i] != 0){
  445.                                                 this.choosed = true;
  446.                                                 this.chooseX = i;
  447.                                                 this.chooseY = j;
  448.                                                 drawBorder(this.cxt,px,py);
  449.                                         }
  450.                                 }
  451.                                 else{
  452.                                         if(i == this.chooseX && j == this.chooseY)
  453.                                                 return;                                       
  454.                                         this.move(this.chooseY,this.chooseX,j,i);
  455.                                         var code = String.fromCharCode(65 + this.chooseY,this.chooseX + 49,65 + j,i+49);
  456.                                         this.memory.push(code);
  457.                                         this.draw();        
  458.                                         this.choosed = false;
  459.                                 }
  460.                         }
  461.                 }               
  462.         }
  463.         
  464.         function drawBorder(cxt,x,y){
  465.                 //cxt.beginPath();
  466.                 cxt.strokeStyle = "blue";
  467.                 cxt.strokeRect(x-chessSize,y-chessSize,2*chessSize,2*chessSize);
  468.         }
  469.         function drawChess(cxt,chess,x,y,color){
  470.                 cxt.beginPath();
  471.                 drawCircle(cxt,x,y,chessSize);
  472.                 cxt.fillStyle="#FFDAB9";        
  473.                 cxt.fill();
  474.                 cxt.beginPath();
  475.                 drawCircle(cxt,x,y - 1,chessSize - 1);
  476.                 cxt.strokeStyle = "white";
  477.                 cxt.stroke();
  478.                 cxt.beginPath();
  479.                 cxt.font = "30px 宋体";
  480.                 cxt.textAlign = 'center';  
  481.                 cxt.strokeStyle = color;
  482.                 cxt.strokeText(chess,x,y + 10);               
  483.         }

  484.         function drawCircle(cxt,x,y,radius){
  485.                 cxt.arc(x,y,radius,0,2*Math.PI,false);
  486.         }

  487.         function drawStat(cxt,x,y){               
  488.                 drawLeft(cxt,x,y);
  489.                 drawRight(cxt,x,y);               
  490.         }
  491.         function drawLeft(cxt,x,y){
  492.                 cxt.moveTo(x - statDis,y - statDis);
  493.                 cxt.lineTo(x-statDis,y - statDis - statLength);
  494.                 cxt.moveTo(x-statDis,y-statDis);
  495.                 cxt.lineTo(x-statDis - statLength,y - statDis);
  496.                 cxt.moveTo(x-statDis,y+statDis);
  497.                 cxt.lineTo(x-statDis,y + statDis + statLength);
  498.                 cxt.moveTo(x-statDis,y+statDis);
  499.                 cxt.lineTo(x-statDis - statLength,y + statDis);
  500.         }
  501.         function drawRight(cxt,x,y){
  502.                 cxt.moveTo(x+statDis,y-statDis);
  503.                 cxt.lineTo(x+statDis,y - statDis - statLength);
  504.                 cxt.moveTo(x+statDis,y-statDis);
  505.                 cxt.lineTo(x+statDis + statLength,y - statDis );
  506.                 cxt.moveTo(x+statDis,y+statDis);
  507.                 cxt.lineTo(x+statDis,y + statDis + statLength);
  508.                 cxt.moveTo(x+statDis,y+statDis);
  509.                 cxt.lineTo(x+statDis + statLength,y + statDis );
  510.         }
  511. }  
复制代码


【HTML5-笑傲弈林】相关文章

1. HTML5-笑傲弈林

2. 微软官方HTML5九宫格Demo:HTML5九宫格Sudoku在线演示

3. 坦克大战HTML5版——HTML5爱好者原创

4. HTML5超级玛丽游戏重体验 HTML5游戏经典

5. HTML5教程:HTML5的基础写法

6. HTML5/CSS3系列教程:HTML5基本标签使用header,nav和footer

7. HTML5架构(HTML5 Boilerplates )

8. 7款HTML5精美应用教程 让你立即爱上HTML5

9. 微软开始接纳HTML5:首推HTML5版必应客户端

10. HTML5 VS FLASH HTML5完胜

本文来源:https://www.51html5.com/a2116.html

点击展开全部

﹝HTML5-笑傲弈林﹞相关内容

「HTML5-笑傲弈林」相关专题

其它栏目

也许您还喜欢