首页 > 语言 > JavaScript > 正文

原生js实现的贪吃蛇网页版游戏完整实例

2024-05-06 16:20:35
字体:
来源:转载
供稿:网友

这篇文章主要介绍了原生js实现的贪吃蛇网页版游戏完整实例,可实现自主选择游戏难度进行贪吃蛇游戏的功能,涉及javascript键盘事件及页面元素的操作技巧,需要的朋友可以参考下

本文实例讲述了原生js实现的贪吃蛇网页版游戏。分享给大家供大家参考。具体实现方法如下:

 

 
  1. <html> 
  2. <head> 
  3. <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 
  4. <title>原生js写的贪吃蛇网页版游戏</title> 
  5. </head> 
  6. <body> 
  7. </body> 
  8. <script>  
  9. Star = { 
  10. init:function(){ 
  11. var bigDiv = this.appendEle(this.addStyle(this.creatEle(), 
  12. {w:'900',h:'600',p:'absolute',t:10,l:500})); 
  13. for(var i = 0; i<600/30;i++){ 
  14. Star.data.arrayAll[i] = []; 
  15. for(var j = 0; j<900/30; j++){ 
  16. div = this.addStyle(this.creatEle(),{w:(!+[1,] ? 30 :28),h:(!+[1,] ? 30 :28),f:'left',border:'1px solid #666'}); 
  17. div.setAttribute('number', i*30+j) 
  18. this.appendEle(div,bigDiv) 
  19. Star.data.arrayAll[i][j] = div; 
  20. bigDiv = this.appendEle(this.addStyle(this.creatEle(), 
  21. {w:'900',h:'600',p:'absolute',t:10,l:500})); 
  22. this.pushEleInSelect(Star.data.arrayAll[9][15],Star.data.arrayAll[9][14],Star.data.arrayAll[9][13]) 
  23. this.keyBoard.apply(this,arguments); 
  24. this.appearPoint(); 
  25. this.leftGo(); 
  26. }, 
  27. appearPoint:function(){ 
  28. var arrayIn = []; 
  29. var number; 
  30. for(var i = 0; i<600; i++){ 
  31. if(!this.hasInArray(Star.data.arrayAll[parseInt(i/30)][i%30].getAttribute('number'),Star.data.arraySelect)){ 
  32. arrayIn.push(Star.data.arrayAll[i]) 
  33. Star.data.foodNumber = number = parseInt(Math.random()*arrayIn.length); 
  34. this.giveColor(number) 
  35. }, 
  36. giveColor:function(number){ 
  37. var div = Star.data.arrayAll[parseInt(number/30)][number%30]; 
  38. Star.timeInterval.timeB = setInterval(function(){ 
  39. if(div.className == 'shanshuo'){ 
  40. div.className = '' 
  41. div.style.backgroundColor = '#fff' 
  42. else
  43. div.className = 'shanshuo'
  44. div.style.backgroundColor = '#f00' 
  45. },500) 
  46. }, 
  47. disappearColor:function(){ 
  48. clearInterval(Star.timeInterval.timeB); 
  49. Star.data.arrayAll[parseInt(Star.data.foodNumber/30)][Star.data.foodNumber%30].style.backgroundColor = '#f00'
  50. }, 
  51. hasInArray:function(number,array){ 
  52. for(var i in array){ 
  53. if(array[i] instanceof Array){ 
  54. if(this.hasInArray(number,array[i])){ 
  55. return true
  56. if(array[i].getAttribute && array[i].getAttribute('number') == number) return true
  57. return false
  58. }, 
  59. keyBoard:function(){ 
  60. var self = this
  61. document.onkeydown = function(e){ 
  62. e = e? e : window.event; 
  63. switch(e.keyCode){ 
  64. case 37: if(Star.keycode == 37 || Star.keycode == 39){return;}; self.leftGo(); break
  65. case 38: if(Star.keycode == 38 || Star.keycode == 40){return;}; self.upGo();break
  66. case 39: if(Star.keycode == 37 || Star.keycode == 39){return;}; self.rightGo();break
  67. case 40: if(Star.keycode == 38 || Star.keycode == 40){return;}; self.downGo();break
  68. }, 
  69. leftGo:function(){ 
  70. var div, number , self = this
  71. Star.keycode = 37; 
  72. clearInterval(Star.timeInterval.timeA) 
  73. Star.timeInterval.timeA = setInterval(function(){ 
  74. number = Star.data.arraySelect[0].getAttribute('number'); 
  75. if(number%30<=0 || self.hasInArray(number-1,Star.data.arraySelect)){ 
  76. self.guanle(); 
  77. else
  78. if(Star.data.foodNumber == number-1){ 
  79. self.pushEleInSelect(Star.data.arrayAll[parseInt(Star.data.foodNumber/30)][Star.data.foodNumber%30]); 
  80. self.disappearColor(); 
  81. self.appearPoint(); 
  82. else
  83. div = Star.data.arraySelect.pop(); 
  84. div.style.background = '#fff'
  85. self.pushEleInSelect(Star.data.arrayAll[parseInt(number/30)][number%30-1]); 
  86. },Star.timeInterval.speed) 
  87. }, 
  88. upGo:function(){ 
  89. var div, number , self = this
  90. Star.keycode = 38; 
  91. clearInterval(Star.timeInterval.timeA) 
  92. Star.timeInterval.timeA = setInterval(function(){ 
  93. number = parseInt(Star.data.arraySelect[0].getAttribute('number')); 
  94. if(parseInt(number/30)<=0 || self.hasInArray(number-30,Star.data.arraySelect)){ 
  95. self.guanle(); 
  96. else
  97. if(Star.data.foodNumber == number-30){ 
  98. self.pushEleInSelect(Star.data.arrayAll[parseInt(Star.data.foodNumber/30)][Star.data.foodNumber%30]); 
  99. self.disappearColor(); 
  100. self.appearPoint(); 
  101. else
  102. div = Star.data.arraySelect.pop(); 
  103. div.style.background = '#fff'
  104. self.pushEleInSelect(Star.data.arrayAll[parseInt(number/30)-1][number%30]); 
  105. },Star.timeInterval.speed) 
  106. }, 
  107. rightGo:function(){ 
  108. var div, number , self = this
  109. Star.keycode = 39; 
  110. clearInterval(Star.timeInterval.timeA) 
  111. Star.timeInterval.timeA = setInterval(function(){ 
  112. number = parseInt(Star.data.arraySelect[0].getAttribute('number')); 
  113. if(parseInt(number%30)>=29 || self.hasInArray(number+1,Star.data.arraySelect)){ 
  114. self.guanle(); 
  115. else
  116. if(Star.data.foodNumber == number+1){ 
  117. self.pushEleInSelect(Star.data.arrayAll[parseInt(Star.data.foodNumber/30)][Star.data.foodNumber%30]); 
  118. self.disappearColor(); 
  119. self.appearPoint(); 
  120. else
  121. div = Star.data.arraySelect.pop(); 
  122. div.style.background = '#fff'
  123. self.pushEleInSelect(Star.data.arrayAll[parseInt(number/30)][number%30+1]); 
  124. },Star.timeInterval.speed) 
  125. }, 
  126. downGo:function(){ 
  127. var div, number , self = this
  128. Star.keycode = 40; 
  129. clearInterval(Star.timeInterval.timeA) 
  130. Star.timeInterval.timeA = setInterval(function(){ 
  131. number = parseInt(Star.data.arraySelect[0].getAttribute('number')); 
  132. if(parseInt(number/30)>=19 || self.hasInArray(number+30,Star.data.arraySelect)){ 
  133. self.guanle(); 
  134. else
  135. if(Star.data.foodNumber == number+30){ 
  136. self.pushEleInSelect(Star.data.arrayAll[parseInt(Star.data.foodNumber/30)][Star.data.foodNumber%30]); 
  137. self.disappearColor(); 
  138. self.appearPoint(); 
  139. else
  140. div = Star.data.arraySelect.pop(); 
  141. div.style.background = '#fff'
  142. self.pushEleInSelect(Star.data.arrayAll[parseInt(number/30)+1][number%30]); 
  143. },Star.timeInterval.speed) 
  144. }, 
  145. guanle:function(){ 
  146. alert('撞墙了,总分:' + (Star.data.arraySelect.length-3) * parseInt(1000 / Star.timeInterval.speed)); 
  147. location.reload(); 
  148. }, 
  149. creatEle:function(tag){ 
  150. var tagName = tag || 'DIV' 
  151. return document.createElement(tagName) 
  152. }, 
  153. appendEle:function(ele,father){ 
  154. var father = father || document.body || document.documentElement 
  155. father.appendChild(ele) 
  156. return ele; 
  157. }, 
  158. addStyle:function(ele,css){ 
  159. for(var i in css){ 
  160. switch(i){ 
  161. case 'b' : ele.style.background = css[i]; break
  162. case 'l' : ele.style.left = css[i]+'px'break
  163. case 'r' : ele.style.right = css[i]+'px'break
  164. case 't' : ele.style.top = css[i]+'px'break
  165. case 'd' : ele.style.down = css[i]+'px'break
  166. case 'p' : ele.style.position = css[i]; break
  167. case 'w' : ele.style.width = css[i]+'px'break
  168. case 'h' : ele.style.height = css[i]+'px'break
  169. case 'f' : ele.style.cssFloat = css[i]; ele.style.styleFloat = css[i]; break
  170. default : ele.style[i] = css[i]; break
  171. return ele; 
  172. }, 
  173. pushEleInSelect:function(){ 
  174. for(var i = 0; i<arguments.length; i++){ 
  175. Star.data.arraySelect = [arguments[i]].concat(Star.data.arraySelect) 
  176. this.addStyle(arguments[i],{b:'#f00'}) 
  177. Star.data={ 
  178. arrayAll : [], 
  179. arraySelect:[], 
  180. newPoint:null
  181. foodNumber:0 
  182. Star.timeInterval={ 
  183. timeA:null
  184. timeB:null 
  185. Star.keycode = 0; 
  186. window.onload = function(){ 
  187. var select = Star.creatEle('select'); 
  188. var optionDefault = Star.creatEle('option'); 
  189. optionDefault.innerHTML = '请选择关卡' 
  190. Star.appendEle(optionDefault,select) 
  191. Star.addStyle(select,{w:200,h:30,p:'absolute',left:'40%',top:'40%'}) 
  192. for(var i = 0 ; i <10 ; i++){ 
  193. var option = Star.creatEle('option'); 
  194. option.innerHTML = '第' + (i+1) + '关' 
  195. Star.appendEle(option,select); 
  196. Star.appendEle(select) 
  197. select.onchange = function(){ 
  198. selectValue = select.options[select.selectedIndex].value || select.options[select.selectedIndex].innerHTML 
  199. var number = selectValue.match(//d+/)[0] 
  200. Star.timeInterval.speed = parseInt(200/number); 
  201. Star.addStyle(select,{display:'none'}); 
  202. Star.init(); 
  203. </script> 
  204. </html> 

希望本文所述对大家的javascript程序设计有所帮助。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

图片精选