Web版tank大战

采用js技术创作的web版坦克大战,有用js模拟多线程技术,目前只支持IE,其他浏览器未写

具体代码:
  1. <!--
  2. 这是一个web版的tank大战程序,可以进行初步的游戏
  3. 任何人都可以修改或优化该程序
  4. 若你修改或优化出更好的web版tank大战,我很乐意你邮寄一份copy给我
  5. Email:chenyijiu@gmail.com
  6. Author:陈一九
  7. Ver:1.00
  8. -->
  9. <html>
  10. <head>
  11.     <meta http-equiv="Content-Type" content="text/html;charset=utf-8" />
  12.     <title>Tank</title>
  13.     <link rel="shortcut icon" href="images/tank.ico" />
  14. </head>
  15. <body onload="PlayGame()">
  16.     <div id="Tank">
  17.     </div>
  18.     <div id="CannonBall" style="display:none;">
  19.     </div>
  20.     <div id="Enemy" style="display:none;">
  21.     </div>
  22.     <div id="gameover" style="display:none; position:absolute; left:0; top:156; z-index:90000;"><img src="images/gameover.png" /></div>
  23.     <div id="gamewin" style="display:none; position:absolute; left:0; top:156; z-index:80000;"><img src="images/gamewin.png" /></div>
  24.     <!--<embed name="playerMove" src="sounds/Bank.wmv" loop="false" autostart="false" hidden="true" width="10" height="10" />-->
  25.     <div id="enemyDetail" style="position:absolute; left:600; top:10;">
  26.         <div>
  27.             <b>敌人总数:</b>
  28.         </div>
  29.         <div id="enemyTotalCount">
  30.             20
  31.         </div>
  32.         <div>
  33.             <b>重型:</b>
  34.         </div>
  35.         <div id="heavyEnemy">
  36.             5
  37.         </div>
  38.         <div>
  39.             <b>常规:</b>
  40.         </div>
  41.         <div id="normalEnemy">
  42.             10
  43.         </div>
  44.         <div>
  45.             <b>轻型:</b>
  46.         </div>
  47.         <div id="lightEnemy">
  48.             5
  49.         </div>
  50.         <div>
  51.             <b>玩家Life:</b>
  52.         </div>
  53.         <div id="playerLife">
  54.             3
  55.         </div>
  56.         <div>
  57.             <b>玩法:</b>
  58.         </div>
  59.         <div>
  60.             方向键控制玩家方向<br />
  61.             Enter键暂停/继续<br />
  62.             空格键开火<br />
  63.             F5键重新开局
  64.         </div>
  65.     </div>
  66. </body>
  67. </html>
  68. <script type="text/javascript" language="javascript">
  69. var objectid = 0;
  70. var statePlaying = "none";
  71. var map = null;
  72. var tankDraw = null;
  73. var player = null;
  74. var currentEnemyCount = 0;
  75. var canCreateEnemyCount = 3;
  76. var maxEnemyCount = 20;
  77. var leftEnemyCount = 20;
  78. var cannonSpeed = 8;
  79. var createEnemyPosition = 0;
  80. var enemyItems = new EnemyList();
  81. var currentEnemyItems = new EnemyList();
  82. var t1 = new Date();
  83. var t2 = new Date();
  84. var t3 = new Date();
  85. var tank = new Tank();
  86. var direction = new Array("left", "right", "up", "down");
  87. var kc = 0;
  88. var newkey = false;
  89. var startNewPlayerFlag = false;
  90. //function PlaySound(action, o)
  91. //{
  92. //    if(eval(o) != null)
  93. //    {
  94. //        if(navigator.appName == "Netscape")
  95. //        {
  96. //            eval(o+((action=="stop")?".stop()":"playy(false)"));
  97. //        }
  98. //        else if(eval(o+".FileName"))
  99. //        {
  100. //            eval(o+((action=="stop")?".stop()":".play()"));
  101. //        }
  102. //    }
  103. //}
  104. var _st = window.setTimeout;
  105. window.setTimeout = function(fRef, mDelay) {
  106.      if(typeof fRef == 'function'){
  107.          var argu = Array.prototype.slice.call(arguments,2);
  108.          var f = (function(){ fRef.apply(null, argu); });
  109.         return _st(f, mDelay);
  110.     }
  111.     return _st(fRef,mDelay);
  112. }
  113. var _int = window.setInterval;
  114. window.setInterval = function(fRef, mDelay) {
  115.     if(typeof fRef == 'function'){
  116.         var argu = Array.prototype.slice.call(arguments,2);
  117.         var f = (function(){ fRef.apply(null, argu); });
  118.         return _int(f, mDelay);
  119.     }
  120.     return _st(fRef,mDelay);
  121. }
  122. //monitor the enemy 
  123. function startEnemyControl()
  124. {
  125.     var parameter = {}
  126.     parameter.timer = setInterval(EnemyControl,1,parameter);
  127. }
  128. //process function
  129. function EnemyControl(parameter)
  130. {
  131.     if(statePlaying == "pause" || statePlaying == "failed")
  132.         return;
  133.     //three create enemy point
  134.     if(currentEnemyCount < canCreateEnemyCount && leftEnemyCount > 0)
  135.     {
  136.         if(createEnemyPosition == 0)
  137.         {
  138.             if((new Date()) - t1 > 2000)
  139.             {
  140.                 enemyItems.Enemys[maxEnemyCount - leftEnemyCount].X = 0;
  141.                 enemyItems.Enemys[maxEnemyCount - leftEnemyCount].Y = 0;
  142.                 startNewEnemy(enemyItems.Enemys[maxEnemyCount - leftEnemyCount]);
  143.                 currentEnemyItems.AddEnemy(enemyItems.Enemys[maxEnemyCount - leftEnemyCount]);
  144.                 leftEnemyCount --;
  145.                 createEnemyPosition ++;
  146.                 currentEnemyCount ++;
  147.                 t1 = new Date();
  148.             }
  149.         }
  150.         else if(createEnemyPosition == 1)
  151.         {
  152.             if((new Date()) - t2 > 2000)
  153.             {
  154.                 enemyItems.Enemys[maxEnemyCount - leftEnemyCount].X = 240;
  155.                 enemyItems.Enemys[maxEnemyCount - leftEnemyCount].Y = 0;
  156.                 startNewEnemy(enemyItems.Enemys[maxEnemyCount - leftEnemyCount]);
  157.                 currentEnemyItems.AddEnemy(enemyItems.Enemys[maxEnemyCount - leftEnemyCount]);
  158.                 leftEnemyCount --;
  159.                 createEnemyPosition ++;
  160.                 currentEnemyCount ++;
  161.                 t2 = new Date();
  162.             }
  163.         }
  164.         else if(createEnemyPosition == 2)
  165.         {
  166.             if((new Date()) - t3 > 2000)
  167.             {
  168.                 enemyItems.Enemys[maxEnemyCount - leftEnemyCount].X = 480;
  169.                 enemyItems.Enemys[maxEnemyCount - leftEnemyCount].Y = 0;
  170.                 startNewEnemy(enemyItems.Enemys[maxEnemyCount - leftEnemyCount]);
  171.                 currentEnemyItems.AddEnemy(enemyItems.Enemys[maxEnemyCount - leftEnemyCount]);
  172.                 leftEnemyCount --;
  173.                 createEnemyPosition  = 0;
  174.                 currentEnemyCount ++;
  175.                 t3 = new Date();
  176.             }
  177.         }
  178.     }
  179.     //estimate player is win?
  180.     else if(leftEnemyCount == 0 && currentEnemyCount == 0)
  181.     {
  182.         with(parameter)
  183.         {
  184.             clearInterval(timer);
  185.             setTimeout("",1,"");
  186.         }
  187.         document.getElementById("gamewin").style.display = "block";
  188.     }
  189. }
  190. //change tank's direction
  191. function changeDirection(t, e, d)
  192. {
  193.     if(e.Direction != d)
  194.     {
  195.         e.Direction = d;
  196.         t.innerHTML = "<img src=/"images/" + e.Type + "_" + e.Direction +  ".png/" width=/"32/" height=/"32/" />";
  197.     }
  198. }
  199. //tank fire
  200. function fire(o, w)
  201. {
  202.     if((new Date()) - o.FireTime > o.FireSpeed)
  203.     {
  204.         switch(o.Direction)
  205.         {
  206.             case "left":
  207.                 startNewCannonBall(new Cannonball(cannonSpeed,"",o.Direction, 1, w, document.getElementById(o.ID).style.posLeft, document.getElementById(o.ID).style.posTop + 12));
  208.                 break;
  209.             case "right":
  210.                 startNewCannonBall(new Cannonball(cannonSpeed,"",o.Direction, 1, w, document.getElementById(o.ID).style.posLeft + 24, document.getElementById(o.ID).style.posTop + 12));
  211.                 break;
  212.             case "up":
  213.                 startNewCannonBall(new Cannonball(cannonSpeed,"",o.Direction, 1, w, document.getElementById(o.ID).style.posLeft + 12, document.getElementById(o.ID).style.posTop));
  214.                 break;
  215.             case "down":
  216.                 startNewCannonBall(new Cannonball(cannonSpeed,"",o.Direction, 1, w, document.getElementById(o.ID).style.posLeft + 12, document.getElementById(o.ID).style.posTop + 24));
  217.                 break;
  218.         }
  219.         o.FireTime = new Date();
  220.     }
  221. }
  222. //function HitTank(t)
  223. //{
  224. //    var px1 = document.getElementById(player.ID).style.posTop;
  225. //    var py1 = document.getElementById(player.ID).style.posLeft;
  226. //    var x1 = document.getElementById(t.ID).style.posTop;
  227. //    var y1 = document.getElementById(t.ID).style.posLeft;
  228. //    //window.status = x1 + "_" + y1 + "_" + px1 + "_" + py1;
  229. //    if(t.Direction == "left")
  230. //    {
  231. //        if(y1 - py1 < t.Speed && px1 < x1 + 32 && px1 > x1 -32)
  232. //            return true; 
  233. //    }
  234. //    else if(t.Direction == "right")
  235. //    {
  236. //        if(py1 - y1 < t.Speed + 32 && px1 < x1 + 32 && px1 > x1 -32)
  237. //            return true;
  238. //    }
  239. //    else if(t.Direction == "up")
  240. //    {
  241. //        if(px1 - x1 < t.Speed && py1 < y1 + 32 && py1 > y1 -32)
  242. //            return true;
  243. //    }
  244. //    else if(t.Direction == "down")
  245. //    {
  246. //        if(px1 - x1 < t.Speed + 32 && py1 < y1 + 32 && py1 > y1 -32)
  247. //            return true;
  248. //    }
  249. //    
  250. //    for(var i = 0; i < currentEnemyItems.Enemys.length; i ++)
  251. //    {
  252. //        if(currentEnemyItems.Enemys[i].ID != t.ID)
  253. //        {
  254. //            var x = document.getElementById(currentEnemyItems.Enemys[i].ID).style.posTop;
  255. //            var y = document.getElementById(currentEnemyItems.Enemys[i].ID).style.posLeft;
  256. //            
  257. //            if(t.Direction == "left")
  258. //            {
  259. //                if(y1 - y < t.Speed && x < x1 + 32 && x > x1 -32)
  260. //                    return true; 
  261. //            }
  262. //            else if(t.Direction == "right")
  263. //            {
  264. //                if(y - y1 < t.Speed + 32 && x < x1 + 32 && x > x1 -32)
  265. //                    return true;
  266. //            }
  267. //            else if(t.Direction == "up")
  268. //            {
  269. //                if(x - x1 < t.Speed && y < y1 + 32 && y > y1 -32)
  270. //                    return true;
  271. //            }
  272. //            else if(t.Direction == "down")
  273. //            {
  274. //                if(x - x1 < t.Speed + 32 && y < y1 + 32 && y > y1 -32)
  275. //                    return true;
  276. //            }
  277. //        }
  278. //    }
  279. //    return false;
  280. //}
  281. //each enemy is virtual thread
  282. function startNewEnemy(e)
  283. {
  284.     var target = document.getElementById("Enemy").cloneNode(true);
  285.     with (target){
  286.         var type = (e.Type=="heavy")?"heavy":(e.Type=="normal"?"normal":"light");
  287.         id=e.ID;style.display="block";style.zIndex=e.ID + 5000;style.position="absolute";style.posLeft=e.X;style.posTop=e.Y;style.width=32;style.height=32;innerHTML="<img src=/"images/" + type + "_" + e.Direction +  ".png/" width=/"32/" height=/"32/" />";
  288.     }
  289.     document.body.insertBefore(target,document.body.lastChild);
  290.     var parameter = {target:target,e:e}
  291.     parameter.timer = setInterval(EnemyMove,1,parameter);
  292. }
  293. function EnemyMove(parameter)
  294. {
  295.     if(statePlaying == "pause" || statePlaying == "failed")
  296.         return;
  297.     with(parameter)
  298.     {
  299.         var y = (document.getElementById(target.id).style.posLeft - (document.getElementById(target.id).style.posLeft%16)) / 16;
  300.         var x = (document.getElementById(target.id).style.posTop - (document.getElementById(target.id).style.posTop%16)) / 16;
  301.         var y1 = document.getElementById(target.id).style.posLeft%16;
  302.         var x1 = document.getElementById(target.id).style.posTop%16;
  303.         if(e.Direction == "left")
  304.         {
  305. //            if(HitTank(e))
  306. //            {
  307. //                changeDirection(target, e, direction[parseInt(4*Math.random())]);
  308. //            }
  309. //            else 
  310.             if(y > 0 && x1 == 0 && map[x][y - 1].Cross != 1 && map[x + 1][y - 1].Cross != 1)
  311.             {
  312.                document.getElementById(target.id).style.posLeft -parseInt(e.Speed, 10); 
  313.             }
  314.             else if(y > 0 && x != 0 && map[x][y - 1].Cross != 1 && map[x + 1][y - 1].Cross != 1 && map[x + 2][y - 1].Cross != 1)
  315.             {
  316.                 document.getElementById(target.id).style.posLeft -parseInt(e.Speed, 10); 
  317.             }
  318.             else if(y1 > 0)
  319.             {
  320.                 document.getElementById(target.id).style.posLeft -parseInt(e.Speed, 10); 
  321.             }
  322.             else if(y == 0 && document.getElementById(target.id).style.posLeft > 0)
  323.             {
  324.                 document.getElementById(target.id).style.posLeft -parseInt(e.Speed, 10); 
  325.             }
  326.             else
  327.             {
  328.                 //fire or change direction
  329.                 if((parseInt(100*Math.random()))%100 < 30)
  330.                 {
  331.                     changeDirection(target, e, direction[parseInt(4*Math.random())]);
  332.                 }
  333.                 else
  334.                 {
  335.                     fire(e, "enemy");
  336.                 } 
  337.             }
  338.         }
  339.         else if(e.Direction == "right")
  340.         {
  341. //            if(HitTank(e))
  342. //            {
  343. //                changeDirection(target, e, direction[parseInt(4*Math.random())]);
  344. //            }
  345. //            else 
  346.             if(y < (count-1)*2 && x1 == 0 && map[x][y + 2].Cross != 1 && map[x + 1][y + 2].Cross != 1)
  347.             {
  348.                document.getElementById(target.id).style.posLeft += parseInt(e.Speed, 10);    
  349.             }
  350.             else if(y < (count-1)*2 && x1 != 0 && map[x][y + 2].Cross != 1 && map[x + 1][y + 2].Cross != 1 && map[x + 2][y + 2].Cross != 1)
  351.             {
  352.                document.getElementById(target.id).style.posLeft += parseInt(e.Speed, 10);    
  353.             }
  354.             else if(y == (count-1)*2 && document.getElementById(target.id).style.posLeft < 480)
  355.             {
  356.                 document.getElementById(target.id).style.posLeft += parseInt(e.Speed, 10);
  357.             }
  358.             else
  359.             {
  360.                 //fire or change direction
  361.                 if((parseInt(100*Math.random()))%100 < 30)
  362.                 {
  363.                     changeDirection(target, e, direction[parseInt(4*Math.random())]);
  364.                 }
  365.                 else
  366.                 {
  367.                     fire(e, "enemy");
  368.                 } 
  369.             }
  370.         }
  371.         else if(e.Direction == "up")
  372.         {
  373. //            if(HitTank(e))
  374. //            {
  375. //                changeDirection(target, e, direction[parseInt(4*Math.random())]);
  376. //            }
  377. //            else 
  378.             if(x > 0 && y1 == 0 && map[x - 1][y].Cross != 1 && map[x - 1][y + 1].Cross != 1)
  379.             {
  380.                 document.getElementById(target.id).style.posTop -parseInt(e.Speed, 10);
  381.             }
  382.             else if(x > 0 && y1 != 0 && map[x - 1][y].Cross != 1 && map[x - 1][y + 1].Cross != 1 && map[x - 1][y + 2].Cross)
  383.             {
  384.                 document.getElementById(target.id).style.posTop -parseInt(e.Speed, 10);
  385.             }
  386.             else if(x1 > 0)
  387.             {
  388.                 document.getElementById(target.id).style.posTop -parseInt(e.Speed, 10);
  389.             }
  390.             else if(x == 0 && document.getElementById(target.id).style.posTop > 0)
  391.             {
  392.                 document.getElementById(target.id).style.posTop -parseInt(e.Speed, 10);
  393.             }
  394.             else
  395.             {
  396.                 //fire or change direction
  397.                 if((parseInt(100*Math.random()))%100 < 30)
  398.                 {
  399.                     changeDirection(target, e, direction[parseInt(4*Math.random())]);
  400.                 }
  401.                 else
  402.                 {
  403.                     fire(e, "enemy");
  404.                 } 
  405.             }
  406.         }
  407.         else
  408.         {
  409. //            if(HitTank(e))
  410. //            {
  411. //                changeDirection(target, e, direction[parseInt(4*Math.random())]);
  412. //            }
  413. //            else 
  414.             if(x < (count - 1) * 2 && y1 == 0 && map[x + 2][y].Cross != 1 && map[x + 2][y + 1].Cross != 1)
  415.             {
  416.                 document.getElementById(target.id).style.posTop += parseInt(e.Speed, 10);
  417.             }
  418.             else if(x < (count - 1) * 2 && y1 != 0 && map[x + 2][y].Cross != 1 && map[x + 2][y + 1].Cross != 1 && map[x + 2][y + 2].Cross != 1)
  419.             {
  420.                 document.getElementById(target.id).style.posTop += parseInt(e.Speed, 10);
  421.             }
  422.             else if(x == (count -1)*2 && document.getElementById(target.id).style.posTop < 480)
  423.             {
  424.                 document.getElementById(target.id).style.posTop += parseInt(e.Speed, 10);
  425.             }
  426.             else
  427.             {
  428.                 //fire or change direction
  429.                 if((parseInt(100*Math.random()))%100 < 30)
  430.                 {
  431.                     changeDirection(target, e, direction[parseInt(4*Math.random())]);
  432.                 }
  433.                 else
  434.                 {
  435.                     fire(e, "enemy");
  436.                 } 
  437.             }
  438.         }
  439.         if(((new Date()) - e.FireTime) > e.AutoFireSpeed)
  440.         {
  441.             if((parseInt(100*Math.random()))%100 < 30)
  442.             {
  443.                 changeDirection(target, e, direction[parseInt(4*Math.random())]);
  444.                 e.FireTime = new Date();
  445.             }
  446.             else
  447.             {
  448.                 fire(e, "enemy");
  449.             } 
  450.         }
  451.         if(e.HP <= 0)
  452.         {
  453.             clearInterval(timer);
  454.             if(e.Type == "heavy")
  455.             {
  456.                 document.getElementById("heavyEnemy").innerHTML = parseInt(document.getElementById("heavyEnemy").innerHTML, 10) - 1;
  457.             }
  458.             else if(e.Type == "normal")
  459.             {
  460.                 document.getElementById("normalEnemy").innerHTML = parseInt(document.getElementById("normalEnemy").innerHTML, 10) - 1;
  461.             }
  462.             else if(e.Type == "light")
  463.             {
  464.                 document.getElementById("lightEnemy").innerHTML = parseInt(document.getElementById("lightEnemy").innerHTML, 10) - 1;
  465.             }
  466.             document.getElementById("enemyTotalCount").innerHTML = parseInt(document.getElementById("enemyTotalCount").innerHTML, 10) - 1;
  467.             currentEnemyItems.RemoveEnemy(e);
  468.             currentEnemyCount --;
  469.             target.innerHTML="<img src=/"images/explode.png/" width=/"32/" height=/"32/" />";
  470.             setTimeout(function(elm){document.body.removeChild(elm);},100,target);
  471.         }
  472.     }
  473. }
  474. function startNewPlayer(p)
  475. {
  476.     var parameter = {target:p}
  477.     parameter.timer = setInterval(PlayerMove,1,parameter);
  478. }
  479. function PlayerMove(parameter)
  480. {
  481.     if(player.HP <= 0)
  482.     {
  483.         with(parameter)
  484.         {
  485.             document.getElementById(player.ID).innerHTML="<img src=/"images/explode.png/" width=/"32/" height=/"32/" />";
  486.             clearInterval(timer);
  487.             player.Life --;
  488.             document.getElementById("playerLife").innerHTML = player.Life;
  489.             setTimeout(function(){
  490.                         if(player.Life > 0)
  491.                         {
  492.                             document.getElementById(player.ID).style.posLeft = 192;
  493.                             document.getElementById(player.ID).style.posTop = 480;
  494.                             document.getElementById(player.ID).innerHTML="<img src=/"images/player_up.png/" width=/"32/" height=/"32/" />";
  495.                             player.Direction = "up";
  496.                             player.HP = 1;
  497.                             startNewPlayer(player);
  498.                         }
  499.                         else
  500.                         {
  501.                             statePlaying="failed";
  502.                             document.getElementById("gameover").style.display = "block"
  503.                             with(parameter)
  504.                             {
  505.                                 clearInterval(timer);
  506.                                 setTimeout("",1,target);
  507.                             }
  508.                         }},100,"");
  509.         }
  510.     }
  511.     if(!newkey)
  512.         return;
  513.     newkey = false;
  514.     var y = (document.getElementById(player.ID).style.posLeft - (document.getElementById(player.ID).style.posLeft%16)) / 16;
  515.     var x = (document.getElementById(player.ID).style.posTop - (document.getElementById(player.ID).style.posTop%16)) / 16;
  516.     var y1 = document.getElementById(player.ID).style.posLeft%16;
  517.     var x1 = document.getElementById(player.ID).style.posTop%16;
  518.     switch(kc)
  519.     {
  520.         case 37:
  521.             if(player.Direction == "left")
  522.             {
  523.                 
  524.                 if(y > 0 && x1 == 0 && map[x][y - 1].Cross != 1 && map[x + 1][y - 1].Cross != 1)
  525.                 {
  526.                    document.getElementById(player.ID).style.posLeft -parseInt(player.Speed, 10); 
  527.                 }
  528.                 else if(y > 0 && x != 0 && map[x][y - 1].Cross != 1 && map[x + 1][y - 1].Cross != 1 && map[x + 2][y - 1].Cross != 1)
  529.                 {
  530.                     document.getElementById(player.ID).style.posLeft -parseInt(player.Speed, 10); 
  531.                 }
  532.                 else if(y1 > 0)
  533.                 {
  534.                     document.getElementById(player.ID).style.posLeft -parseInt(player.Speed, 10); 
  535.                 }
  536.                 else if(y == 0 && document.getElementById(player.ID).style.posLeft > 0)
  537.                 {
  538.                     document.getElementById(player.ID).style.posLeft -parseInt(player.Speed, 10); 
  539.                 }
  540. //                PlaySound("play","playerMove");
  541.             }
  542.             else
  543.             {
  544.                 document.getElementById(player.ID).innerHTML = document.getElementById(player.ID).innerHTML.replace(player.Direction, "left");
  545.                 player.Direction = "left";
  546.             }
  547.             break;
  548.         case 39:
  549.             if(player.Direction == "right")
  550.             {
  551.                 if(y < (count-1)*2 && x1 == 0 && map[x][y + 2].Cross != 1 && map[x + 1][y + 2].Cross != 1)
  552.                 {
  553.                    document.getElementById(player.ID).style.posLeft += parseInt(player.Speed, 10);    
  554.                 }
  555.                 else if(y < (count-1)*2 && x1 != 0 && map[x][y + 2].Cross != 1 && map[x + 1][y + 2].Cross != 1 && map[x + 2][y + 2].Cross != 1)
  556.                 {
  557.                    document.getElementById(player.ID).style.posLeft += parseInt(player.Speed, 10);    
  558.                 }
  559.                 else if(y == (count-1)*2 && document.getElementById(player.ID).style.posLeft < 480)
  560.                 {
  561.                     document.getElementById(player.ID).style.posLeft += parseInt(player.Speed, 10);
  562.                 }
  563. //                PlaySound("play","playerMove");
  564.             }
  565.             else
  566.             {
  567.                 document.getElementById(player.ID).innerHTML = document.getElementById(player.ID).innerHTML.replace(player.Direction, "right");
  568.                 player.Direction = "right";
  569.                 
  570.             }
  571.             break;
  572.         case 38:
  573.             if(player.Direction == "up")
  574.             {
  575.                 if(x > 0 && y1 == 0 && map[x - 1][y].Cross != 1 && map[x - 1][y + 1].Cross != 1)
  576.                 {
  577.                     document.getElementById(player.ID).style.posTop -parseInt(player.Speed, 10);
  578.                 }
  579.                 else if(x > 0 && y1 != 0 && map[x - 1][y].Cross != 1 && map[x - 1][y + 1].Cross != 1 && map[x - 1][y + 2].Cross)
  580.                 {
  581.                     document.getElementById(player.ID).style.posTop -parseInt(player.Speed, 10);
  582.                 }
  583.                 else if(x1 > 0)
  584.                 {
  585.                     document.getElementById(player.ID).style.posTop -parseInt(player.Speed, 10);
  586.                 }
  587.                 else if(x == 0 && document.getElementById(player.ID).style.posTop > 0)
  588.                 {
  589.                     document.getElementById(player.ID).style.posTop -parseInt(player.Speed, 10);
  590.                 }
  591. //                PlaySound("play","playerMove");
  592.             }
  593.             else
  594.             {
  595.                 document.getElementById(player.ID).innerHTML = document.getElementById(player.ID).innerHTML.replace(player.Direction, "up");
  596.                 player.Direction = "up";
  597.                 
  598.             }
  599.             break;
  600.         case 40:
  601.             if(player.Direction == "down")
  602.             {
  603.                 if(x < (count - 1) * 2 && y1 == 0 && map[x + 2][y].Cross != 1 && map[x + 2][y + 1].Cross != 1)
  604.                 {
  605.                     document.getElementById(player.ID).style.posTop += parseInt(player.Speed, 10);
  606.                 }
  607.                 else if(x < (count - 1) * 2 && y1 != 0 && map[x + 2][y].Cross != 1 && map[x + 2][y + 1].Cross != 1 && map[x + 2][y + 2].Cross != 1)
  608.                 {
  609.                     document.getElementById(player.ID).style.posTop += parseInt(player.Speed, 10);
  610.                 }
  611.                 else if(x == (count -1)*2 && document.getElementById(player.ID).style.posTop < 480)
  612.                 {
  613.                     document.getElementById(player.ID).style.posTop += parseInt(player.Speed, 10);
  614.                 }
  615. //                PlaySound("play","playerMove");
  616.             }
  617.             else
  618.             {
  619.                 document.getElementById(player.ID).innerHTML = document.getElementById(player.ID).innerHTML.replace(player.Direction, "down");
  620.                 player.Direction = "down";
  621.             }
  622.             break;
  623.         case 32:
  624.             {
  625.                 fire(player, "player");
  626.             }
  627.             break;
  628.     }
  629.     
  630. }
  631. function startNewCannonBall(c){
  632.     var target = document.getElementById("CannonBall").cloneNode(true);
  633.     with (target){
  634.         id="cannon_" + c.ID;style.display="block";style.zIndex=c.ID + 20000;style.position="absolute";style.posLeft=c.X;style.posTop=c.Y;style.width=8;style.height=8;innerHTML="<img src=/"images/cannonball_" + c.Direction +  ".png/" width=/"8/" height=/"8/" />";
  635.     }
  636.     document.body.insertBefore(target,document.body.lastChild);
  637.     var parameter = {target:target,c:c}
  638.     parameter.timer = setInterval(CannonBallMove,1,parameter);
  639. }
  640. function  CannonBallMove(parameter){
  641.     if(statePlaying == "pause" || statePlaying == "failed")
  642.         return;
  643.     with (parameter){
  644.         switch(c.Direction)
  645.         {
  646.             case "up":
  647.             target.style.posTop -c.Speed;
  648.             break;
  649.             case "down":
  650.             target.style.posTop += c.Speed;
  651.             break;
  652.             case "left":
  653.             target.style.posLeft -c.Speed;
  654.             break;
  655.             case "right":
  656.             target.style.posLeft += c.Speed;
  657.             break;    
  658.         }
  659.         Hit(c);
  660.         if (target.style.posLeft > 512 || target.style.posTop > 512 || target.style.posLeft < -8 || target.style.posTop < -8 || !c.Active){
  661.             clearInterval(timer);
  662.             target.innerHTML="<img src=/"images/explode.png/" width=/"8/" height=/"8/" />";
  663.             setTimeout(function(elm){document.body.removeChild(elm)},100,target);
  664.         }
  665.     }
  666. }
  667. function Graphics(parent)
  668. {
  669.     this.P = parent;
  670.     this.HTML = "";
  671.     this.DrawImage = function(id,imgSrc, x, y, w, h,z,a)
  672.     {
  673.         this.HTML += '<div id="'+ id + '" style="z-index:' + z + ';position:absolute;'+
  674.             'left:' + x + 'px;'+
  675.             'top:' + y + 'px;'+
  676.             (w? ('width:' +  w + 'px;') : '') +
  677.             (h? ('height:' + h + 'px;'):'')+'">'+
  678.             '<img src="' + imgSrc +'"'+ (w ? (' width="' + w + '"'):'')+ (h ? (' height="' + h + '"'):'') + ('alt=' + y/16 + ':' +  x/16 + '') + ' />'+
  679.             '<//div>';
  680.     };
  681.     //背景图片擦除
  682.     this.Earse = function(id, imgSrc,w, h, z)
  683.     {   
  684.         document.getElementById(id).style.zIndex = z;
  685.         document.getElementById(id).innerHTML ='<img src="' + imgSrc +'"'+ (w ? (' width="' + w + '"'):'')+ (h ? (' height="' + h + '"'):'') + ' />';
  686.         
  687.     };
  688.     this.Paint = function()
  689.     {
  690.         thisthis.P.innerHTML = this.HTML;
  691.     };
  692. }
  693. function MapItem(type, src, row, col, cross,r)
  694. {
  695.     this.ID = objectid ++;
  696.     this.Type = type;
  697.     this.Src = src;
  698.     this.Row = row;
  699.     this.Col = col;
  700.     this.Cross = cross;
  701.     this.Recovery = r;
  702. }
  703. function Barrier(name, type, recovery, cross, src)
  704. {
  705.     this.ID = objectid ++;
  706.     this.Name = name;
  707.     this.Type = type;
  708.     this.Recovery = recovery;
  709.     this.Cross = cross;
  710.     this.Src = src;
  711. }
  712. function Enemy(name, src, speed, power, hp, t, d)
  713. {
  714.     this.ID = objectid ++;
  715.     this.Name = name;
  716.     this.Src = src;
  717.     this.Speed = speed;
  718.     this.Power = power;
  719.     this.HP = hp;
  720.     tthis.Type = t;
  721.     this.Direction = d;
  722.     this.X = 0;
  723.     this.Y = 0;
  724.     this.FireSpeed = 400;
  725.     this.AutoFireSpeed = 2000;
  726.     this.FireTime = new Date();
  727. }
  728. function Player(name, src, speed, power, hp, life)
  729. {
  730.     this.ID = objectid ++;
  731.     this.Name = name;
  732.     this.Src = src;
  733.     this.Speed = speed;
  734.     this.Power = power;
  735.     this.HP = hp;
  736.     this.Life = life;
  737.     this.Direction = "";
  738.     this.X = 0;
  739.     this.Y = 0;
  740.     this.FireSpeed = 400;
  741.     this.FireTime = new Date();
  742. }
  743. function Cannonball(speed,src,d,p,o,x,y)
  744. {
  745.     this.ID = objectid ++;
  746.     this.Speed = speed;
  747.     this.Src = src;
  748.     this.Direction = d;
  749.     this.Power = p;
  750.     this.Owner = o;
  751.     this.X = x;
  752.     this.Y = y;
  753.     this.Active = true;
  754. }
  755. function OtherItem(name, src)
  756. {
  757.     this.ID = objectid ++;
  758.     this.Name = name;
  759.     this.Src = src;
  760. function BarrierList()
  761. {
  762.     this.Barriers = new Array();    
  763.     this.AddBarrier = function(barrier)
  764.     {
  765.         this.Barriers.push(barrier);
  766.     };
  767. }
  768. function EnemyList()
  769. {
  770.     this.Enemys = new Array();
  771.     this.AddEnemy = function(enemy)
  772.     {
  773.         this.Enemys.push(enemy);
  774.     };
  775.     this.RemoveEnemy = function(enemy)
  776.     {
  777.         var newnewEnemys = new Array();
  778.         for(var i = 0; i < this.Enemys.length; i ++)
  779.         {
  780.             if(enemy.ID ==  this.Enemys[i].ID)
  781.             {
  782.                 continue;
  783.             }
  784.             newEnemys.push(this.Enemys[i]);
  785.         }
  786.         this.Enemys = newEnemys;
  787.     };
  788. }
  789. function setBase(src, type, cross,recovery, size)
  790. {
  791.     tankDraw.Earse(map[31][14].ID, src, size, size, map[31][14].ID);
  792.     tankDraw.Earse(map[30][14].ID, src, size, size, map[30][14].ID);
  793.     tankDraw.Earse(map[29][14].ID, src, size, size, map[29][14].ID);
  794.     tankDraw.Earse(map[29][15].ID, src, size, size, map[29][15].ID);
  795.     tankDraw.Earse(map[29][16].ID, src, size, size, map[29][16].ID);
  796.     tankDraw.Earse(map[29][17].ID, src, size, size, map[29][17].ID);
  797.     tankDraw.Earse(map[30][17].ID, src, size, size, map[30][17].ID);
  798.     tankDraw.Earse(map[31][17].ID, src, size, size, map[31][17].ID);
  799.     
  800.     
  801.     map[31][14].Type = type;
  802.     map[31][14].Cross = cross;
  803.     map[31][14].Recovery = recovery;
  804.     map[30][14].Type = type;
  805.     map[30][14].Cross = cross;
  806.     map[30][14].Recovery = recovery;
  807.     map[29][14].Type = type;
  808.     map[29][14].Cross = cross;
  809.     map[29][14].Recovery = recovery;
  810.     map[29][15].Type = type;
  811.     map[29][15].Cross = cross;
  812.     map[29][15].Recovery = recovery;
  813.     map[29][16].Type = type;
  814.     map[29][16].Cross = cross;
  815.     map[29][16].Recovery = recovery;
  816.     map[29][17].Type = type;
  817.     map[29][17].Cross = cross;
  818.     map[29][17].Recovery = recovery;
  819.     map[31][17].Type = type;
  820.     map[31][17].Cross = cross;
  821.     map[31][17].Recovery = recovery;
  822.     map[30][17].Type = type;
  823.     map[30][17].Cross = cross;
  824.     map[30][17].Recovery = recovery;
  825. }
  826. function Tank()
  827. {
  828.     xmlDoc = null;
  829.     barrierItems = new BarrierList();
  830.     size = null;
  831.     bgColor = null;
  832.     count = null;
  833.     
  834.     
  835.     LoadValueIE = function()
  836.     {
  837.         if(xmlDoc != null)
  838.         {
  839.             //栅栏类型,配置文件按type排序
  840.             var barrier = xmlDoc.selectNodes("//TankConfig/Barrier/BarrierItem");
  841.             for(var i = 0; i < barrier.length; i ++)
  842.             {
  843.                 barrierItems.AddBarrier(new Barrier(barrier.item(i).attributes(0).value, barrier.item(i).attributes(1).value, barrier.item(i).attributes(2).value, barrier.item(i).attributes(3).value, barrier.item(i).attributes(4).value));
  844.             }
  845.             //敌人配置
  846.             var enemys = xmlDoc.selectNodes("//TankConfig/Enemy/EnemyItem");
  847.             //重型数量
  848.             var heavy = parseInt(enemys.item(0).attributes(1).value, 10);
  849.             document.getElementById("heavyEnemy").innerHTML = heavy;
  850.             //一般
  851.             var normal = parseInt(enemys.item(1).attributes(1).value, 10);
  852.             document.getElementById("normalEnemy").innerHTML = normal;
  853.             //轻型
  854.             var light = parseInt(enemys.item(2).attributes(1).value, 10);
  855.             document.getElementById("lightEnemy").innerHTML = light;
  856.             var total = heavy + normal + light;
  857.             document.getElementById("enemyTotalCount").innerHTML = total;
  858.             //打乱出场顺序
  859.             var enemysarray = new Array(total);
  860.             for(var i = 0; i < total; i ++)
  861.             {
  862.                 enemysarray[i] = i;
  863.             }
  864.             leftEnemyCount = total;
  865.             maxEnemyCount = total;
  866.             for(var i = 0; i < total; i ++)
  867.             {
  868.                 var j = Math.floor(((Math.random()*total)) % total);
  869.                 var temp = enemysarray[i];
  870.                 enemysarray[i] = enemysarray[j];
  871.                 enemysarray[j] = temp; 
  872.                 
  873.             }
  874.             for(var i = 0; i < total; i ++)
  875.             {
  876.                 if(enemysarray[i] < heavy)
  877.                     enemyItems.AddEnemy(new Enemy(enemys.item(0).attributes(0).value, enemys.item(0).attributes(2).value.replace("heavy","heavy_down"), enemys.item(0).attributes(3).value, enemys.item(0).attributes(4).value, enemys.item(0).attributes(5).value,"heavy", "down"));
  878.                 else if(enemysarray[i] < heavy + normal)
  879.                     enemyItems.AddEnemy(new Enemy(enemys.item(1).attributes(0).value, enemys.item(1).attributes(2).value.replace("normal","normal_down"), enemys.item(1).attributes(3).value, enemys.item(1).attributes(4).value, enemys.item(1).attributes(5).value, "normal", "down"));
  880.                 else if(enemysarray[i] < total)
  881.                     enemyItems.AddEnemy(new Enemy(enemys.item(2).attributes(0).value, enemys.item(2).attributes(2).value.replace("light","light_down"), enemys.item(2).attributes(3).value, enemys.item(2).attributes(4).value, enemys.item(2).attributes(5).value, "light", "down"));
  882.             }
  883.             //玩家
  884.             var players =  xmlDoc.selectNodes("//TankConfig/Player");
  885.             player = new Player(players.item(0).attributes(0).value, players.item(0).attributes(1).value, players.item(0).attributes(2).value, players.item(0).attributes(3).value, players.item(0).attributes(4).value, players.item(0).attributes(5).value);
  886.             document.getElementById("playerLife").innerHTML = player.Life;  
  887.             //地图
  888.             var maps = xmlDoc.selectNodes("//TankConfig/Map");
  889.             size = parseInt(maps.item(0).attributes(0).value, 10);
  890.             bgColor = maps.item(0).attributes(1).value;
  891.             count = parseInt(maps.item(0).attributes(2).value, 10);
  892.             map = new Array(count * 2);
  893.             for(var i = 0; i < count * 2; i ++)
  894.             {
  895.                 map[i] = new Array(count * 2);
  896.             }
  897.             
  898.             var rows = xmlDoc.selectNodes("//TankConfig/Map/Rows");
  899.             for(var i = 0; i < rows.length; i ++)
  900.             {
  901.                 var rowNumber = parseInt(rows.item(i).attributes(0).value, 10);
  902.                 for(var j = 0; j < rows.item(i).childNodes.length; j ++)
  903.                 {
  904.                     var colNumber = parseInt(rows.item(i).childNodes.item(j).attributes(0).value, 10);
  905.                     var type = parseInt(rows.item(i).childNodes.item(j).attributes(1).value, 10);
  906.                     var cross = barrierItems.Barriers[parseInt(rows.item(i).childNodes.item(j).attributes(1).value, 10)].Cross;
  907.                     var r = barrierItems.Barriers[parseInt(rows.item(i).childNodes.item(j).attributes(1).value, 10)].Recovery;
  908.                     map[rowNumber*2][colNumber*2] = new MapItem(type, barrierItems.Barriers[type].Src, rowNumber, colNumber, cross,r);
  909.                     map[rowNumber*2 + 1][colNumber*2] = new MapItem(type, barrierItems.Barriers[type].Src, rowNumber, colNumber, cross,r);
  910.                     map[rowNumber*2][colNumber*2 + 1] = new MapItem(type, barrierItems.Barriers[type].Src, rowNumber, colNumber, cross,r);
  911.                     map[rowNumber*2 + 1][colNumber*2 + 1] = new MapItem(type, barrierItems.Barriers[type].Src, rowNumber, colNumber, cross,r);
  912.                 }
  913.             }
  914.             
  915.         }
  916.         else
  917.         {
  918.             alert("请先导入配置文件");
  919.         }
  920.     };
  921.     LoadValueFF = function()
  922.     {
  923.         
  924.     };
  925.     InitMap = function()
  926.     {
  927.         size /= 2;
  928.         tankDraw = new Graphics(document.getElementById("Tank"));
  929.         for(var i = 0; i < count; i ++)
  930.         {
  931.             for(var j = 0; j < count ; j ++)
  932.             {
  933.                 if(map[i*2][j*2].Type == 3)
  934.                 {
  935.                     tankDraw.DrawImage(map[i*2][j*2].ID, map[i*2][j*2].Src, j*2 * size, i*2 * size, size, size, map[i*2][j*2].ID + 10000);
  936.                     tankDraw.DrawImage(map[i*2][j*2 + 1].ID, map[i*2][j*2 + 1].Src, (j*2 + 1) * size, i*2 * size, size, size, map[i*2][j*2 + 1].ID + 10000);
  937.                     tankDraw.DrawImage(map[i*2 + 1][j*2].ID, map[i*2][j*2].Src, j*2 * size, (i*2 + 1) * size, size, size, map[i*2 + 1][j*2].ID + 10000);
  938.                     tankDraw.DrawImage(map[i*2 + 1][j*2 + 1].ID, map[i*2][j*2].Src, (j*2 + 1) * size, (i*2 + 1) * size, size, size, map[i*2 + 1][j*2 + 1].ID + 10000);
  939.                 }
  940.                 else
  941.                 {
  942.                     tankDraw.DrawImage(map[i*2][j*2].ID, map[i*2][j*2].Src, j*2 * size, i*2 * size, size, size, map[i*2][j*2].ID);
  943.                     tankDraw.DrawImage(map[i*2][j*2 + 1].ID, map[i*2][j*2 + 1].Src, (j*2 + 1) * size, i*2 * size, size, size, map[i*2][j*2 + 1].ID);
  944.                     tankDraw.DrawImage(map[i*2 + 1][j*2].ID, map[i*2][j*2].Src, j*2 * size, (i*2 + 1) * size, size, size, map[i*2 + 1][j*2].ID);
  945.                     tankDraw.DrawImage(map[i*2 + 1][j*2 + 1].ID, map[i*2][j*2].Src, (j*2 + 1) * size, (i*2 + 1) * size, size, size, map[i*2 + 1][j*2 + 1].ID);
  946.                 }
  947.                 
  948.             }
  949.         }
  950.         tankDraw.DrawImage(15000, "images/basecamp.png", 15*16, 30*16, 32, 32, 15000);
  951.         map[30][15].Cross = 1;
  952.         map[30][16].Cross = 1;
  953.         map[31][15].Cross = 1;
  954.         map[31][16].Cross = 1;
  955.         tankDraw.DrawImage(player.ID, player.Src.replace("player","player_up"), 12 * size, 30 * size, size*2, size*2,player.ID + 3000);
  956.         tankDraw.Paint();
  957.         //擦除enemy起始位置
  958.         var i = 0;
  959.         var j = 0;
  960.         tankDraw.Earse(map[i][j].ID, "images/flat.png", size, size, map[i][j].ID);
  961.         tankDraw.Earse(map[i + 1][j].ID, "images/flat.png",  size, size, map[i][j + 1].ID);
  962.         tankDraw.Earse(map[i + 1][j].ID, "images/flat.png", size, size, map[i + 1][j].ID);
  963.         tankDraw.Earse(map[i + 1][j + 1].ID, "images/flat.png", size, size, map[i + 1][j + 1].ID);
  964.         map[i][j].Cross = 0;
  965.         map[i + 1][j].Cross = 0;
  966.         map[i][j + 1].Cross = 0;
  967.         map[i + 1][j + 1].Cross = 0;
  968.         map[i][j].Type = 0;
  969.         map[i + 1][j].Type = 0;
  970.         map[i][j + 1].Type = 0;
  971.         map[i + 1][j + 1].Type = 0;
  972.         map[i][j].Recovery = 0;
  973.         map[i + 1][j].Recovery = 0;
  974.         map[i][j + 1].Recovery = 0;
  975.         map[i + 1][j + 1].Recovery = 0;
  976.         i = 0;
  977.         j = 15;
  978.         tankDraw.Earse(map[i][j].ID, "images/flat.png", size, size, map[i][j].ID);
  979.         tankDraw.Earse(map[i + 1][j].ID, "images/flat.png",  size, size, map[i][j + 1].ID);
  980.         tankDraw.Earse(map[i + 1][j].ID, "images/flat.png", size, size, map[i + 1][j].ID);
  981.         tankDraw.Earse(map[i + 1][j + 1].ID, "images/flat.png", size, size, map[i + 1][j + 1].ID);
  982.         map[i][j].Cross = 0;
  983.         map[i + 1][j].Cross = 0;
  984.         map[i][j + 1].Cross = 0;
  985.         map[i + 1][j + 1].Cross = 0;
  986.         map[i][j].Type = 0;
  987.         map[i + 1][j].Type = 0;
  988.         map[i][j + 1].Type = 0;
  989.         map[i + 1][j + 1].Type = 0;
  990.         map[i][j].Recovery = 0;
  991.         map[i + 1][j].Recovery = 0;
  992.         map[i][j + 1].Recovery = 0;
  993.         map[i + 1][j + 1].Recovery = 0;
  994.         i = 0;
  995.         j = 30;
  996.         tankDraw.Earse(map[i][j].ID, "images/flat.png", size, size, map[i][j].ID);
  997.         tankDraw.Earse(map[i + 1][j].ID, "images/flat.png",  size, size, map[i][j + 1].ID);
  998.         tankDraw.Earse(map[i + 1][j].ID, "images/flat.png", size, size, map[i + 1][j].ID);
  999.         tankDraw.Earse(map[i + 1][j + 1].ID, "images/flat.png", size, size, map[i + 1][j + 1].ID);
  1000.         map[i][j].Cross = 0;
  1001.         map[i + 1][j].Cross = 0;
  1002.         map[i][j + 1].Cross = 0;
  1003.         map[i + 1][j + 1].Cross = 0;
  1004.         map[i][j].Type = 0;
  1005.         map[i + 1][j].Type = 0;
  1006.         map[i][j + 1].Type = 0;
  1007.         map[i + 1][j + 1].Type = 0;
  1008.         map[i][j].Recovery = 0;
  1009.         map[i + 1][j].Recovery = 0;
  1010.         map[i][j + 1].Recovery = 0;
  1011.         map[i + 1][j + 1].Recovery = 0;
  1012.         
  1013.         //player
  1014.         i = 30;
  1015.         j = 12;
  1016.         tankDraw.Earse(map[i][j].ID, "images/flat.png", size, size, map[i][j].ID);
  1017.         tankDraw.Earse(map[i + 1][j].ID, "images/flat.png",  size, size, map[i][j + 1].ID);
  1018.         tankDraw.Earse(map[i + 1][j].ID, "images/flat.png", size, size, map[i + 1][j].ID);
  1019.         tankDraw.Earse(map[i + 1][j + 1].ID, "images/flat.png", size, size, map[i + 1][j + 1].ID);
  1020.         map[i][j].Cross = 0;
  1021.         map[i + 1][j].Cross = 0;
  1022.         map[i][j + 1].Cross = 0;
  1023.         map[i + 1][j + 1].Cross = 0;
  1024.         map[i][j].Type = 0;
  1025.         map[i + 1][j].Type = 0;
  1026.         map[i][j + 1].Type = 0;
  1027.         map[i + 1][j + 1].Type = 0;
  1028.         map[i][j].Recovery = 0;
  1029.         map[i + 1][j].Recovery = 0;
  1030.         map[i][j + 1].Recovery = 0;
  1031.         map[i + 1][j + 1].Recovery = 0;
  1032.         
  1033.         //base
  1034.         setBase("images/wall.png", 1, 1, 1,size);
  1035.         size *= 2;
  1036.         
  1037.         
  1038.     };
  1039.     InitPlayer = function()
  1040.     {
  1041.         player.Direction = "up";
  1042.         player.X = 30;
  1043.         player.Y = 12;
  1044.         startNewPlayer(player)
  1045.     };
  1046.     AddEventHandler = function(oTarget, sEventType, fnHandler)
  1047.     {
  1048.         if (oTarget.addEventListener) 
  1049.         {
  1050.             oTarget.addEventListener(sEventType, fnHandler, false);
  1051.         } 
  1052.         else if (oTarget.attachEvent) 
  1053.         {
  1054.             oTarget.attachEvent("on" + sEventType, fnHandler);
  1055.         } 
  1056.         else 
  1057.         {
  1058.             oTarget["on" + sEventType] = fnHandler;
  1059.         }
  1060.     };
  1061.     PlayerKeyHandle = function()
  1062.     {
  1063.         kc = event.keyCode;
  1064.         if(kc == 13)
  1065.         {
  1066.             if(statePlaying == "playing" || statePlaying == "none")
  1067.                 statePlaying = "pause";
  1068.             else if(statePlaying == "pause")
  1069.                 statePlaying = "playing";
  1070.             window.status = statePlaying;
  1071.         }
  1072.         if(statePlaying == "pause" || statePlaying == "failed")
  1073.             return;
  1074.         newkey = true;
  1075.     }
  1076.     this.LoadConfig = function(filename)
  1077.     {
  1078.         if(window.ActiveXObject)
  1079.         {
  1080.             xmlDoc = new ActiveXObject("Microsoft.XMLDOM");
  1081.             xmlDoc.async = "false";
  1082.             xmlDoc.load(filename); 
  1083.             if(xmlDoc.parseError.errorCode !== 0)
  1084.             {
  1085.                 alert("Tank配置文件错误");
  1086.                 return;
  1087.             }
  1088.             else
  1089.             {
  1090.                 new LoadValueIE();
  1091.             }
  1092.         }
  1093.         else if(document.implementation && document.implementation.createDocument)
  1094.         {
  1095.             xmlDoc = document.implementation.createDocument("", "TankConfig", null); 
  1096.             xmlDoc.load(filename);
  1097.             xmlDoc.onLoad =  LoadValueFF;
  1098.         }
  1099.         else
  1100.         {
  1101.             alert("该浏览器目前不支持");
  1102.         }
  1103.     };
  1104.     this.Play = function()
  1105.     {
  1106.         new InitMap();
  1107.         new InitPlayer();
  1108.         AddEventHandler(document, "keydown", PlayerKeyHandle);
  1109.         startEnemyControl();
  1110.     };
  1111. }
  1112. function Hit(c)
  1113. {
  1114.     var target = document.getElementById("cannon_" + c.ID);
  1115.     var y = (target.style.posLeft - (target.style.posLeft%16)) / 16;
  1116.     var x = (target.style.posTop - (target.style.posTop%16)) / 16;
  1117.     var y1 = (target.style.posLeft + 8 - ((target.style.posLeft+8)%16)) / 16;
  1118.     var x1 = (target.style.posTop + 8 - ((target.style.posTop+8)%16)) / 16;
  1119.     if(y<0||x<0||y1<0||x1<0)
  1120.         return;
  1121.     if(y>31||x>31||x1>31||y1>31)
  1122.         return;
  1123.     
  1124.     if((x<=31&&x>=30&&y<=16&&y>=15) || (x1<=31&&x1>=30&&y1<=16&&y1>=15))
  1125.     {
  1126.         document.getElementById(15000).innerHTML = "<img src=/"images/basedestory.png/" width=/"32/" height=/"32/" />";
  1127.         statePlaying="failed";
  1128.         document.getElementById("gameover").style.display = "block";
  1129.     }
  1130.     if(c.Owner == "player")
  1131.     {
  1132.         for(var i = 0; i < currentEnemyItems.Enemys.length; i ++)
  1133.         {
  1134.             var ex1 = document.getElementById(currentEnemyItems.Enemys[i].ID).style.posTop;
  1135.             var ey1 = document.getElementById(currentEnemyItems.Enemys[i].ID).style.posLeft;
  1136.             if(target.style.posLeft > ey1 && target.style.posLeft < ey1 + 32 && target.style.posTop < ex1 + 32 && target.style.posTop > ex1)
  1137.             {
  1138.                 c.Active = false;
  1139.                 currentEnemyItems.Enemys[i].HP = 0;
  1140.                 break;
  1141.             }
  1142.         }
  1143.     }
  1144.     else if(c.Owner == "enemy")
  1145.     {
  1146.         var px1 = document.getElementById(player.ID).style.posTop;
  1147.         var py1 = document.getElementById(player.ID).style.posLeft;
  1148.         if(target.style.posLeft > py1 && target.style.posLeft < py1 + 32 && target.style.posTop < px1 + 32 && target.style.posTop > px1)
  1149.         {
  1150.             c.Active = false;
  1151.             player.HP = 0;
  1152.         }
  1153.     }
  1154.     
  1155.         
  1156.     if(c.Direction == "left")
  1157.     {
  1158.         if(x == x1 && (map[x][y].Type == 1 || map[x][y].Type == 2))
  1159.         {
  1160.             if(c.Power >= map[x][y].Recovery)
  1161.             {
  1162.                 tankDraw.Earse(map[x][y].ID, "images/flat.png", 16, 16, map[x][y].ID);
  1163.                 map[x][y].Cross = 0;
  1164.                 map[x][y].Type = 0;
  1165.                 map[x][y].Recovery = 0;
  1166.             }
  1167.             c.Active = false;
  1168.         }
  1169.         else if(x!=x1 && (map[x][y].Type == 1 || map[x][y].Type == 2) || (map[x1][y].Type == 1 || map[x1][y].Type == 2))
  1170.         {
  1171.             if(c.Power >= map[x][y].Recovery && map[x][y].Recovery != 0)
  1172.             {
  1173.                 tankDraw.Earse(map[x][y].ID, "images/flat.png", 16, 16, map[x][y].ID);
  1174.                 map[x][y].Cross = 0;
  1175.                 map[x][y].Type = 0;
  1176.                 map[x][y].Recovery = 0;
  1177.             }
  1178.             if(c.Power >= map[x1][y].Recovery && map[x1][y].Recovery != 0)
  1179.             {
  1180.                 tankDraw.Earse(map[x1][y].ID, "images/flat.png", 16, 16, map[x1][y].ID);
  1181.                 map[x1][y].Cross = 0;
  1182.                 map[x1][y].Type = 0;
  1183.                 map[x1][y].Recovery = 0;
  1184.             }
  1185.             c.Active = false;
  1186.         }
  1187.     }
  1188.     else if(c.Direction == "right")
  1189.     {
  1190.         if(x == x1 && (map[x1][y1].Type == 1 || map[x1][y1].Type == 2))
  1191.         {
  1192.             if(c.Power >= map[x1][y1].Recovery)
  1193.             {
  1194.                 tankDraw.Earse(map[x1][y1].ID, "images/flat.png", 16, 16, map[x1][y1].ID);
  1195.                 map[x1][y1].Cross = 0;
  1196.                 map[x1][y1].Type = 0;
  1197.                 map[x1][y1].Recovery = 0;
  1198.             }
  1199.             c.Active = false;
  1200.         }
  1201.         else if(x!=x1 && (map[x][y1].Type == 1 || map[x][y1].Type == 2) || (map[x1][y1].Type == 1 || map[x1][y1].Type == 2))
  1202.         {
  1203.             if(c.Power >= map[x][y1].Recovery && map[x][y1].Recovery != 0)
  1204.             {
  1205.                 tankDraw.Earse(map[x][y1].ID, "images/flat.png", 16, 16, map[x][y1].ID);
  1206.                 map[x][y1].Cross = 0;
  1207.                 map[x][y1].Type = 0;
  1208.                 map[x][y1].Recovery = 0;
  1209.             }
  1210.             if(c.Power >= map[x1][y1].Recovery && map[x1][y1].Recovery != 0)
  1211.             {
  1212.                 tankDraw.Earse(map[x1][y1].ID, "images/flat.png", 16, 16, map[x1][y1].ID);
  1213.                 map[x1][y1].Cross = 0;
  1214.                 map[x1][y1].Type = 0;
  1215.                 map[x1][y1].Recovery = 0;
  1216.             }
  1217.             c.Active = false;
  1218.         }
  1219.     }
  1220.     else if(c.Direction == "up")
  1221.     {
  1222.         if(y == y1 && (map[x][y].Type == 1 || map[x][y].Type == 2))
  1223.         {
  1224.             if(c.Power >= map[x][y].Recovery)
  1225.             {
  1226.                 tankDraw.Earse(map[x][y].ID, "images/flat.png", 16, 16, map[x][y].ID);
  1227.                 map[x][y].Cross = 0;
  1228.                 map[x][y].Type = 0;
  1229.                 map[x][y].Recovery = 0;
  1230.             }
  1231.             c.Active = false;
  1232.         }
  1233.         else if(y!=y1 && (map[x][y].Type == 1 || map[x][y].Type == 2 || map[x][y1].Type == 1 || map[x][y1].Type == 2))
  1234.         {
  1235.             if(c.Power >= map[x][y].Recovery && map[x][y].Recovery != 0)
  1236.             {
  1237.                 tankDraw.Earse(map[x][y].ID, "images/flat.png", 16, 16, map[x][y].ID);
  1238.                 map[x][y].Cross = 0;
  1239.                 map[x][y].Type = 0;
  1240.                 map[x][y].Recovery = 0;
  1241.             }
  1242.             if(c.Power >= map[x][y1].Recovery && map[x][y1].Recovery != 0)
  1243.             {
  1244.                 tankDraw.Earse(map[x][y1].ID, "images/flat.png", 16, 16, map[x][y1].ID);
  1245.                 map[x][y1].Cross = 0;
  1246.                 map[x][y1].Type = 0;
  1247.                 map[x][y1].Recovery = 0;
  1248.             }
  1249.             c.Active = false;
  1250.         }
  1251.     }
  1252.     else if(c.Direction == "down")
  1253.     {
  1254.         if(y == y1 && (map[x1][y1].Type == 1 || map[x1][y1].Type == 2))
  1255.         {
  1256.             if(c.Power >= map[x1][y1].Recovery)
  1257.             {
  1258.                 tankDraw.Earse(map[x1][y1].ID, "images/flat.png", 16, 16, map[x1][y1].ID);
  1259.                 map[x1][y1].Cross = 0;
  1260.                 map[x1][y1].Type = 0;
  1261.                 map[x1][y1].Recovery = 0;
  1262.             }
  1263.             c.Active = false;
  1264.         }
  1265.         else if(y!=y1 && (map[x1][y].Type == 1 || map[x1][y].Type == 2 || map[x1][y1].Type == 1 || map[x1][y1].Type == 2))
  1266.         {
  1267.             if(c.Power >= map[x1][y].Recovery && map[x1][y].Recovery != 0)
  1268.             {
  1269.                 tankDraw.Earse(map[x1][y].ID, "images/flat.png", 16, 16, map[x1][y].ID);
  1270.                 map[x1][y].Cross = 0;
  1271.                 map[x1][y].Type = 0;
  1272.                 map[x1][y].Recovery = 0;
  1273.             }
  1274.             if(c.Power >= map[x1][y1].Recovery && map[x1][y1].Recovery != 0)
  1275.             {
  1276.                 tankDraw.Earse(map[x1][y1].ID, "images/flat.png", 16, 16, map[x1][y1].ID);
  1277.                 map[x1][y1].Cross = 0;
  1278.                 map[x1][y1].Type = 0;
  1279.                 map[x1][y1].Recovery = 0;
  1280.             }
  1281.             c.Active = false;
  1282.         }
  1283.     }
  1284.     
  1285. }
  1286. function PlayGame()
  1287. {
  1288.     tank.LoadConfig("tank.xml");
  1289.     tank.Play();
  1290. }                  
  1291. </script>
目前运行比较占cpu,原因是控制enemy的虚拟线程处理比较慢,若想加快速度,可以固定存储所有操作的对象的属性,不要用
document对象来获取,这个可以在下一版优化。:-)
具体源码可以在resource下下载:
http://d.download.csdn.net/down/667431/chenyijiu


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值