原生js的2048的制作过程
1.首先我们来看一下效果图
开始:

结束:

接下来我们来实现代码部分:
HTML部分:

2048大家应该都玩过,首先我们要准备16个盒子让它4*4排列,这里的css我就不说了,这应该使我们都会的,在这里我组要提醒一点,你们应该看到了,我对这16个命名的方式应该注意到了,为什么要这样命名,这样有规律的命名,方便我们在写js时好操作写。
2.再来看接下来的逻辑是什么样的
(1)我们的游戏一开始的时候就会在页面上产生两个随机数2或4
(2)初始化分数
(3)键盘事件(方便我们上下左右移动的);
(4)当数字相同时会相加,并把自己以前的位子清空 如下图


不相同的话:
左右移动:如果前面有数字的话,后面的数就会紧跟其后,并把自己以前的位子清空 如下图



其他方向和上面的差不多;
(5)当我们的16个格子都占满的时候且不能在相加的时候判断游戏结束
(6)并显示遮罩层使整个页面不能在操作;并显示自己的分数
大致就是这样了
3.接下来实现这些功能
(1)

这是我们准备工作和游戏开始的时候,因为我们是面向对象编程,所以我们都是在对象里面编程,
在这里提一下数组其实也是一个对象,你可把数组进行深挖,最终你会发现它也是对象
(2)获取随机数方法

其实看上面的注释已经很清楚了,在这要说的就是一个三元表达式,这就是生成随机素的核心,这里就涉及到概率的问题,我这是五五开,这里可以根据自己的概率去改;
(3)更新视图的方法

首先对行和列进行循环遍历,并找到这个数的位置坐标。并获取这个数的ID,然后再对这个数进行判断当这个数是0的时候,此时的位置为空,不管它,当它有数字的时候,此时的位置就为这个数,并获取到它的class属性,同时并把分数赋值到页面上去,此时在看游戏的状态,当游戏结束的时候并出现遮罩层,并把分数显示出来,反之就继续;
(4)游戏结束判断方法:

首先判断数组中是否有空的位置,左右判断是否有相等的数,此时有人可能不明白为什么现在行和1列长度都变成3了,简单理解,竟然是左右移动看是否相等可定是两两比较,


这就是为什么行和列要加一的原因;
前面的准备工作做完了,接下来我们就要做移动事件了
4.左移事件:

上面我就不一 一解释了
其实只要把上面的逻辑弄清楚了,右,上,下都应该可以写出来了
右:

上:

下:

5.键盘事件:

