JavaScript小游戏--翻牌记忆游戏

翻牌记忆游戏源码

1.有8张图片,每张图片要放两次,生成如下数组,长为16,[0,1,2,3,4,5,6,7,0,1,2,3,4,5,6,7] 其中两两相同的代表两张相同的图片,0对应文件夹image下的0.jpg,其余类似。

var randArr = [];
            for(var j = 0; j < 2;j++){
                for (var i = 0; i < m; i++) {
                    randArr.push(i);
                }
            }

2.将上面的数组传入random(),将数组内容打乱,即将图片打乱(随机交换位置)。

function random(data){
            //随机打乱数组
               for(var i = data.length-1; i >=0; i--){
                var randomIndex = Math.floor(Math.random()*(i+1));
                var itemAtIndex = data[randomIndex];
                data[randomIndex] = data[i];
                data[i] = itemAtIndex;
            }
        } 

16个位置,概率问题,第一个位置,16选1,第二个位置15选1...最后一个1选1.所以i值要由大变小

3.为了将图片在屏幕上显示,应创建一个二维数组,然后将打乱后的图片数组传入。

注意:JS是不允许多维数组的,所谓的二维数组是数组嵌套。如var test = [["0","0"],["1","1"],["2","2"]],对于理解程序中的map()嵌套比较重要。

function arrs(n,data){
            //生成坐标“二维”数组
            var arr = [];
            for (var i = 0; i < n; i++){
                arr[i] = [];
                for(var j = 0; j < n; j++){
                    arr[i].push(j);
                }
            }
            //把打乱的数组放入“二维”数组里
            var i = 0;
            var res = arr.map(function(ba){
              return ba.map(function(bb){
                   i++
                   return data[i-1]
               });
            });
            img(res)
        }

3.1 对其中map()遍历的说明

其有返回值,可以return

arr[].map(function(value,index,array){

  //do something

  return XXX

})

参数:value数组中的当前项,必须;index当前项的索引,array原始数组,后两个可选;

map的回调函数中支持return返回值,return的是XXX,相当于把数组中的这一项变为XXX(并不影响原来的数组,只是相当于把原数组克隆一份,把克隆的这一份的数组中的对应项改变了)

var ary = [12,23,24,42,1];
var res = ary.map(function (item,index,input) {
    return item*10;
})
console.log(res);//-->[120,230,240,420,10];  原数组拷贝了一份,并进行了修改
console.log(ary);//-->[12,23,24,42,1];  原数组并未发生变化

3.2  map()的在该游戏中的应用

var res = arr.map(function(ba){
              return ba.map(function(bb){
                   i++;
                   return data[i-1];
               });
            });

arr()是“二维”数组,这就是map()嵌套的原因,若为4X4的数组[[xx,xx,xx,xx],[xx,xx,xx,xx],[xx,xx,xx,xx],[xx,xx,xx,xx]]黄色阴影部分执行第二个map(),返回后产生一个新的数组[YY,YY,YY,YY],依次执行,4个嵌套的数组执行完后,又产生一个新的数组[[YY,YY,YY,YY],[YY,YY,YY,YY],[YY,YY,YY,YY],[YY,YY,YY,YY]],赋给res。

至此,每张图片都有了自己的坐标。

4.将图片显示

function img(resdata){
            //根据坐标显示图片
            var newImg = [];
            for(var i = 0; i < resdata.length; i++){
                for(var j = 0; j < resdata[i].length;j++){
                     newImg.push(  resdata[i][j]);
                }
            }
            for (var i = 0; i < newImg.length; i++) {
                var str = "<li value="+newImg[i]+">"+ i +"</li>";
                $("#grid").append(str);
                $(‘li:eq(‘+ i +‘)‘).html("<div class=‘pai‘><div class=‘back‘ ><img src=‘./image/" + newImg[i] + ".jpg‘ width=‘100%‘></div><div class=‘front‘><img src=‘./image/all.jpg‘ width=‘100%‘></div></div>");
            };
        }

理解了数组嵌套,resdata.length才不会理解出错。

:eq() 选择器选取带有指定 index 值的元素。

给pai(牌)的背面和正面加上图片,数组中的0,1,2,3,4,5,6,7对应文件夹下的0.jpg,1.jpg等.

最开始的randArr[](代表文件夹下图片的数组) -> data[](随机打乱后的数组)-> res[给每个图片一个坐标]-> newImg[](显示图片)

把“二维”数组变为一维数组newImg[],所以newImg.length为16.而newImg[i]是0-7中的一个。

reload 方法,该方法强迫浏览器刷新当前页面。
语法:location.reload([bForceGet])参数: bForceGet, 可选参数, 默认为 false,从客户端缓存里取当前页。 true, 则以GET 方式,从服务端取最新的页面, 相当于客户端点击 F5("刷新")

时间: 2024-10-20 15:03:01

JavaScript小游戏--翻牌记忆游戏的相关文章

使用AxureRP7.0制作经典数独小游戏原型,axure游戏原型下载

