分享
 
 
 

扫雷

王朝html/css/js·作者佚名  2006-01-08
窄屏简体版  字體: |||超大  

闲时,写了个扫雷,没有什么用,不过放上来爽一下而已,呵呵……

<html>

<head>

<meta http-equiv="Content-Type" content="text/html; charset=gb2312">

<title>无标题文档</title>

<style>

.cl1{width:20;height:20;border-width:3px;border-style:solid;border-left-color:#ffffff;border-top-color:#ffffff;border-right-color:#808080;border-bottom-color:#808080;background-color:c0c0c0;}

.cl2{width:20;height:20;border-width:3px;border-style:solid;border-color:#c0c0c0;background-color:#c0c0c0;}

.inputClass{width:40px;height:20px;border-style:solid;border-width:1px;}

</style>

</head>

<body style="font-size:12px;" oncontextmenu="return false;" bgcolor="#000000">

<div align="center"><font color="#FFFF00"><strong>Supper Landmine Scanning</strong></font>

</div>

<div align="center" style="color:#ffffff"><br>

你已经标记的雷数:<span id="mark" style="color:#ff0000">0</span>&nbsp;&nbsp;流逝的时间:<span id='time' style="color:#ff0000">0</span>秒</div>

<div id="boardContainer"></div>

<script src="queue.js"></script>

<script>

function board(mNum,w,h)

{

this.mineNum=mNum;

this.height=h;

this.width=w;

this.board=new Array(h);

this.tempBoard=new Array(h);

this.mineP=null;

//direction 有左上到右下,顺时针。

this.direction=new Array(new Array(-1,-1),new Array(0,-1),new Array(1,-1),new Array(1,0),new Array(1,1),new Array(0,1),new Array(-1,1),new Array(-1,0));

this.makeEmptyBoard=makeEmptyBoard;

this.makeMine=makeMine;

this.makeThreadNum=makeThreadNum;

this.onclick=onclick;

this.handleZeroArea=handleZeroArea;

this.check=check;

this.markNum=0;

this.blankLeft=w*h;

this.timer=0;

var n=(mNum<=w*h/2)?0:-1000;

this.makeEmptyBoard(n);

for(var t=0;t<h;t++)

this.tempBoard[t]=new Array(this.width);

}

function check(position,increase)

{

if(increase)

{

this.markNum++;

document.all("mark").innerText=this.markNum;

this.tempBoard[position[0]][position[1]]=this.board[position[0]][position[1]];

this.board[position[0]][position[1]]=10;

}

else

{

this.markNum--;

document.all("mark").innerText=this.markNum;

this.board[position[0]][position[1]]=this.tempBoard[position[0]][position[1]];

}

}

function handleZeroArea(position)

{

this.blankLeft--;

this.board[position[0]][position[1]]=9;//将已经访问的o数据改成9即标记已经访问

document.all(position[0]+"_"+position[1]).className='cl2';

var newPosition=new Array(2);

var queue=new Queue();

queue.enter(position);

while(!queue.isempty())

{

p=queue.retrieve();

queue.leave();

for(var k=0;k<8;k++)//这个"var"一定要用!!!!!!!!!!!!!!!!!!!!!!!!!!

{

newPosition[0]=parseInt(p[0])+parseInt(this.direction[k][1]);

newPosition[1]=parseInt(p[1])+parseInt(this.direction[k][0]);

if(newPosition[0]>=0&&newPosition[0]<this.height&&newPosition[1]>=0&&newPosition[1]<this.width)//没有溢出则执行下边的处理

{

if(this.board[newPosition[0]][newPosition[1]]==-1000||this.board[newPosition[0]][newPosition[1]]>0)//为地雷,或者已经显示的就不做处理

continue;

else if(this.board[newPosition[0]][newPosition[1]]<0)//非地雷,非已经显示,表示要显示

{

this.board[newPosition[0]][newPosition[1]]=-this.board[newPosition[0]][newPosition[1]];

document.all(newPosition[0]+"_"+newPosition[1]).innerText=this.board[newPosition[0]][newPosition[1]];

document.all(newPosition[0]+"_"+newPosition[1]).className='cl2';

this.blankLeft--;

}

else if(this.board[newPosition[0]][newPosition[1]]==0)

{

this.blankLeft--;

this.board[newPosition[0]][newPosition[1]]=9;//将已经访问的o数据改成9即标记已经访问

document.all(newPosition[0]+"_"+newPosition[1]).className='cl2';

queue.enter(newPosition);

}

}

}

}

}

function makeEmptyBoard(num)

{

var w=parseInt(this.width*20)+parseInt(this.width)+1;

var htmlCode="<table id='board' width='"+w+"' align='center' border='0' cellpadding='0' cellspacing='1' onselectstart='return false;' onClick=\"if(event.srcElement.tagName.toUpperCase()!='TD')return;if(event.srcElement.innerText!='@')scanBomb.onclick(event.srcElement.id.split('_'),event.srcElement)" style='cursor:default' oncontextmenu=\"if(event.srcElement.className=='cl1'){event.srcElement.innerText=event.srcElement.innerText=='@'?'&nbsp;':'@';if(event.srcElement.innerText=='@')scanBomb.check(event.srcElement.id.split('_'),true);else scanBomb.check(event.srcElement.id.split('_'),false);}\">";

for(i=0;i<this.height;i++)

{

this.board[i]=new Array(this.width);

htmlCode+="<tr>";

for(j=0;j<this.width;j++)

{

htmlCode+="<td id='"+i+"_"+j+"' align='center' class='cl1'>&nbsp;</td>"

this.board[i][j]=num;

}

htmlCode+="</tr>";

}

htmlCode+="</table>";

document.all("boardContainer").innerHTML=htmlCode;

this.makeMine();

this.makeThreadNum();

}

function makeMine()//num为空白或者bomb的个数,当bomb小于等于格数的一半的时候num为bomb数,否则为空白数

{

var condition=(this.mineNum<=Math.round(this.width*this.height/2));

var num=condition?this.mineNum:this.width*this.height-this.mineNum;

var str="new Array(";

for(var i=0;i<num-1;i++)

str+="new Array(2),";

str+="new Array(2))";

eval("var position="+str);

for(var i=0;i<num;i++)//这里产生不重复随机数的方法太差了!!!!!

{

position[i][0]=Math.round(Math.random()*(this.height-1));

position[i][1]=Math.round(Math.random()*(this.width-1));

for(var j=0;j<i;j++)//检查是否重复

{//alert("i,j:"+i+","+j);

if(position[i][0]==position[j][0])

if(position[i][1]==position[j][1])

{

//alert("repeat!");

position[i][0]=Math.round(Math.random()*(this.height-1));

position[i][1]=Math.round(Math.random()*(this.width-1));

j=0;

}

}

}//这里不重复随机数的产生方法太差了!!!!!

if(condition)//true 表示产生的是mine的position,false表示产生的是空白的position

{

this.mineP=position;

for(var i=0;i<num;i++)

{

this.board[parseInt(position[i][0])][parseInt(position[i][1])]=-1000;

}

}

else

{

for(var k=0;k<num;k++)

this.board[position[k][0]][position[k][1]]=0;

this.mineP=new Array(this.mineNum);

var counter=0;

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

{

for(var j=0;j<this.width;j++)

if(this.board[i][j]==-1000)

{

this.mineP[counter]=new Array(2);

this.mineP[counter][0]=i;

this.mineP[counter][1]=j;

counter++;

}

}

}

}

function makeThreadNum()

{

for(i=0;i<this.height;i++)

for(j=0;j<this.width;j++)

{

if(this.board[i][j]==-1000)continue;

for(k=0;k<this.mineNum;k++)

if(Math.abs(i-this.mineP[k][0])<=1&&Math.abs(j-this.mineP[k][1])<=1)

this.board[i][j]--;

}

}

function onclick(position,ob)

{

var flag=ob.className!='cl2';

if(this.board[position[0]][position[1]]==0)

this.handleZeroArea(position);

else if(this.board[position[0]][position[1]]==-1000)

{

ob.style.borderColor='red';

ob.style.backgroundColor='red';

for(i=0;i<this.mineNum;i++)

{

document.all(this.mineP[i][0]+"_"+this.mineP[i][1]).innerText="*";}

alert("You lose!\nSpend time:"+this.timer+"seconds.");

//location.reload();

return;

}

else if(this.board[position[0]][position[1]]<0)

{

this.board[position[0]][position[1]]=-this.board[position[0]][position[1]];

ob.innerText=this.board[position[0]][position[1]];

ob.className='cl2';

this.blankLeft--;

}

if(this.blankLeft==this.mineNum&&flag)

alert('You win!\nYou spend '+this.timer+' seconds this time.');

}

</script>

<br>

<div align="center" style="color:#ffffff"> 地雷数:

<input type="text" name="textfield1" class="inputClass" value="40">

行数:

<input type="text" name="textfield2" class="inputClass" value="15">

列数:

<input type="text" name="textfield3" class="inputClass" value="15">

<br>

<br>

<input type="submit" name="Submit" value="开始游戏" onclick="this.value='再来一次';begin(document.all('textfield1').value,document.all('textfield3').value,document.all('textfield2').value);" style="width:70;height:20;font-size:12px;">

</div>

<script>

var scanBomb;

var t

function begin(bombNum,width,height){

re=/^[1-9]\d*$/gi;

if(!(re.test(bombNum+width+height))){alert("你的输入有误!");return;}

document.all("mark").innerText=0;

document.all('time').innerText=0;

if(t!=null)window.clearInterval(t);

if(bombNum>=width*height)

{alert("地雷的数量不能超过或者等于地图的格数!");return;}

scanBomb=new board(parseInt(bombNum),parseInt(width),parseInt(height));

alert('确定后开始!');

t=window.setInterval("document.all('time').innerText=(++scanBomb.timer);",1000);

}

</script>

<br>

<div align="center" style="color:#ffffff">----------------------Power by Hill.Chiu

丘の工作室----------------------<br>

<a href="mailto:hillhero789@sina.com"><font color="#FFFFFF">给我意见</font></a><br>

Run at IE5.5+</div>

</body>

</html>

//---------------------------------------------------------------

queue.js文件:

// JavaScript Document

function node(value,next)//value为position

{

if(value!=null)

{

this.value=new Array(2);

this.value[0]=value[0];

this.value[1]=value[1];}

else

this.value=null;

this.next=next;

}

function Queue()

{

this.first=null;//头指针

this.rear=null;//尾指针

this.size=0;//私有

//以下为方法:

this.enter=enter;//进入队列

this.leave=leave;//离开队列

this.isempty=isempty;//判断队列是否为空

this.retrieve=retrieve;//不离开队列,取得数据

}

function isempty()

{

return this.size==0?true:false;

}

function enter(value)

{

if(this.size==0)

this.first=this.rear=new node(value,null);

else

{

this.rear.next=new node(value,null);

this.rear=this.rear.next;

}

this.size++;

}

function leave()

{

if(!this.isempty())

{

var temp=this.first;

this.first=this.first.next;

delete temp;

this.size--;

return true;

}

else

return false;

}

function retrieve()

{

if(!this.isempty())

{

return this.first.value;

}

else

return null;

}

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有