jQuery寫的小遊戲

    這些天學習jQuery,寫了一個小遊戲--名字pk。上代碼:

namepk.html:

  1. <html>
  2. <head>
  3.     <title>-----PK-----</title>
  4.     <meta http-equiv="Content-Type" content="text/html;charset=utf-8">  
  5.     <script type='text/javascript' src='jquery-1.2.6.min.js'></script>
  6.     <script type='text/javascript' src='pk.js'></script>
  7. </head>
  8. <body style='background:pink'>
  9.     <center>輸入名字,開始戰鬥</center>
  10.     <div align='center'>
  11.         <fieldset id='bar1' style='float:left;margin:5px;color:blue;text-align:left'></fieldset>
  12.         <fieldset id='bar2' style='float:right;margin:5px;color:blue;text-align:left'></fieldset>
  13.         <table id='state'>
  14.             <tr>
  15.                 <td id='state1'><div id='blood1'></div></td>
  16.                 <td rowspan='2'>VS</td>
  17.                 <td id='state2'><div id='blood2'></div></td>
  18.             </tr>
  19.             <tr>
  20.                 <td><input type='text' style='width:100%; padding:0px; margin:0px'/></td>
  21.                 <td><input type='text' style='width:100%; padding:0px; margin:0px'/></td>
  22.             </tr>
  23.             <tr>
  24.                 <td colspan='3' style='text-align:center'><input type='button' value='GO' /></td>
  25.             </tr>
  26.         </table>
  27.         <p id='battleField'></p>        
  28.     </div>
  29. </body>
  30. </html>

 