之前,有同学在Q群中提问,如何使用axure制作经典数独解谜小游戏,当时由于时间关系没有来得及亲手制作,而是给同学们提供了Axure6.5版本的一个数独解谜游戏的原型,本教程由axure原型库网站录制,转载请注明出处!但是那个原型做的太过繁杂,所以仅供大家参考交流:在此,金乌老师特地抽时间给同学们使用AxureRP7.0制作了一下,感觉对实战逻辑分析和axure变量的掌握比较有考验,所以就放出来供大家学习交流使用. 在学习的过程中,如果你仅凭自己现有的对axure的掌握,无法准确分析并组织出原型

二分图 [ZJOI2007] 小Q的矩阵游戏

[问题描述] 小Q是一个非常聪明的孩子,除了国际象棋,他还很喜欢玩一个电脑益智游戏--矩阵游戏.矩阵游戏在一个N*N黑白方阵进行(如同国际象棋一般,只是颜色是随意的).每次可以对该矩阵进行两种操作: l 行交换操作:选择矩阵的任意两行,交换这两行(即交换对应格子的颜色) l 列交换操作:选择矩阵的任意两列,交换这两列(即交换对应格子的颜色) 游戏的目标,即通过若干次操作,使得方阵的主对角线(左上角到右下角的连线)上的格子均为黑色. 对于某些关卡,小Q百思不得其解,以致他开始怀疑这些关卡是不是根本

最少javascript代码完成一个2048游戏

原生javascript代码写的2048游戏.建议在谷歌浏览器下跑.'WASD'控制方向.演示地址请移步:http://runjs.cn/detail/bp8baf8b 直接贴代码~ html: <!DOCTYPE> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/htm

bzoj 1022: [SHOI2008]小约翰的游戏John anti_nim游戏

1022: [SHOI2008]小约翰的游戏John Time Limit: 1 Sec  Memory Limit: 162 MBSubmit: 1189  Solved: 734[Submit][Status] Description 小 约翰经常和他的哥哥玩一个非常有趣的游戏:桌子上有n堆石子,小约翰和他的哥哥轮流取石子,每个人取的时候,可以随意选择一堆石子,在这堆石子中取走任意 多的石子,但不能一粒石子也不取,我们规定取到最后一粒石子的人算输.小约翰相当固执,他坚持认为先取的人有很大的优

[ZJOI2007] 小Q的矩阵游戏【解题报告】

戳我 660. [ZJOI2007] 小Q的矩阵游戏 ★★☆   输入文件:qmatrix.in   输出文件:qmatrix.out   简单对比时间限制:1 s   内存限制:128 MB [问题描述] 小Q是一个非常聪明的孩子,除了国际象棋,他还很喜欢玩一个电脑益智游戏——矩阵游戏.矩阵游戏在一个N*N黑白方阵进行(如同国际象棋一般,只是颜色是随意的).每次可以对该矩阵进行两种操作: l 行交换操作:选择矩阵的任意两行,交换这两行(即交换对应格子的颜色) l 列交换操作:选择矩阵的任意两列

游戏编程与游戏种类

游戏编程指利用计算机编程语言,如C编程语言.C++.java等,编写计算机.手机或游戏机上的游戏. 目前流行的游戏编程语言为C++编程语言,目前流行的游戏编程接口为DirectX9.0,还有OpenGL.SDL(Simple DirectMedia Layer)等.现在手机上玩的游戏分为Android与IOS两种不同平台,分别是用eclipse/MyEclipse和xcode.现在也流行一些跨平台的编程引擎,例如cocos2d-x.unity 3D等. 简介 游戏编程指利用计算机编程语言,如C编

网页版《2048游戏》教程 - 游戏优化

1.     GameOver部分 下面我们来分析游戏是如何结束的.一种情况是棋盘格中没有空的格子了,一种情况是棋盘格中没有可以移动的格子了. 首先,完成isgameover()方法的逻辑. function isgameover() { if (nospace(board) && nomove(board)) { gameover(); } } 其次,完成棋盘格中没有空的格子. function nospace(board) { for (var i = 0; i < 4; i++

我来谈谈我的游戏经历和“游戏三境界”

说到三境界,很多人怕是首先想到王国维: 王国维在<人间词话>说:古今之成大事业.大学问者,必经过三种之境界:"昨夜西风凋碧树.独上高楼,望尽天涯路."此第一境也. "衣带渐宽终不悔,为伊消得人憔悴."此第二境也. "众里寻他千百度,蓦然回首,那人却在灯火阑珊处."此第三境也.此等语皆非大词人不能道.然遽以此意解释诸词,恐为晏欧诸公所不许也." 如果上面看不太懂的,请自行百度吧:)   由此我也想要总结一下我玩游戏的三境界:玩

直接操作游戏对象C#游戏开发

直接操作游戏对象C#游戏开发 2.2.3  直接操作游戏对象 在Inspector视图里通过设置属性而改变游戏场景中游戏对象的状态,太过抽象,毕竟数字并不够直观.其实,改变游戏对象的状态,完全有最最直观,最最简单的方法,那就是在Scene视图里,直接使用鼠标操作游戏对象直接操作游戏对象C#游戏开发本文选自C#游戏开发快速入门大学霸. 在Unity的左上角,有个工具栏,它显示了4个按钮,如图2-10所示.分别表示拖动Scene视图.改变游戏对象的位置.朝向和大小直接操作游戏对象C#游戏开发本文选自