这篇文章给大家分享的是有关如何利用原生的JavaScript实现简单拼图游戏的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。
<强>一、游戏的基础逻辑强>
想用一门语言来开发游戏,必须先了解如何使用这门语言来实现一些基础逻辑,比如图像的绘制,交互的处理,定时器等。
<强> 1,图形绘制强>
图形绘制是一切的基础,这里使用JavaScript在画布上进行绘制。即先在html中创建帆布元素,然后在JavaScript中,通过身份证拿到这个元素,并且通过帆布拿到对应的上下文环境的背景下,为后续的绘图做好准备。
& lt; canvas id=癰ackground",宽度=?50 px",身高=?50 px"祝辞& lt;/canvas>
var background =, . getelementbyid (“background"); var context =, background.getContext (& # 39; 2 d # 39;);
通过上下文的drawImage方法可以绘制图片,这里进行了相应的封装:
<强>注:强>这里要等图片加载完毕后再进行绘制,即在> var drawImageItem =,函数(指数,位置),{ var img =, new 图像(); img.src =& # 39;。/图像/dog_0& # 39;, +,字符串(指数+ 1),+,& # 39;jpg # 39;; img.onload =,(),=祝辞,{ var rect =, rectForPosition(位置); context.drawImage (img,矩形[0],,矩形[1],,矩形[2],,矩形[3]); } }
在绘制图片之后,我们还需要去动态刷新视图,否则画布就只是一张静态的图片。如果是简单的图形刷新,只需在原来的位置重新绘制,进行覆盖即可。但有时候我们只需要将原来已存在的图形清除掉,而不需要绘制新图案。比如在拼图游戏中,将一个方块移动到另一个位置后,需要清空原来的位置。
通过上下文的clearRect方法可以达到清除的目的。以下是清除画布的某个区域的代码:
var originRect =, rectForPosition(起源); context.clearRect (originRect [0], originRect [1],, originRect [2],, originRect [3]),
<强> 2,事件处理强>
有了图形的绘制后,我们还需要处理玩家的输入事件,然后根据输入事件,来决定什么时候刷新视图。输入事件可以分为3种:在手机上有触屏事件;在个人电脑上,有鼠标和键盘事件。
JavaScript中对触屏和鼠标点击的监听是一样的,都是通过画布的>//,屏幕点击 时间=background.onclick 函数(e), { };
我们可以通过e。offsetX e。offsetY来获取触控点在画布中的位置。
<强>注:强>画布的坐标原点在左上角,即左上角的坐标是(0,0)。
键盘的按键点击则是通过文档的> if (event.keyCode ==, & # 39; 37 & # 39;),{,//左//do 一些 },else if (event.keyCode ==, & # 39; 38 & # 39;),{,//上//do 一些 },else if (event.keyCode ==, & # 39; 39 & # 39;),{,//右//do 一些 },else if (event.keyCode ==, & # 39; 40 & # 39;),{,//下//do 一些 }
<强> 3,定时器强>
有时候,除了在玩家输入的时候需要去刷新视图,还需要每隔一段时间定时去刷新视图。比如在一个贪吃蛇游戏中,就需要每隔一段时间就去刷新蛇的位置。
这个时候我们就需要一个定时器,让它每隔一段时间去执行一段刷新视图的代码。我们通过setInterval方法来实现定时器功能:
setInterval(“运行(),,,100年),
上面这段代码表示每隔100毫秒,去执行一次运行方法。
<强>二、拼图的基础逻辑强>
有了游戏的基础逻辑、下面来看一下如何实现拼图的逻辑。
<强> 1,生成随机序列强>
因为不是任意序列都可以通过平移的方式来还原,所以我们不能简单地生成一个随机序列。比如1,0,2,3,4,5,6,7,8这个序列,无论怎么平移,都不可能还原。
这里采取的做法是:预先设置了4个可还原的序列,先从这4个序列中随机选取一个,然后再对序列进行模拟平移若干步骤。以此来尽可能地保证初始序列的多样性,也保证了序列的可还原性。具体代码如下:
var setupRandomPosition =,()函数,{ var list1 =,[4,, 3,, 2,, 8日,0,,7日,5日,6日,1]; var list2 =,(2, 0,, 5日,6日,8日,7日,,3,,1,,4]; var list3 =, [3, 7,, 2,,,, 1,,,,,,,, 5]; var list4 =, [3,, 2,, 4,, 1,,,,,,,, 0,, 8]; (list1 var lists =,,,用于,,list3,, list4); imageIndexForPosition =,名单[方法(math . random (), *, 4)];//,获取空位位置 var emptyPosition =, 0; for (var 小姐:=,imageIndexForPosition.length 作用;1;,小姐:祝辞=,0;,我——),{ if (imageIndexForPosition[我],==,lastIndex ()), { emptyPosition =,我; 打破; } } 时间=background.emptyPosition emptyPosition;//,随机移动次数 var times =, 10; while (——), {//,获取随机数,决定空位哪个位置进行移动 var direction =,方法(math . random (), *, 4); var target =, 1; if (direction ==, 0), { 时间=target topOfPosition (emptyPosition);,//上 },else if (direction ==, 1), { 时间=target leftOfPosition (emptyPosition);,//,左, },else if (==direction 2), { 时间=target rightOfPosition (emptyPosition);,//右 },else if (==direction 3), { 时间=target bottomOfPosition (emptyPosition);,//下 } if (target & lt;, 0, | |, target 祝辞,lastIndex()),{,//位置不合法,继续下一次循环 继续; } var result =, moveImageIfCanAtPosition(目标); if (result 祝辞=,0),{,//如果移动成功,更新空位的位置 时间=emptyPosition 目标; } } null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null如何利用原生的JavaScript实现简单拼图游戏