二话不说,先上效果图以及源代码~
html代码
xml/html code
复制内容到剪贴板
<!doctypehtml><htmllang=“en”><head><metachart=“utf-8”/><scripttype=“tex冬至介绍t/javascript”src=“chp1_guess_the_letter.js”></script><scripttype=“text/javascript”src=“modernizr.custom.99886.js”></script></head><body><canvasid=“canvas_guess_the_letter”width=“500”height=“300”>你的浏览器不支持html5canvas </canvas><form><inputtype=“button”id=“createimagedata”value=“exportcanvasimage”/>; </form></body></html>js代码
javascript code
复制内容到剪贴板
/** *@authorrafael */window.addeventlistener(“load”,eventwindowloaded,fal); vardebugger=function(){ }; debugger.log=function(message){ try{ console.log(message); }catch(exception){ return; } } functioneventwindowloaded(){ canvasapp(); } functioncanvassupport(){ returnmodernizr.canvas; } functioncanvasapp(){ varguess=0; varmessage等于多少数学e=“guesstheletterfroma(lower)toz(higher)”; varletters=[“a”,“b”,“c”,“d”,“e”,“f”,“g”,“h”,“i”,“j”,“k”,“l”, “m”,“n”,“o”,“p”,“q”,“r”,“s”,“t”,“u”,“v”,“w”,“x”,“y”,“z”]; vartoday=newdate(); varlettertoguess=“”; varhigherorlower=“”; varletterguesd=[]; vargameover=fal; if(!canvassupport()){ return; } varthecanvas=document.getelementbyid(“canvas_guess_the_letter”); varcontext=thecanvas.getcontext(“2d”); initgame(); functioninitgame(){ varletterindex=math.floor(math.random()*letters.length); lettertoguess=letters[letterindex]; guess=0; lettersguesd=[]; gameover=fal; window.addeventlistener(“keyup”,eventkeypresd,true); varformelement=document.getelementbyid(“createimagedata”); formelement.addeventlistener(‘click’,createimagedatapresd,fal); drawscreen(); } functioneventkeypresd(e){ if(!gameover){ varletterpresd=string.fromcharcode(e.keycode); letterpresd=letterpresd.tolowerca(); guess++; letterguesd.push(letterpresd); if(letterpresd==lettertoguess){ gameover=true; }el{ letterindex=letters.indexof(lettertoguess); guessindex=letters.indexof(letterpresd); if(guessindex<0){ higherorlower=“请输入正确的字符”; }elif(guessindex<letterindex){ higherorlower=“小了”; }el{ higherorlower=“大了”; } } drawscreen(); } } functiondrawscreen(){this英语怎么读 //背景 context.fillstyle=“#ffffaa”; context.fillrect(0,0,500,300); //箱子 context.strokestyle=“#000000”; context.strokerect(5,5,490,290); context.textbaline=“top”; //日期 context.fillstyle=“#000000”; context.font=“10px_sans”; context.filltext(today,150,20); //消息 context.fillstyle=“#ff0000”; context.font=“14px_sans”; context.filltext(message,125,40); //猜测次数 context.fillstyle=“#109900”; context.font=“16px_sa从容面对ns”; context.filltext(“猜测次数:“+guess,215,60); //大还是小 context.fillstyle=“#000000”; context.font=“16px_sans”; context.filltext(“大还是小:“+higherorlower,150,135); //已经猜测的字符 context.fillstyle=“#ff0000”; context.font=“16px_sans”; context.filltext(“已经猜测的字符:“+letterguesd.tostring(),10,260); if(gameover){ context.fillstyle=“#ff0000”; context.font=“40px_sans”; context.filltext(“你猜中了”,150,180); } } functioncreateimagedatapresd(e){ window.open(thecanvas.todataurl(),“canvasimage”,“left=0,top=0,width=”+thecanvas.width+“,height=”+thecanvas.height+“,toolbar=0,resizable=0”); } }从游戏名称可以看出,该游戏是猜字游戏。每局系统都会自动生成一个字母,玩家会按键盘来猜测该字母是哪一个。
例如生成的是s,玩家按了h,则游戏就会提示《小了》,因为英文字母当中h的索引比s的索引更靠前。
案例当中涉及的变量。
guess:猜测次数
message:文字提示,指导用户如何玩该游戏
letters:文字数组,存放我们要猜测的文字的集合。这个例子用的是a到z
today:今天的日期
lettertoguess:要猜测的文字
higherorlower:是《大了》还是《小了》
letterguesd:已经猜测过得文字
gameover:游戏是否结束,是布尔变量,开始的时候是fal,猜对后设为true
变量的声明
javascript code
复制内容到剪贴板
varguess=0; varmessage=“guesstheletterfroma(lower)toz(higher)”; varletters=[“a”,“b”,“c”,“d”,“e”,“f”,“g”,“h”,“i”,“j”,“k”,“l”, “m”,“n”,“o”,“p”,“q”,“r”最具性价比手机;,“s”,“t”,“u”,“v”,“w”,“x”,“y”,“z”]; vartoday=newdate(); varlettertoguess=“”; varhigherorlower=“”; varletterguesd=[]; vargameover=fal;初始化游戏
javascript code
复制内容到剪贴板
functioninitgame(){ varletterindex=math.floor(math.random()*letters.length); lettertoguess=letters[letterindex]; guess=0; lettersguesd=[]; gameover=fal; window.addeventlistener(“keyup”,eventkeypresd,true); varformelement=document.getelementbyid(“createimagedata”); formelement.addeventlistener(‘click’,createimagedatapresd,fal); drawscreen(); }通过使用math的random()函数和floor()函数,根据文字的数组生成要猜测的文字。
并且当用户按键盘的时候监听《keyup》事件,根据传递过来的event,生成按下的键值。
因猜测游戏对大小写不敏感,为防止用户按大写字母,我们需要把值转换成小写形式。
猜测次数+1
猜测出来的文字添加到已经猜测的文字数组当中
javascript code
复制内容到剪贴板
varletterpresd=string.fromcharcode(e.keycode); letterpresd=letterpresd.tolowerca(); guess++; letterguesd.push(letterpresd); 剩下的就只有判断 大和小了。
通过indexof函数 我们可以判断要猜测的文字和我们输入的文字在字符集上面的索引值。
如果我们输入的更靠前则提示《小了》反之《大了》
最终用户猜对了要猜测的文字 我们会在中央用大号字体显示《你猜对了》
javascript code
复制内容到剪贴板
letterindex=letters.indexof(lettertoguess); guessindex=letters.indexof(letterpresd); if(guessindex<0){ higherorlower=“请输入正确的字符”; }elif(guessindex<letterindex){ higherorlower=“小了”; }el{ higherorlower=“大了”; }至此这个功能差不多完成了吧,我们还有一个小功能,那就是通过按下按钮的方式可以把屏幕结果抓去出来。
用的函数为todataurl(),有兴趣的朋友研究一下。