javascript版的贪食蛇 |
|
http://myinfo95.class.netbig.com/snake.htm
这个程序也是本人在2000年五月时写的。 许多结构和我写俄罗斯方块时差不多。只要用ie就可以玩了 <html> <head> <title>贪食蛇(lint)</title> <meta http-equiv="Content-Type" content="text/html; charset=gb2312"> <style type="text/css"> <!-- td { font-family: "宋体"; font-size: 11pt} body { font-family: "宋体"; font-size: 11pt} select { font-family: "宋体"; font-size:11pt} A {text-decoration: none; color: #ffffff; font-family: "宋体"; font-size: 11pt} A:hover {text-decoration: underline; color: #FF0000; font-family: "宋体"; font-size: 11pt} --> </style> <Script language="javascript"> var M=15,N=60; var worm,direction=0,n=1,fruit,origin_direction=0; var i=0,j=0,k=0; var img; var stop=0; var score=0,high_score=0; var next_x,next_y; //img=new Array(12); fruit=new Array(2); var back_img,head_up,head_down,head_left,head_right; var turn_up_right,turn_left_down,turn_up_left,turn_right_down,turn_left_up,turn_down_right,turn_down_left,turn_right_up; var body_left,body_right,body_down,body_up; var snake_fruit; var progress=0,fruit_num=1,arrayspeed,speed=500,line=0; var bigarray,go_step=0; bigarray=new Array(M*M); /*for(i=0;i<M*M;i++) bigarray=new Array(2); */ arrayspeed=new Array(500,450,400,350,300,200,150,100,50); //定义背景 back_img=new Image(); //定义果子 snake_fruit=new Image(); //定义拐角图象 turn_up_right=new Image(); turn_left_down=new Image(); turn_up_left=new Image(); turn_right_down=new Image(); turn_left_up=new Image(); turn_down_right=new Image(); turn_down_left=new Image(); turn_right_up=new Image(); head_up=new Image(); head_down=new Image(); head_left=new Image(); head_right=new Image(); //定义身体走向 body_left=new Image(); body_right=new Image(); body_up=new Image(); body_down=new Image(); snake_fruit.src="images/snake11.jpg"; back_img.src="images/snake10.jpg"; turn_up_right.src=turn_left_down.src="images/snake9.jpg"; turn_up_left.src=turn_right_down.src="images/snake8.jpg"; turn_left_up.src=turn_down_right.src="images/snake6.jpg"; turn_down_left.src=turn_right_up.src="images/snake7.jpg"; //定义头向图 head_up.src="images/snake0.jpg"; head_down.src="images/snake1.jpg"; head_left.src="images/snake2.jpg"; head_right.src="images/snake3.jpg"; body_left.src=body_right.src="images/snake5.jpg"; body_down.src=body_up.src="images/snake4.jpg"; /* for(i=0;i<=(M-1)/2;i++) { if(go_step==0) {for(j=i;j<=M-2-i;j++) {bigarray[k][0]=i; bigarray[k][1]=j; k++; } go_step=1; } if(go_step==1) { for(j=i;j<=M-2-i;j++) { bigarray[k][0]=M-1-i; bigarray[k][1]=j; k++; } go_step=2; } if(go_step==2) { for(j=M-2-i;j>0;j--) { bigarray[k][0]=j; bigarray[k][1]=M-1-i; k++; } go_step=3; } if(go_step==3) { for(j=M-2-i;j>0;j--) { bigarray[k][0]=i; bigarray[k][1]=j; k++; } go_step=0; } } */ //定义虫子坐标 worm=new Array(N); for(i=0;i<N;i++) worm[i]=new Array(0,0); //产生一个果子 function bring_fruit() { var i,j; do{ i=Math.floor(Math.random()*15); j=Math.floor(Math.random()*15); } while (touch_self(i,j)); fruit[0]=i; fruit[1]=j; eval("document.box.box"+i+"_"+j+".src=snake_fruit.src"); } //产生一个头 function head() { var i,j; i=Math.floor(Math.random()*15); j=Math.floor(Math.random()*15); n=1; worm[0][0]=i; worm[0][1]=j; eval("document.box.box"+i+"_"+j+".src=head_up.src"); } //方向 function documentkeydown() { if((event.keyCode==80)&&(document.game_set.pause_button.disabled==false)) pause_game(); else if((event.keyCode==82)&&(document.game_set.restart_button.disabled==false)) end(); else if(event.keyCode==81) parent.window.close(); else if((event.keyCode==83)&&(document.game_set.start_button.disabled==false)) start_game(); if(stop==1) return; else { document.game_set.start_button.disabled=true; document.game_set.pause_button.disabled=false; document.game_set.restart_button.disabled=true; document.game_set.pause_button.value="暂停"; } if(event.keyCode==38) direction='up'; else if(event.keyCode==40) direction='down'; else if(event.keyCode==37) direction='left'; else if(event.keyCode==39) direction='right'; step(); } function if_back() { if((origin_direction=='right')&&(direction=='left')||(origin_direction=='left')&&(direction=='right')||(origin_direction=='down')&&(direction=='up')||(origin_direction=='up')&&(direction=='down')) return true; else return false; } //走一步 function step() { if(n>1) {if(worm[0][0]>worm[1][0]) {origin_direction='down';} else if(worm[0][0]<worm[1][0]) {origin_direction='up';} else if(worm[0][1]>worm[1][1]) {origin_direction='right';} else if(worm[0][1]<worm[1][1]) {origin_direction='left';} } else origin_direction=0; if(stop) return; if(if_back()) {direction=origin_direction; return; } else if(direction!=0) { if(direction=='up') { next_x=worm[0][0]-1; next_y=worm[0][1]; } else if(direction=='down') { next_x=worm[0][0]+1; next_y=worm[0][1]; } else if(direction=='left') { next_x=worm[0][0]; next_y=worm[0][1]-1; } else if(direction=='right') { next_x=worm[0][0]; next_y=worm[0][1]+1; } if(die()) { end(); return; } else { if(next_x==fruit[0]&&next_y==fruit[1]) { for(i=n;i>0;i--) { worm[i][0]=worm[i-1][0]; worm[i][1]=worm[i-1][1]; } worm[0][0]=next_x; worm[0][1]=next_y; eval("document.box.box"+next_x+"_"+next_y+".src=head_"+direction+".src"); n++; if((n==2)||(origin_direction==direction)) eval("document.box.box"+worm[1][0]+"_"+worm[1][1]+".src=body_"+direction+".src"); else eval("document.box.box"+worm[1][0]+"_"+worm[1][1]+".src=turn_"+origin_direction+"_"+direction+".src"); score+=100; bring_fruit(); } else { modi_img(); } } } // stop=0; } //判断是否碰到自己 function touch_self(a,b) { var i; for(i=0;i<n;i++) if((worm[i][0]==a)&&(worm[i][1]==b)) return true; return false; } //判断是否死亡 function die() { if(next_x<0||(next_x==M)||next_y<0||(next_y==M)||touch_self(next_x,next_y)) return true; else return false; } //结束 function end() { var i,j,user_name=""; alert("YOU DIE!GAME OVER!SCORE:"+score+" "+stop); if(score>high_score) {high_score=score; user_name=window.prompt("恭喜你获得了最高分,请输入你的名字:",""); } my_high_score.innerHTML="最高分:"+high_score+"<br>记录保持者:"+user_name; stop=1; direction=0; line=0; n=1; clear_line(1); } function clear_line(fill) { var i; if(fill==1) { if(line<=M-1) { for(i=0;i<M;i++) { eval("document.box.box"+line+"_"+i+".src=snake_fruit.src"); } line++; window.setTimeout("clear_line(1)",10); } else { line=M-1; window.setTimeout("clear_line(0)",10); } } else { if(line>=0) { for(i=0;i<M;i++) eval("document.box.box"+line+"_"+i+".src=back_img.src"); line--; window.setTimeout("clear_line(0)",10); } else { speed=arrayspeed[document.game_set.game_speed.options[document.game_set.game_speed.selectedIndex].value]; fruit_num=document.game_set.fruit_num.options[document.game_set.fruit_num.selectedIndex].value; score=0; document.game_set.start_button.disabled=true; document.game_set.pause_button.disabled=false; document.game_set.restart_button.disabled=true; document.game_set.pause_button.value="暂停"; document.game_set.restart_button.blur(); document.game_set.restart_button.blur(); stop=0; direction=0; bring_fruit(); head(); start_game(); //auto_step(); //return; } } } //修改蛇的图象 function modi_img() { var i; eval("document.box.box"+next_x+"_"+next_y+".src=head_"+direction+".src"); if(n==1) eval("document.box.box"+worm[0][0]+"_"+worm[0][1]+".src=back_img.src"); else if((n==2)||(origin_direction==direction)) {eval("document.box.box"+worm[0][0]+"_"+worm[0][1]+".src=body_"+direction+".src"); eval("document.box.box"+worm[n-1][0]+"_"+worm[n-1][1]+".src=back_img.src"); } else { eval("document.box.box"+worm[0][0]+"_"+worm[0][1]+".src=turn_"+origin_direction+"_"+direction+".src"); eval("document.box.box"+worm[n-1][0]+"_"+worm[n-1][1]+".src=back_img.src"); } for(i=n-1;i>0;i--) {worm[i][0]=worm[i-1][0]; worm[i][1]=worm[i-1][1]; } worm[0][0]=next_x; worm[0][1]=next_y; } function auto_step() { if(!stop) {step(); if(direction!=0) score+=1; show_score(); if(worm[0][0]==0&&direction=='up'||(worm[0][0]==M-1)&&direction=='down'||worm[0][1]==0&&direction=='up'||(worm[0][1]==M-1)&&direction=='down') window.setTimeout("auto_step()",speed+200); else window.setTimeout("auto_step()",speed+200); } } //显示分数 function show_score() { my_score.innerHTML="分数:"+score; } function documentmousedown() { if(event.button==2) alert("本系统只支持鼠标左键"); } function documentload() { if(document.readyState=='complete') { pro.style.visibility="hidden"; state.innerHTML=""; help.innerHTML="按任意方向键就可以开始了,祝大家玩的开心<br>Copyright by lint.EMAIL:[email protected]. 2000.5 "; document.game_set.start_button.disabled=false; stop=0; auto_step(); } } function load() { if(progress<130&&document.readyState!='complete') {progress++; pro.style.width=(progress*4)+"px"; window.setTimeout("load()",15); } } function start_game() { fruit_num=document.game_set.fruit_num.options[document.game_set.fruit_num.selectedIndex].value; speed=arrayspeed[document.game_set.game_speed.options[document.game_set.game_speed.selectedIndex].value]; document.game_set.start_button.disabled=true; document.game_set.pause_button.disabled=false; document.game_set.restart_button.disabled=true; document.game_set.pause_button.value="暂停"; stop=0; auto_step(); } function pause_game() { speed=arrayspeed[document.game_set.game_speed.options[document.game_set.game_speed.selectedIndex].value]; //document.game_set.start_button.disabled=false; if(stop==0) {document.game_set.pause_button.value="继续"; document.game_set.pause_button.disabled=false; document.game_set.restart_button.disabled=false; document.game_set.pause_button.blur(); stop=1; } else {document.game_set.pause_button.value="暂停"; document.game_set.pause_button.disabled=false; document.game_set.restart_button.disabled=true; document.game_set.pause_button.blur(); stop=0; auto_step(); } } document.onkeydown=documentkeydown; document.onmousedown=documentmousedown; document.onreadystatechange=documentload; </Script> </head> <body bgcolor="#FFFFFF"> <div id="Layer1" style="position:absolute; left:10px; top:11px; width:452px; height:406px; z-index:1; background-color: #FFFFFF; layer-background-color: #FFFFFF; border: 1px none #000000"> <form name="box"> <Script language="javascript"> for(i=0;i<M;i++) {for(j=0;j<M;j++) document.write("<img name='box"+i+"_"+j+"' src='images/snake10.jpg' width='25' height='25'>"); document.writeln("<br>"); } </Script> </form> </div> <div id="my_high_score" style="position:absolute; left:467px; top:12px; width:155px; height:53px; z-index:2">最高分:0</div> <div id="my_score" style="position:absolute; left:467px; top:68px; width:156px; height:24px; z-index:3">分数:0</div> <div id="Layer4" style="position:absolute; left:468px; top:97px; width:123px; height:237px; z-index:5; background-color: #FFFBEC; layer-background-color: #FFFBEC; border: 1px none #000000"> <form name="game_set" > <table width="75%" border="0" bordercolorlight="#CCCCFF" bordercolordark="#6666FF" bordercolor="#CCFFFF"> <tr> <td>果子</td> <td> <select name="fruit_num"> <option value="1">1</option> <option value="2">2</option> <option value="3">3</option> <option value="4">4</option> <option value="5">5</option> </select> </td> </tr> <tr> <td>速度</td> <td> <select name="game_speed"> <option value="0" selected>0</option> <option value="1">1</option> <option value="2">2</option> <option value="3">3</option> <option value="4">4</option> <option value="5">5</option> <option value="6">6</option> <option value="7">7</option> <option value="8">8</option> <option value="9">9</option> </select> </td> </tr> <tr> <td> <input type="button" onClick="start_game()" name="start_button" value="开始"> </td> <td> <input type="button" onClick="pause_game()" name="pause_button" value="暂停"> </td> </tr> <tr> <td colspan="2"> <input type="button" onClick="end()" name="restart_button" value="重新开始"> </td> </tr> <tr> <td colspan="2"> <input type="button" onClick="javascript:history.go(0)" name="Submit3" value="重置"> </td> </tr> <tr> <td colspan="2"> <input type="button" onClick="javascript:parent.window.close()" name="Button" value="退出游戏"> </td> </tr> </table> </form> </div> <div id="help" style="position:absolute; left:9px; top:424px; width:588px; height:32px; z-index:6"></div> <div id="pro" style="position:absolute; left:19px; top:452px; width:0px; height:42px; z-index:7; background-color: #0066FF; layer-background-color: #0066FF; border: 1px none #000000"></div> <div id="state" style="position:absolute; left:468px; top:377px; width:126px; height:40px; z-index:8">正在下载数据,请稍侯。</div> <Script language="javascript"> document.game_set.start_button.disabled=true; document.game_set.pause_button.disabled=true; document.game_set.restart_button.disabled=true; head(); for(i=0;i<fruit_num;i++) bring_fruit(); stop=1; document.body.scroll='no'; load(); </Script> </body> </html> |