标签:
这几天写题比较少,做了一下网页设计的期末大作业。搞了个连连看,核心代码和hdu 1175那个题目一样。
越来越觉得学ACM是十分正确的,软件的核心是数据结构和算法,学会了DFS,连连看水到渠成。
下载地址:http://pan.baidu.com/s/1pJBmdEN
下面放出源码:
html部分:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>lianliankan~~~</title> <link rel="stylesheet" type="text/css" href="style.css" /> </head> <body background="images/bj.jpg"> <table width="100%" border="0"> <tr> <td height="15" align="center" class="zt">连连看</td> </tr> </table> <div id="main"></div> <script type="text/javascript" src="lianliankan.js"></script> </body> </html>
js部分:
alert("欢迎来玩连连看~~~~");
alert("请先自定义难度 (要求:(行数*列数)%2==0)!!");
var row=prompt("请输入行数","")-‘0‘;
var col=prompt("请输入列数","")-‘0‘;
var totimage = 13;
var totrow=row+2;
var totcol=col+2;
var ii,jj;
var jieguo;
var today=new Date()
var h=today.getHours()
var m=today.getMinutes()
var s=today.getSeconds()
var start=h*60*60+m*60+s;
var end;
var zg=row*col;
var mapp = new Array(totcol);
for(var j = 0; j < totcol; j++) mapp[j] = new Array(totrow);
var flag = new Array(totcol);
for(var j = 0; j < totcol; j++) flag[j] = new Array(totrow);
var image = row * col / 2;
var imagesz=new Array(image);
var bianhao=1,nn=0;
for(var i=0;i<image;i++)
{
if(bianhao>totimage) bianhao=1;
imagesz[nn]=bianhao;
imagesz[nn+1]=bianhao;
nn=nn+2;
bianhao++;
}
imagesz=randomOrder(imagesz);
var html="<table>\n";
var n=0;
var c,r;
for(c=0;c<totcol;c++)
{
html += "<tr>\n";
for(r=0;r<totrow;r++)
{
html += "<td>\n";
if(c==0||r==0||r==(totrow-1)||c==(totcol-1)) mapp[c][r]=0;
else
{
mapp[c][r]=imagesz[n];
n++;
html += "<img src=\"images/"+ mapp[c][r] +".jpg\" onclick=\"jiancha(this, " + c + ", " + r + ")\">\n";
}
html += "</td>\n";
}
}
document.getElementById("main").innerHTML = html;
var temp1 = null;
var twopic = new Array({x:0,y:0}, {x:0,y:0});
function jiancha(temp2,x,y)
{
if(mapp[x][y]!=0)
{
if(temp1==null)
{
temp1=temp2;
temp1.parentNode.style.background ="#FFFFFF";
twopic[0].x = x;
twopic[0].y = y;
}
else if(temp2!=temp1)
{
temp1.parentNode.style.background = "transparent";
twopic[1].x = x;
twopic[1].y = y;
if(mapp[twopic[0].x][twopic[0].y]==mapp[twopic[1].x][twopic[1].y])
{
for(ii=0;ii<totcol;ii++)
{
for(jj=0;jj<totrow;jj++)
{
flag[ii][jj]=0;
}
}
flag[twopic[0].x][twopic[0].y]=1;
jieguo=0;
panduan(twopic[0].x,twopic[0].y,0,-1);
if(jieguo==1)
{
mapp[twopic[0].x][twopic[0].y] = 0;
mapp[twopic[1].x][twopic[1].y] = 0;
temp1.parentNode.removeChild(temp1);
temp2.parentNode.removeChild(temp2);
zg=zg-2;
if(zg==0)
{
var today=new Date();
var h=today.getHours();
var m=today.getMinutes();
var s=today.getSeconds();
end=h*60*60+m*60+s;
alert("恭喜你,通关成功,用时:"+(end-start)+"秒!!请按F5重新开始游戏!!");
}
}
}
temp1 = null;
}
}
}
var direct =new Array(5);
for(j=0;j<5;j++) direct[j]= new Array(3);
direct[0][0]=1;direct[0][1]=0;
direct[2][0]=-1;direct[2][1]=0;
direct[1][0]=0;direct[1][1]=1;
direct[3][0]=0;direct[3][1]=-1;
//接下来用到的是DFS(深度优先搜索)对两个点进行判断能不能消除
function panduan(nowx,nowy,tj,father)
{
var i;
if(tj>2) return;
if(nowx==twopic[1].x&&nowy==twopic[1].y&&tj<=2)
{
jieguo=1;
return;
}
for(i=0;i<4;i++)
{
var xxx=nowx+direct[i][0];
var yyy=nowy+direct[i][1];
if(xxx>=0&&xxx<totcol&&yyy>=0&&yyy<totrow)
{
if((flag[xxx][yyy]==0&&mapp[xxx][yyy]==0)||(xxx==twopic[1].x&&yyy==twopic[1].y))
{
if(i%2==father%2||father==-1)
{
flag[xxx][yyy]=1;
panduan(xxx,yyy,tj,i);
flag[xxx][yyy]=0;
}
else
{
flag[xxx][yyy]=1;
panduan(xxx,yyy,tj+1,i);
flag[xxx][yyy]=0;
}
}
}
}
}
function randomOrder(targetArray)
{
var arrayLength = targetArray.length
var tempArray1 = new Array();
for (var i = 0; i < arrayLength; i ++)
{
tempArray1[i] = i;
}
var tempArray2 = new Array();
for (var i = 0; i < arrayLength; i ++)
{
tempArray2[i] = tempArray1.splice(Math.floor(Math.random() * tempArray1.length) , 1)
}
var tempArray3 = new Array();
for (var i = 0; i < arrayLength; i ++)
{
tempArray3[i] = targetArray[tempArray2[i]];
}
return tempArray3;
}
CSS部分:
* { margin:0; padding:0; font-size:12px; } #main table { border:0px solid #f0f0f0; margin:100px auto; border-collapse:collapse; } #main table td { width:45px;height:48px; border:0px solid #f0f0f0; border-collapse:collapse; text-align:center; padding:2px; } #main table td img { cursor:pointer; } .zt { font-size:30px; font-weight: bold; text-decoration: none; color: #666; font-family: "微软雅黑"; }

标签:
原文地址:http://www.cnblogs.com/zufezzt/p/4560838.html