<html>
<head>
<title>盒子游戏</title>
<style type="text/css">

body
{font-size:10pt;}

.table_back
{width:300px;height:300px;}

.floor
{border:1px solid black;cursor:pointer;}

.closed
{background-color:#808080;cursor:default;}

.edge
{border-color:#dfdfdf;}

.mickey
{background:red;cursor:default;}

.spider
{background:green;cursor:default;}
</style>
</head>
<body>
<script type="text/javascript">

/**//*--
标题:盒子游戏
设计:王集鹄
博客:http://blog.csdn.net/zswang
日期:2009年12月5日
--*/


function Box(options)
{

options = options ||
{};
var self = this;
this.rowCount = options.rowCount || 15; // 行数
this.colCount = options.colCount || 15; // 列数
this.closedCount = options.closedCount || 3; // 起始关闭数
this.mickeyCount = options.mickeyCount || 1; // 老鼠的数量
this.parent = options.parent || document.body; // 容器
this.onnewmickey = options.onnewmickey; // 初始化老鼠的事件
this.table_back = document.createElement("table");
this.table_back.className = "table_back";
this.table_back.border = 1;
this.playing = false; // 是否在进行中

this.floors =
{}; // 矩阵地板矩阵 [y,x]

for (var i = 0; i < this.rowCount; i++)
{
var tr = this.table_back.insertRow(-1);

for (var j = 0; j < this.colCount; j++)
{
var td = tr.insertCell(-1);

this.floors[i + "," + j] = new Floor(
{
td: td
, box: this

, pos:
{ x: j, y: i }
});
}
}

this.mickeys = []; // 老鼠集合

for (var i = 0; i < this.mickeyCount; i++)
{

var mickey = new Mickey(
{box: this});
mickey.index = i;
if (this.onnewmickey) this.onnewmickey(mickey);
this.mickeys.push(mickey);
}
this.parent.appendChild(this.table_back);
}

// 重新开始

Box.prototype.replay = function ()
{
this.playing = true;

for (var i = 0; i < this.rowCount; i++)
{

for (var j = 0; j < this.colCount; j++)
{
this.floors[i + "," + j].setState("blank");
}
}

for (var i = 0; i < this.closedCount; i++)
{
this.floors[
Math.floor(this.rowCount * Math.random())
+ "," + Math.floor(this.colCount * Math.random())
].setState("closed");
}
var j = -(this.mickeys.length / 2);

for (var i = 0; i < this.mickeys.length; i++, j++)
{
if (this.mickeys.length % 2 == 0 && i == this.mickeys.length / 2)
j++;

this.mickeys[i].move(
{
x: Math.floor(this.colCount / 2)
, y: Math.floor(this.rowCount / 2 + j)
});
}
}

// 下一个周期

Box.prototype.kick = function()
{
if (!this.playing) return;
var count = 0;
var freedom = false;

for (var i = 0; i < this.mickeys.length; i++)
{
if (this.mickeys[i].run()) count++;
if (this.mickeys[i].freedom) freedom = true;
}
if (freedom) // 有老鼠跑了
this.gameover();
else if (!count) this.win();
}

// 游戏结束

Box.prototype.gameover = function()
{
if (!this.playing) return;
this.playing = false;
if (this.ongameover) this.ongameover();
}


Box.prototype.win = function()
{
if (!this.playing) return;
this.playing = false;
if (this.onwin) this.onwin();
}

// 地板

function Floor(options)
{

options = options ||
{};
var self = this;

this.td = options.td ||
{};
this.td.innerHTML = " ";

this.td.onclick = function()
{
if (!self.box.playing) return; // 游戏已经结束
if (self.state != "blank") return;
self.setState("closed");
self.box.kick();
}

this.box = options.box ||
{};

this.pos = options.pos ||
{};
this.state = "blank";
this.doChange();
}

// 状态变化

Floor.prototype.doChange = function()
{
var className = "floor";
if (this.pos.x * this.pos.y == 0
|| this.pos.x == this.box.colCount - 1
|| this.pos.y == this.box.rowCount - 1) // 边缘
className += " edge";
className += " " + this.state;
if (this.td.className != className)
this.td.className = className;
}


Floor.prototype.setState = function(state)
{
if (this.state == state) return;
this.state = state;
if (this.box.next) this.box.next();
this.doChange();
}

// 老鼠类

function Mickey(options)
{

options = options ||
{};

this.box = options.box ||
{};
this.route = null; // 逃跑路线

this.pos =
{}; // 所在位置
this.move(this.pos);
this.freedom = false;
this.name = "mickey";
this.offsets = [ // 移动规则

{x: -1, y: 0}

,
{x: 0, y: -1}

,
{x: +1, y: 0}

,
{x: 0, y: +1}
];
}

// 移动位置

Mickey.prototype.move = function(pos)
{

pos = pos ||
{};
if (pos.x == this.x && pos.y == this.y) return;
if (this.box.floors[this.pos.y + "," + this.pos.x])
this.box.floors[this.pos.y + "," + this.pos.x].setState("blank");
this.pos = pos;
this.box.floors[this.pos.y + "," + this.pos.x].setState(this.name);
this.freedom = this.pos.x == 0 || this.pos.y == 0
|| this.pos.x == this.box.colCount - 1
|| this.pos.y == this.box.rowCount - 1;
}

// 老鼠跑

Mickey.prototype.run = function()
{

var directions =
{ route: [], pos: this.pos };

this.flags =
{};
this.route = [];

if (this.search(this.pos, this.route))
{
this.move(this.route.shift());
return true;
}
}

// 搜索逃跑路径

Mickey.prototype.search = function(pos, route)
{
if (this.flags[pos.y + "," + pos.x]) return false;
this.flags[pos.y + "," + pos.x] = true; // 标记已经扫描

// 搜索直观的路径

var directions =
{}; // 每个方向的路径
var min = -1; // 最短的距离

for (var i = 0; i < this.offsets.length; i++)
{
directions[i] = [];

for (var j = 1; ; j++)
{

var test =
{
x: pos.x + this.offsets[i].x * j
, y: pos.y + this.offsets[i].y * j
};
if (!(test.x >= 0 && test.y >= 0
&& test.x < this.box.colCount && test.y < this.box.rowCount
&& !this.flags[test.y + "," + test.x] // 未搜索过

&& this.box.floors[test.y + "," + test.x].state == "blank"))
{
directions[i] = [];
break;
}
directions[i].push(test);
if (test.x == 0 || test.y == 0
|| test.x == this.box.colCount - 1

|| test.y == this.box.rowCount -1)
{
if (min < 0 || directions[min].length > directions[i].length) min = i;
break;
}
}
}

if (min >= 0)
{
for (var i = 0; i < directions[min].length; i++)
route.push(directions[min][i]);
return true;
}

// 回溯搜索
var k = Math.floor(Math.random() * this.offsets.length);

for (var i = 0; i < this.offsets.length; i++)
{

var test =
{
x: pos.x + this.offsets[(k + i) % this.offsets.length].x
, y: pos.y + this.offsets[(k + i) % this.offsets.length].y
};
if (test.x >= 0 && test.y >= 0
&& test.x < this.box.colCount && test.y < this.box.rowCount
&& !this.flags[test.y + "," + test.x] // 未搜索过

&& this.box.floors[test.y + "," + test.x].state == "blank")
{ // 非空地
route.push(test);
if (test.x == 0 || test.y == 0
|| test.x == this.box.colCount - 1
|| test.y == this.box.rowCount -1)
return true;
if (this.search(test, route)) return true;
route.pop();
}
}
return false;
}

var button = document.createElement("input");
button.type = "button";
button.value = "第一关";

button.onclick = function()
{
box1.replay();
};
document.body.appendChild(button);

var box1 = new Box();
box1.replay();

var button = document.createElement("input");
button.type = "button";
button.value = "第二关";

button.onclick = function()
{
box2.replay();
};
document.body.appendChild(button);


var box2 = new Box(
{mickeyCount: 2});

box2.replay();

var button = document.createElement("input");
button.type = "button";
button.value = "第三关";

button.onclick = function()
{
box3.replay();
};
document.body.appendChild(button);

var box3 = new Box(
{

onnewmickey: function(mickey)
{
mickey.offsets = [

{x: -1, y: 0}

,
{x: 0, y: -1}

,
{x: +1, y: 0}

,
{x: 0, y: +1}

,
{x: -1, y: +1}

,
{x: -1, y: -1}

,
{x: +1, y: -1}

,
{x: +1, y: +1}
];
mickey.name = 'spider';
}
});

box3.replay();

box1.ongameover = box2.ongameover = box3.ongameover = function()
{
alert("跑掉了。o(╯□╰)o");
}

box1.onwin = box2.onwin = box3.onwin = function()
{
alert("O(∩_∩)O成功!");
}
</script>
</body>
</html>

两个脚本都是在csdn上无意中看到的..第一个挺有意思的游戏..堵箱子..玩法就不说了..很简单..
第二个是一个烟花的脚本..08奥运会那个大脚烟花..这个是真的很有意思..
<html>
<head>
<title>K.G Script3D 2.00 Beta - Map UpFire</title>
</head>
<body bgcolor="#000000" text="#ffffff" style="overflow:hidden;">
<!--<p id="idText" style="color:rgb(255,255,255)">提示:改变窗口大小后请刷新,以便观赏最大视野效果。</p>-->
</body>
<script type="text/javascript">
//K.G Script3D 2.00 Beta
//3D Script for DHTML
//Copyright - KiteGirl [China] 2009
var pubElements = null;
var pubX = pubY = pubZ = 0;
var pubR = pubG = pubB = 0;
var pubViewAngle = 0;
var pubViewWidth = 0;
var pubViewHeight = 0;
var pubViewFogOver = 0;
var pubViewFogFull = 0;
var pubAt = 0;
var pubCellLen = 0;
var pubBaseX = pubBaseY = pubScale = 0;
var pubBaseZ = 0;
var pubTimerCode = 0;
var pubOnTimer = 0;
var pubTimeout = 0;
var pubMapValStrs = 0;
var pubPy = 0;
var pubPyDt = 0;
var pubSSG_reCosVa = 0;
var pubSSG_reVa = 0;
var pubMapsIndex = 0;

function rgb(b, g, r)
{
return "#" +

("00" + Math.floor(r).toString(16)).replace(/^.*(\w
{2}$)/g, "$1") +

("00" + Math.floor(g).toString(16)).replace(/^.*(\w
{2}$)/g, "$1") +

("00" + Math.floor(b).toString(16)).replace(/^.*(\w
{2}$)/g, "$1");
}

window.onload = function()
{
pubSSG_reCosVa = 0;
pubSSG_reVa = 0;
pubViewAngle = 45;
pubViewWidth = (document.body.clientWidth || document.documentElement.clientWidth) - 10;
pubViewHeight = (document.body.clientHeight || document.documentElement.clientHeight) - 10;
pubBaseZ = 2000;
pubViewFogOver = 3700;
pubViewFogFull = 1500;
pubCellLen = 255;
pubPy = 0;
pubPyDt = 110;
tMap = "21,3,22,3,23,3,18,4,19,4,20,4,24,4,25,4,17,5,26,5,17,6,26,6,17,7,26,7,17,8,26,8,17,9," +
"26,9,16,10,26,10,16,11,26,11,15,12,26,12,13,13,14,13,26,13,11,14,12,14,26,14,9,15,10,15," +
"26,15,8,16,25,16,8,17,25,17,4,18,5,18,8,18,25,18,2,19,3,19,6,19,8,19,25,19,2,20,6,20,8," +
"20,25,20,2,21,6,21,9,21,10,21,24,21,2,22,6,22,10,22,11,22,12,22,23,22,3,23,4,23,5,23,13," +
"23,14,23,15,23,16,23,17,23,18,23,19,23,20,23,21,23,22,23,10,24,11,24,25,24,26,24,9,25,12," +
"25,15,25,16,25,24,25,27,25,8,26,12,26,14,26,17,26,20,26,21,26,24,26,28,26,9,27,11,27,14," +
"27,17,27,19,27,22,27,25,27,27,27,10,28,14,28,17,28,19,28,22,28,26,28,15,29,16,29,19,29," +
"22,29,20,30,21,30";
pubMapValStrs = tMap.split(/,/);
tValLen = pubMapValStrs.length;
pubCellLen = tValLen / 2;
pubX = new Array(pubCellLen);
pubY = new Array(pubCellLen);
pubZ = new Array(pubCellLen)
GetMap1();
pubElements = ElementsCreate(pubCellLen);
NewColor();
ElementsView(pubElements, pubX, pubY, pubZ, pubCellLen, pubViewAngle, pubViewWidth, pubViewHeight, pubViewWidth / 2, pubViewHeight / 2, pubBaseZ, pubViewFogFull, pubViewFogOver, pubR, pubG, pubB, 9);
TimeLoop();
}

function GetMap1()
{

for (var tCi = 0; tCi < pubCellLen; tCi++)
{
pubX[tCi] = 16 - parseInt(pubMapValStrs[tCi * 2]) - 16;
pubZ[tCi] = (parseInt(pubMapValStrs[tCi * 2 + 1]) - 16) * 2;
pubY[tCi] = 500 - pubZ[tCi];
}
}

function GetMap2()
{

for (var tCi = 0; tCi < pubCellLen; tCi++)
{
pubX[tCi] = parseInt(pubMapValStrs[tCi * 2]) - 16 + 16;
pubZ[tCi] = (parseInt(pubMapValStrs[tCi * 2 + 1]) - 16) * 2;
pubY[tCi] = 500 - pubZ[tCi];
}
}

function NewColor()
{
var tRGB = new Array(3);
tRGB[0] = Math.random() * 0.5 + 0.5;
tRGB[1] = Math.random() * 0.5 + 0.5;
tRGB[2] = Math.random() * 0.5 + 0.5;
tRGB[Math.floor(Math.random() * 3)] = 1;
pubR = tRGB[0] * 255;
pubG = tRGB[1] * 255;
pubB = tRGB[2] * 255;
}

function TimeLoop()
{
//pubOnTimer = Timer;
if (pubAt < 1500) pubAt = pubAt + 50;
pubPy = pubPy + pubPyDt;
pubPyDt = pubPyDt - 5;

if (pubAt > 1440)
{
pubAt = pubPy = 0;
pubPyDt = 110;
pubMapsIndex = (pubMapsIndex + 1) % 2;

if (pubMapsIndex == 0)
{
GetMap1();

} else
{
GetMap2();
}
NewColor();
}
ElementsView(pubElements, pubX, pubY, pubZ, pubCellLen, pubViewAngle, pubViewWidth, pubViewHeight,
pubViewWidth / 2, pubViewHeight / 2, pubBaseZ, pubViewFogFull, pubViewFogOver, pubR, pubG, pubB, 9);
pubTimerCode = window.setTimeout("TimeLoop();", 33);
}

function ElementsCreate(pLength)
{
var oElms = new Array(pLength + 1);

for (tEi = 0; tEi < pLength; tEi++)
{

with (document)
{
oElms[tEi] = createElement("SPAN");
body.appendChild(oElms[tEi]);
}

with (oElms[tEi])
{
innerHTML = "*";
style.position = "absolute";
style.color = "#000000";
}
}
return oElms;
}

function ElementsView(pElements, pXs, pYs, pZs, pLength, pVa, pVw, pVh, pBx, pBy, pBz, pCf, pCe, pRs, pGs, pBs, pVcs)
{

for (tEi = 0; tEi < pLength; tEi++)
{
tSc = ((pubAt / 100) + 1);
tZ = pZs[tEi] * tSc + pBz + (1000 - pubAt) * 2;
tX = pXs[tEi] * tSc;
tY = pYs[tEi] + 500 - pubPy;
var tVx = tVy = tVcs = 0;

if (tZ > 0) ShadowScenoGraph(tX, tY, tZ, pVa, pVw, pBx, pBy, pVcs, function (oVx, oVy, oVcs)
{ tVx = oVx; tVy = oVy; tVcs = oVcs; });
if (tVcs < 0) tVcs = Math.abs(tVcs);
tVc = LocateOverView(tVx, tVy, tZ, pVw, pVh);

if (tVc)
{

with (pElements[tEi].style)
{
color = "#000000";
fontSize = "9";
top = 0
left = 0
}

} else
{

with (pElements[tEi].style)
{
color = FogColor(tZ, pCf, pCe, pRs, pGs, pBs);
fontSize = tVcs + 1;
top = tVy;
left = tVx;
zIndex = tVcs + 1;
}
}
}
}

function FogColor(pZ, pVf, pVe, pR, pG, pB)
{

if (pZ > pVe)
{
tCs = 0;
oColor = 0;

} else if (pZ < pVf)
{
tCs = 1;

} else
{
tCs = (pVe - pZ) / (pVe - pVf);
}
tB = tCs * pB;
tG = tCs * pG;
tR = tCs * pR;
return rgb(tB, tG, tR);
}

function LocateOverView(pX, pY, pZ, pVw, pVh)
{
return (pX > pVw) | (pX < 0) | (pY > pVh) | (pY < 0) | (pZ < 0);
}

function ShadowScenoGraph(iX, iY, iZ, iVa, iVw, iVbx, iVby, iVcs, func)
{

if (pubSSG_reVa != iVa)
{
pubSSG_reVa = iVa;
pubSSG_reCosVa = Math.cos(Radian(pubSSG_reVa));
}
tZw = iZ * pubSSG_reCosVa;

if (tZw != 0)
{
oVcs = iVcs * iVw / tZw;
tVps = oVcs / 2;
oVx = (iX * iVw) / tZw + iVbx - tVps;
oVy = (iY * iVw) / tZw + iVby - tVps;

} else
{
oVcs = oVx = oVy = 0;
}
func(oVx, oVy, oVcs);
}

function SphereLocate(iR, iAv, iAp, oX, oY, oZ)
{
tRv = Radian(iAv);
tRp = Radian(iAp);
tR_Sin_Rv = iR * Math.sin(tRv);
oX = tR_Sin_Rv * Math.cos(tRp);
oY = tR_Sin_Rv * Math.sin(tRp);
oZ = iR * Math.cos(tRv);
}

function Radian(pA)
{
return pA * 71 / 4068;
}
</script>
</html>


本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/zswang/archive/2009/01/13/3771948.aspx