引用 | 編輯
codeboy
2004-12-29 00:24 |
樓主
▼ |
||
x0
貪吃蛇阿...方向鍵控制喔~ 不小心找來的~ 複製程式 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"> <HTML> <HEAD> <TITLE> New Document </TITLE> <META NAME="Generator" CONTENT="EditPlus"> <META NAME="Author" CONTENT=""> <META NAME="Keywords" CONTENT=""> <META NAME="Description" CONTENT=""> <meta http-equiv="Content-Type" content="text/html; charset=gb2312"> <STYLE> .btnup{ border-left:solid #ffffff 1px; border-top:solid #ffffff 1px; border-right:solid #828486 1px; border-bottom:solid #828486 1px; font-size: 9pt; cursor:default } tr{ font-family:"細明體"; font-size: 9pt; cursor: default } </STYLE> </HEAD> <SCRIPT LANGUAGE="JavaScript"> <!-- var row = 25,col = 25,size=16; var delay = 300;//移動延遲 var paused = false; var end = false var TimerID; var s = new snake(); var n = new nut(); var nutad = new Array(); nutad[0] = -1; nutad[1] = -1; var Color = new Array(5); Color[0] = "#d0d0d0"; Color[1] = "red"; Color[2] = "green" Color[3] = "blue"; Color[4] = "yellow"; var move_direction = new Array(); var curr_direction = new Array(); move_direction[0] = 1; move_direction[1] = 0; //======================================== //定義果實 function nut() { this.x = -1; this.y = -1; } function nut_show() { if (this.x<0 || this.y < 0 ) return; obj = document.all("Main" + this.x + "#" + this.y); obj.style.background = Color[2]; } function nut_create() { var inx = -1; var iny = -1; for(;;) { var cur = true; inx = Math.round(Math.random() * (row-1)); iny = Math.round(Math.random() * (col-1)); for (var i = 0; i<s.items.length ; i++) { if (s.items[i].x == inx && s.items[i].y == iny) { cur = false; break; } } if (cur) { break; } } this.x = inx; this.y = iny; nutad[0] = inx; nutad[1] = iny; this.show(); } function nut_eated() { if (this.x<0 || this.y < 0) return; obj = document.all("Main" + this.x + "#" + this.y); obj.style.background = Color[0]; } nut.prototype.create = nut_create; nut.prototype.show = nut_show; nut.prototype.eated = nut_eated; //======================================== //定義蛇體 function snake() { this.items = new Array(); } function snake_eat(nt) { var s_length = this.items.length; this.items[s_length] = nt; } function snake_move(dir) { this.destroy(); var y = this.items[0].y; var x = this.items[0].x; var nx = x + dir[1]; var ny = y + dir[0]; if (nx <0 || nx >= row || ny <0 || ny >= col || crossed(nx,ny)) { end = true; return; } caneat(nx,ny); for (var i = this.items.length-1 ; i>=0 ; i --) { if (i != 0) { this.items[i].move(this.items[i-1].x,this.items[i-1].y); } else { this.items[i].move(nx,ny); } } this.reload(); } function caneat(nx,ny) { if (nx == nutad[0] && ny == nutad[1]) { var lst = s.items[s.items.length-1]; var nd = new snakeNode(lst.x,lst.y); s.eat(nd); n.eated(); n.create(); } } //禁止穿越自身節點 function crossed( nx, ny ) { for (var i = 0; i<s.items.length; i++) { if (s.items[i].x == nx && s.items[i].y == ny) { return true; } } return false; } function snake_reload() { for (var i = 0 ; i<this.items.length ; i ++) { var curNode = this.items[i]; obj = document.all("Main" + curNode.x + "#" + curNode.y); obj.style.background = Color[1]; } } function snake_destroy() { for (var i = 0 ; i<this.items.length ; i ++) { var curNode = this.items[i]; obj = document.all("Main" + curNode.x + "#" + curNode.y); obj.style.background = Color[0]; } } function snake_clear() { this.destroy(); this.items = new Array(); } snake.prototype.eat = snake_eat; snake.prototype.move = snake_move; snake.prototype.reload = snake_reload; snake.prototype.destroy = snake_destroy; snake.prototype.clear = snake_clear; //蛇體節點 function snakeNode(x,y) { this.id = 0;//編號 this.x = x;//坐標X this.y = y;//坐標Y this.color = "#000000"; } function snakeNode_setC(d_color) { this.color = d_color; } function snakeNode_move(dx,dy) { this.x = dx; this.y = dy; } snakeNode.prototype.setColor = snakeNode_setC ; snakeNode.prototype.move = snakeNode_move ; //======================================== //程序界面 //初始化主控制區 function DrawArea(row,col,name){ var s = "<TABLE BORDER=1 cellspacing=0 cellpadding=1 bgcolor=" + Color[0] + ">"; for(var i=0; i<row; i++){ s = s + "<TR Height=" + size + ">"; for(var j=0; j<col; j++){ var id = name + i + "#" + j; s = s + "<TD Width=" + size + " class=btnup id=" + id; s = s + " style=\"background:" + Color[0] + "\"> </TD>" } s = s + "</TR>"; } s = s + "</TABLE>"; return s; } //初始化 function Init(){ MainArea.innerHTML = DrawArea(row,col,'Main'); } //================================== //程序控制區,用來接收輸入、定義控制方法 //控制輸入 function keyDown(){ switch(event.keyCode) { case 37: if (curr_direction[0] != -1) { move_direction[0] = -1; move_direction[1] = 0; } break; case 38: if (curr_direction[1] != -1) { move_direction[0] = 0; move_direction[1] = -1; } break; case 39: if (curr_direction[0] != 1) { move_direction[0] = 1; move_direction[1] = 0; } break; case 40: if (curr_direction[1] != 1) { move_direction[0] = 0; move_direction[1] = 1; } break; } } function Begin() { end = false; paused = false; s.clear(); for (var i = 8; i >=0 ; i--) { sn = new snakeNode(0,i); s.eat(sn); } n.eated(); n.create(); move_direction[0] = 1; move_direction[1] = 0; curr_direction[1] = s.items[1].x - s.items[0].x; curr_direction[0] = s.items[1].y - s.items[0].y; Start(); } //啟動開關 function Start() { if (end) { s.reload(); alert("掛了!"); return; } window.clearInterval(TimerID); TimerID = window.setInterval("Run()",delay); } //運行主體 var d = true; function Run(){ if(paused) return; if(true){ window.clearInterval(TimerID); s.move(move_direction); curr_direction[1] = s.items[1].x - s.items[0].x; curr_direction[0] = s.items[1].y - s.items[0].y; Start(); } } //暫停開關 function Pause() { if (paused) { paused = false; if (!end) { Run(); } } else { paused = true; } } //結束 function Over() { end = true; } //--> </SCRIPT> <BODY BGCOLOR="#FFFFFF" onload="Init()" onkeydown="keyDown()" leftmargin="0" topmargin="0" marginwidth="0" marginheight="0"> <TABLE border="0" cellspacing="0" cellpadding="0" align="center" width="80%"> <TR> <TR valign="top" width="80%"> <TD><SPAN ID="MainArea"></SPAN></TD> <TD align="center"> <BUTTON ID="start" onclick="Begin()">Start</BUTTON><br> <BUTTON ID="pause" onclick="Pause()">pause</BUTTON><br> <BUTTON ID="over" onclick="Over()">End</BUTTON><br> </TD> </TR> </TABLE> </BODY> </HTML> x0
|