pk.js:

  1. var actions = [["踢了""一腳"], ["一腳踹向""的屁股"], ["拿起棒子猛擊""的頭部"],["發出一招六脈神劍,直指""的胸口"],
  2.                 ["抓了一把毒藥向""撒去"], ["使出降龍十八掌,把""嚇的屁滾尿流"], ["對""拳打腳踢"]];
  3. var results = [",昏迷了1秒"",站起來後感到暈乎乎的"",眼淚哇哇的"" "" "" "" "];
  4. var places = ["雪山峯頂""紫禁之巔""少林寺""榕樹下""桃花盛開的地方""萬花叢中""茅廁屋頂之上"];
  5. var who = 0; //who's turn
  6. var warrior1, warrior2;
  7. var w1life, w2life;//初始生命
  8. var timer;//定時器
  9. $(document).ready(function() {  
  10.     $(':button').width(40).css('cursor''hand').bind('click', start);
  11.     $('div:first').wrap('<fieldset style="background:cyan"></fieldset>');   
  12.     $(':text').parent().css({width:'200px',  padding:'0px', margin:'0px'}); 
  13.     $('#state1').css('text-align''right');
  14.     $('#state1, #state2').css({width:'200px', height:'20px', background:'orange'});
  15.     $('#blood1, #blood2').css({right:'0px',position:'relative', width:'100%', height:'100%', background:'red', color:'white'});
  16.     $(this).bind('keydown'function() {if(event.keyCode == 13) $(':button').click()});//綁定回車
  17. });
  18. function start() {
  19.     var w1name= $(':text')[0].value;
  20.     var w2name= $(':text')[1].value;
  21.     var placeIndex = Math.round(Math.random()*(places.length-1));//隨機產生戰鬥地點
  22.     
  23.     if(w1name == "" || w2name == ""return;
  24.     else {
  25.         $('#battleField').empty(); //清空作戰區域
  26.         $(':button').attr('disabled''true').css('cursor''default');//按鈕不可用
  27.         warrior1 = new warrior(w1name, 0, 0, 100);
  28.         warrior2 = new warrior(w2name, 0, 0, 100);//初始化兩個戰士
  29.         setProperty(warrior1);  setProperty(warrior2);//設置屬性        
  30.         w1life = warrior1.life; w2life = warrior2.life;     
  31.         $('#bar1').html('攻擊:'+ warrior1.attack+ '<br/><br/>防禦:'+ warrior1.defence+ '<br/><br/>生命:'+ warrior1.life);
  32.         $('#bar2').html('攻擊:'+ warrior2.attack+ '<br/><br/>防禦:'+ warrior2.defence+ '<br/><br/>生命:'+ warrior2.life);//初始化狀態欄
  33.         $('#blood1, #blood2').css({width:'100%', height:'100%', background:'red', color:'white'}); //初始化血條      
  34.         $('#battleField').append('<h3 color="blue">'+warrior1.name+'、'+ warrior2.name+'決戰'+ places[placeIndex]+ '</h3>');//戰鬥地點
  35.         timer = setInterval(start, 1000);//定時器
  36.     }
  37.     
  38.     function start() {
  39.         fight(warrior1, warrior2);//戰鬥開始
  40.     }
  41.     
  42.     function fight(warrior1, warrior2) {
  43.         var value = "";//傷害值
  44.         var actionIndex = Math.round(Math.random()*(actions.length-1));//隨機產生動作
  45.         var resultIndex = Math.round(Math.random()*(results.length-1));//隨機產生效果         
  46.         
  47.         if(who == 0) {//init
  48.             if(warrior1.attack+ warrior1.defence < warrior2.attack+ warrior2.defence)
  49.                 who = 1;
  50.             else
  51.                 who = 2;
  52.         }   
  53.         if(who == 1) {//輪到1攻擊
  54.             if(warrior1.attack > warrior2.defence) {
  55.                 value = hurtValue(warrior1.attack, warrior2.defence, 3);
  56.                 if(value == 0) value = 1;                   
  57.             }
  58.             else if(warrior1.attack <= warrior2.defence) {
  59.                 value = hurtValue(warrior1.attack, warrior2.defence, 1);
  60.                 if(value == 0) value = 1;
  61.             }
  62.             warrior2.life -= value; //掉血
  63.             
  64.             if(warrior2.life <= 0) warrior2.life = 0;
  65.             $('#blood2').animate({width: warrior2.life/w2life*200}, (value>20?20:value)*50);//掉血動畫
  66.                             
  67.             $('#battleField').append(warrior1.name+ ' '+ actions[actionIndex][0]+ warrior2.name+ ' '
  68.             actions[actionIndex][1]+ ', '+ (isDead(warrior2)?(warrior2.name+ "掛掉了!"):(warrior2.name+ '損失<font color="red">'+ value+ '</font>生命'+results[resultIndex]))+ '<br />');
  69.             
  70.             if(isDead(warrior2)) $(':button').attr('disabled''').css('cursor''hand');
  71.             who = 2;//輪到2攻擊
  72.             return;
  73.         }
  74.         if(who == 2) {//輪到2攻擊
  75.             if(warrior2.attack > warrior1.defence) {
  76.                 value = hurtValue(warrior2.attack, warrior1.defence, 3);
  77.                 if(value == 0) value = 1;
  78.             }
  79.             else if(warrior2.attack <= warrior1.defence) {
  80.                 value = hurtValue(warrior2.attack, warrior1.defence, 1);
  81.                 if(value == 0) value = 1;
  82.             }
  83.             warrior1.life -= value; //掉血
  84.             if(warrior1.life <= 0) warrior1.life = 0;
  85.             $('#blood1').animate({width: warrior1.life/w1life*200,right: '0px'}, (value>20?20:value)*50);
  86.             
  87.             $('#battleField').append(warrior2.name+ ' '+ actions[actionIndex][0]+ warrior1.name+ ' '+
  88.             actions[actionIndex][1]+ ', '+ (isDead(warrior1)?(warrior1.name+ "掛掉了!"):(warrior1.name+ '損失<font color="red">'+ value+ '</font>生命'+ results[resultIndex]))+ '<br />');//戰鬥效果
  89.             
  90.             if(isDead(warrior1)) $(':button').attr('disabled''').css('cursor''hand');
  91.             who = 1;
  92.             return;
  93.         }       
  94.     }
  95.     
  96.     function hurtValue(attack, defence, multiple) {//計算傷害值
  97.         return Math.round(Math.random()*Math.abs(attack - defence)*multiple);
  98.     }
  99.     
  100.     function isDead(warrior) {//是否掛掉
  101.         if(warrior.life <= 0) {
  102.             clearInterval(timer);
  103.             return true;
  104.         }
  105.     }
  106. }   
  107. function warrior(name, attack, defence, life) {//戰士類
  108.     this.name = name;
  109.     this.attack = attack;
  110.     this.defence = defence;
  111.     this.life = life;
  112. }
  113. function setProperty(obj) {//設置屬性
  114.     var warrior = obj;
  115.     var name = $.trim(warrior.name);
  116.     var num = 0;
  117.     
  118.     for(i=0; i<name.length; i++) {
  119.         num += name.charCodeAt(i);
  120.     }   
  121.     warrior.attack = findValidNum((num.toString(2)<<13).toString()).substr(0, 2)==''?findValidNum((num.toString(2)<<12).toString().substr(0, 2)):findValidNum((num.toString(2)<<13).toString()).substr(0, 2);   
  122.     warrior.defence = findValidNum((num.toString(2)<<11).toString()).substr(0, 2)==''?findValidNum((num.toString(2)<<10).toString().substr(0, 2)):findValidNum((num.toString(2)<<11).toString()).substr(0, 2);  
  123.     warrior.life = findValidLife((num.toString(2)<<9).toString()).substr(0, 3)==''?findValidLife((num.toString(2)<<8).toString()).substr(0, 3):findValidLife((num.toString(2)<<9).toString()).substr(0, 3);
  124.     
  125.     function findValidNum(str) {
  126.         if(str == ''return '40'//防止堆棧溢出
  127.         if(str.substr(0,1) == '0' || str.substr(0,1) == '-'|| str.substr(0,1) < '4'
  128.             return findValidNum(str.substring(1, str.length-1));
  129.         return str;
  130.     }
  131.     function findValidLife(str) {
  132.         if(str == ''return '100';
  133.         if(str.substr(0,1) == '0' || str.substr(0,1) == '-' || str.substr(0,1) > '3')   
  134.             return findValidLife(str.substring(1, str.length-1));
  135.         return str;
  136.     }
  137. }

 

jQuery的代碼就不貼了,網上隨便都能搜到。程序寫的很簡單,戰鬥屬性就定義了三個,可玩性不是很高。另外在ie中血條顯示正常,在其他非ie內核瀏覽器中,左邊的血條掉血是從右邊開始的,這點感覺不是很完美。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章