接下来又学习了html5,其实主要练习的是html5的canvas,下面是用基于html5的canvas标签写的连连看游戏。
<!DOCTYPE html> <meta charset="utf-8"> <script> var cwidth=120;//画布的宽 var cheight=600;//画布的高 var firstpick=true;//是否是第一次挑选 var firstPic=-1//选出的第一张图片序号 var secondPic;//选出的第二张图片序号 var tablecolor="rgb(255,255,255)";//页面颜色 var firstpicx=200;//第一张图片x坐标 var firstpicy=50;//第一张图片y坐标 var picwidth=50;//图片宽 var picheight=50;//图片高 var pic=[];//存放图片的数组 var matched;//第一张和第二张图片是否匹配 var num=45;//匹配对数 var context; var tid; var music;//点击时所播放的音乐 var starttime;//记录游戏开始时间 var scores=0;//记录得分 var time;//记录游戏已经用过的时间 var award=[["5xing.png"],["4xing.png"],["3xing.png"],["2xing.png"],["1xing.png"]]; function Card(picx,picy,picw,pich,img,picindex,code){//code属于图片,而picindex属于位置 this.picx=picx; this.picy=picy; this.picw=picw; this.pich=pich; this.img=img; this.picindex=picindex; this.draw=drawPic; this.code=code; } function drawPic(){ context.drawImage(this.img,this.picx,this.picy,this.picw,this.pich); } function makepic(){ var picture; var image; var px=firstpicx; var py=firstpicy; for(var i=1;i<=45;i++){ if(px>firstpicx+450){ px=firstpicx; py+=50; } image=new Image(); image.src=i+".png"; picture=new Card(px,py,picwidth,picheight,image,2*i-1,i); pic.push(picture); px+=50; image.src=i+".png"; picture=new Card(px,py,picwidth,picheight,image,2*i,i); pic.push(picture); px+=50; } } function shuffle(){ var i; var k var holderindex; var holderimage; for(var n=0;n<3*pic.length;n++) { i=Math.floor(Math.random()*pic.length); k=Math.floor(Math.random()*pic.length); holderindex=pic[i].code; holderimage=pic[i].img; pic[i].code=pic[k].code; pic[i].img=pic[k].img; pic[k].code=holderindex; pic[k].img=holderimage; } for(var n=0;n<pic.length;n++){ pic[n].draw(); } } function choose(ev){ var mx; var my; //取得鼠标点击位置的坐标 if(ev.layerX||ev.layerX==0){//Firefox mx=ev.layerX; my=ev.layerY; }else if(ev.offsetX||ev.offsetX==0){ mx=ev.offsetX; my=ev.offsetY; } //检查哪一张图片被点击了 var i; for(i=0;i<pic.length;i++){ if(pic[i].picx>0)//pic[i]=-1说明此处的图片已完成配对 if((mx>=pic[i].picx)&&(mx<=pic[i].picx+picwidth)&&(my>=pic[i].picy)&&(my<=pic[i].picy+picheight)) if((firstpick)||i!=firstPic) break; } if(i<pic.length){ if(firstpick)//如果是选的第一张 { firstPic=i; firstpick=false; } else{//如果是选的第二张 secondPic=i; if(pic[i].code==pic[firstPic].code){ matched=true; } else{ matched=false; } firstpick=true; setTimeout(flipback,100); } } } function flipback() { if (matched) { music.play(); scores++; context.font="bold 35px comic sans ms"; context.fillStyle="#F00";//实体字的颜色 context.clearRect(935,350,100,100); context.fillText(scores,950,380); context.clearRect(pic[secondPic].picx,pic[secondPic].picy,picwidth,picheight); context.clearRect(pic[firstPic].picx,pic[firstPic].picy,picwidth,picheight); pic[firstPic].picx=-1; pic[secondPic].picx=-1; if(scores==45){ context.clearRect(200,150,500,500); var awardstar=new Image(); if(time<=90){ awardstar.src=award[0]; context.drawImage(awardstar,30,200,790,150); } else if(time<=120){ awardstar.src=award[1]; context.drawImage(awardstar,0,200,780,150); } else if(time<=180){ awardstar.src=award[2]; context.drawImage(awardstar,0,200,780,150); } else if(time<=240){ awardstar.src=award[3]; context.drawImage(awardstar,0,200,780,150); } else if(time<=300){ awardstar.src=award[4]; context.drawImage(awardstar,0,200,780,150); } else{ context.font="bold 50px comic sans ms"; context.fillStyle="#F00";//实体字的颜色 context.fillText("You are too slow!Come On!",0,200); } return; } } } function GetTime(){ var endtime=new Date(); time=Math.floor((endtime-starttime)/1000+0.5); context.font="bold 35px comic sans ms"; context.fillStyle="#ccc";//实体字的颜色 context.clearRect(935,250,100,100); context.fillText(time,950,300); if(scores==45){ clearInterval(tid); } } function drawText(){ context.font="bold 50px comic sans ms"; context.fillStyle="#F00"; context.fillText("连连看",800,100); context.font="bold 35px comic sans ms"; context.strokeStyle="#666";//空心字的颜色 context.strokeText("TIMES:",800,300); context.strokeText("SCORES:",780,380); } function init(){ context=document.getElementById("canvas").getContext("2d"); drawText(); canvas1 = document.getElementById('canvas'); canvas1.addEventListener('click',choose,false); makepic(); shuffle(); music = document.getElementById("music"); starttime=new Date(); GetTime(); tid=setInterval(GetTime,1000,false); } </script> <html> <body onLoad="init()"> <canvas id="canvas" width="1200" height="600"> Your brower doesn't support the canvas. </canvas> <audio id="music" autobuffer> <source src="awooga.ogg" /> </audio> </body> </html>
当点击两张相同的小图片时,这两张图片会消失,同时会响起“植物大战僵尸”游戏特有的音效,右侧有计时和所得分数。
这其实并不能算真正意义上的连连看,因为相隔很远的两张图片不管之间有没有障碍物,依旧可以配对成功。其中的算法还有待研究啊!