这个键盘事件的键盘值可以根据自己的想法改不一定要上下左右键
最后补充点改变this指向的3种方法的区别:
call、apply与bind区别:前两个可以自动执行,bind不会自动执行,需要手动调用
call、bind与apply区别:前两个都有无数个参数,apply只有两个参数,而且第二个参数为数组
原生js的2048的制作过程的更多相关文章
- 原生js拖拽功能制作滑动条实例教程
拖拽属于前端常见的功能,很多效果都会用到js的拖拽功能.滑动条的核心功能也就是使用js拖拽滑块来修改位置.一个完整的滑动条包括 滑动条.滑动痕迹.滑块.文本 等元素,先把html代码写出来,如下所示: ...
- 利用css+原生js制作简易钟表
利用css+原生js制作简单的钟表.效果如下所示 实现该效果,分三大块:html.javascript.css html部分html部分比较简单,定义一个clock的div,内部有原点.时分秒针.日期 ...
- 用原生JS写一个网页版的2048小游戏(兼容移动端)
这个游戏JS部分全都是用原生JS代码写的,加有少量的CSS3动画,并简单的兼容了一下移动端. 先看一下在线的demo:https://yuan-yiming.github.io/2048-online ...
- 使用 原生js 制作插件 (javaScript音乐播放器)
1.引用页面 index.html <!DOCTYPE html> <html lang="en"> <head> <meta chars ...
- 【原生JS】制作网页头部刷新进度条
之前的某次番啬看到油管上有这么一个进度条,当时觉得挺好玩,一直想着做一个试试,刚才弄了一下写了一个不算太好看的简陋版本,哈哈. (本博客刷新会头部会出现,因为并没有真正的参与到浏览器加载是否完整这个渲 ...
- 原生js制作播放器
以前 就想做一个播放器,一直没狠下心来,今天终于狠下心来,把这个做出来了(因为有点无聊) 做这个播放器 也百度了一下, 你叫我做,我肯定做不出来, 就算用jquery 我也做不出来. 以前也用过a ...
- 原生JS实现各种经典网页特效——Banner图滚动、选项卡切换、广告弹窗等
在制作网页过程中,我们可能会遇到各种常用的经典网页特效,比如Banner图片滚动.选项卡循环播放.右下角广告弹窗.评论提交展示.选项动态增删.剪刀石头布小游戏等等等...是不是感觉都见到过这些场景.那 ...
- HTML 5 +CSS3 + 原生js 做(雪花全屏飘落 + 3d旋转图)
原文:HTML 5 +CSS3 + 原生js 做(雪花全屏飘落 + 3d旋转图) 3d旋转图:主要用css3中transform属性中的rotate,translate;以及用来做舞台效果的 pers ...
- 原生JS封装Ajax插件(同域&&jsonp跨域)
抛出一个问题,其实所谓的熟悉原生JS,怎样的程度才是熟悉呢? 最近都在做原生JS熟悉的练习... 用原生Js封装了一个Ajax插件,引入一般的项目,传传数据,感觉还是可行的...简单说说思路,如有不正 ...
随机推荐
- 腾讯iphone面试题(转)
1Objective-C内部的实现 2CALayer和View的关系 3 http协议,tcp/ip 4 UITableView的那些元素是可以自定义的? 5 c语言的,定义变量,比如int,在什么情 ...
- NSURLSession的用法
-(void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event{ //[self getTest]; ...
- 引用公共页面的js函数报错
对于网站来说很多页面之间都有着大量的共享模块,如页头,页脚和用户栏等.很多时候为了方便.省事,我们在公共模块写函数,然后在别的页面里调用.但我们在引用公共的js函数时,有些可以引用,有些却报错:这是因 ...
- 用launchscreen.storyboard适配启动图方法(二)
背景 之前有写一篇实现方式比较简单的随笔用launchscreen.storyboard适配启动图方法,顺便在评论区提了一下用autolayout适配启动图的思路,现把思路和流程记录下来. 思路 整体 ...
- 在 Linux 部署多节点 Kubernetes 集群与 KubeSphere 容器平台
KubeSphere 是在 Kubernetes 之上构建的以应用为中心的企业级容器平台,所有供为用户提供简单易用的操作界面以及向导式操作方式.同时,KubeSphere Installer 提供了 ...
- 这货到底还是不是垃圾?【垃圾回收GC算法JVM篇四】
目录 1.判断对象是否存活的JVM两种计数算法 2.垃圾收集算法 3.垃圾回收算法小结 垃圾收集 Garbage Collection 通常被称为"GC", 在jvm 中,程序计数 ...
- 鲲鹏云实验-Python+Jupyter机器学习基础环境
[摘要] 介绍Ubuntu 18.04环境下Python3常用科学计算和数据分析包(numpy, scipy, matplotlib, sklearn, pandas)的安装,以及Jupyter No ...
- DevOps on DevCloud|如何采用流水线践行CI/CD理念【华为云技术分享】
[摘要] 持续集成/持续交付(CI/CD,Continuous Integration/Continuous Deployment)在DevOps CMALS理念中具有支柱性地位,因而CI/CD流水线 ...
- Seata AT 模式启动源码分析
从上一篇文章「分布式事务中间件Seata的设计原理」讲了下 Seata AT 模式的一些设计原理,从中也知道了 AT 模式的三个角色(RM.TM.TC),接下来我会更新 Seata 源码分析系列文章. ...
- HDU5973 Game of Geting Stone(威佐夫博弈)
Two people face two piles of stones and make a game. They take turns to take stones. As game rules, ...