一、界面展示及简单介绍

先上完成后不同尺寸屏幕下的效果图,界面模仿的原版2048:

(768px<屏幕)

(500px<屏幕<768px)

(小于500px的超小屏幕)

原来预想左边是游戏列表,右边是排行榜,暂时没有做。

整体使用了bootstrap的栅格布局,左右两列在xs尺寸下隐藏,中间列独占12格。

在屏幕小于500px的时候额外设置样式:

@media screen and (max-width: 500px){...
}

动画效果的实现学习了慕课网的2048课程,也算学习了一种新思路。

其它效果:

·手机端的滑动操作

·页面放大缩小格子跟随移动

二、主要实现函数

这里就只贴出主要的代码,尽量增加注释,让大家更好地理解实现逻辑。完整项目代码可以在文章末尾的github地址中clone。

1.移动的逻辑,以向左移动为例

//判断是否可以移动 board为4*4对应格子的数组
function canMoveLeft(){for (let i = 0; i<4; i++){for (let j = 1; j<4; j++){//最左边的格子无法移动不用考虑if(board[i][j] != 0)//必须为有数字的格子//左侧相邻格子是否为空格或数字相等if (board[i][j-1] == 0 || board[i][j-1] == board[i][j])return true}}return false
}function moveLeft() {if(!canMoveLeft())//判断是否可以左移return;for(let x = 0; x<4; x++){//merged数组对应该行四个格子,判断是否已经合并过,避免[2,2,2,2]合并为[8,0,0,0]之类情况var merged = [false,false,false,false];for(let y = 1; y<4; y++) {if (board[x][y] !=0){//当前行从左至右寻找有数字点var currentnum = board[x][y]; //当前移动点的数字var last = y; //当前点移动或寻找合并的过程中记录当前位置for(var n = y-1; n>=0; n--){//从当前点左侧相邻格开始往左寻找空格或可合并格if(board[x][n] == 0){board[x][n] = currentnum;board[x][last] = 0;last = n;continue;}else if(board[x][n] == currentnum && !merged[n]){board[x][n] = currentnum * 2;score+= currentnum * 2;board[x][last] = 0;last = n;merged[n] = true;continue;}elsebreak;//相邻格不能移动和合并直接结束}moveAnimation(x,y,x,n+1,merged[n+1])//移动动画}}}setTimeout("updateBoardView()",200) //移动完成后更新视图setTimeout("ranNumber()",200)//等待移动动画完成后再生成新数字
}

2.动画效果的实现

实现思路为原本在html中写的16个div格子(grid-cell)只用来实现视觉效果,实际并没有对这16个格子进行操作,而是在每次根据二维数组board记录的数据生成16个position=absolute的div(number-cell),number-cell不显示时大小都为0,位置都在对应实grid-cell的中心,在生成数字或移动时使用animate方法对number-cell进行操作,动画结束后再更新视图,代码如下:

function updateBoardView() { //更新显示$(".number-cell").remove();for (let i =0; i < 4; i++)for (let j = 0; j<4; j++){$(".grid-container").append('<div class="number-cell" id="number-cell-'+i+'-'+j+'"></div>');var theNumberCell = $('#number-cell-'+i+'-'+j);if(board[i][j] == 0){theNumberCell.css('width','0px');theNumberCell.css('height','0px');theNumberCell.css('top',getPosTop(i)+cellSize/2);theNumberCell.css('left',getPosLeft(j)+cellSize/2);}//cellSize为每个格子的长宽 cellSpace为每个格子之间的间距else {theNumberCell.css('width',cellSize);theNumberCell.css('height',cellSize);theNumberCell.css('top',getPosTop(i));theNumberCell.css('left',getPosLeft(j));theNumberCell.css('background-color',getCellColor(board[i][j]));theNumberCell.css('color',getNumColor(board[i][j]));theNumberCell.text(board[i][j]);}}
}

移动动画代码:

//传入起始点坐标,终点坐标及是否是合并点
function moveAnimation(fromx,fromy,tox,toy,merged) { //移动动画var numberCell = $('#number-cell-'+fromx+'-'+fromy);numberCell.animate({top:getPosTop(tox),//根据行数确定top距离left:getPosLeft(toy)//根据列数确定left距离},100)if (merged){ //合并动画 胀大再还原的过程numberCell.animate({width:cellSize+cellSpace*2,height:cellSize+cellSpace*2,top:getPosTop(tox)-cellSpace,left:getPosLeft(toy)-cellSpace},50)numberCell.animate({width:cellSize,height:cellSize,top:getPosTop(tox),left:getPosLeft(toy)},50)}
}

三、总结

整个游戏在整体的逻辑实现上会花费比较久的时间,另一个难点就是动画的实现,幸好慕课网的教程给出了一种解决思路,总体来说2048还是一个比较简单的项目。

项目完整代码github地址:https://github.com/GaoMinjian/2048

项目在线体验地址一:https://gaominjian.github.io/2048/index.html

项目在线体验地址二:http://112.74.53.108/2048/

h5游戏:适应不同尺寸屏幕的WEB2048相关推荐

  1. H5游戏开发很重要,后台可控可测,超圣刷流水,招代理稳赢

    H5游戏开发很重要,后台可控可测,超圣刷流水,招代理稳赢 不想出去打工?不行出去被老板指手画脚?轻松兼职,家中工作,刷流水一万得200,微信游戏包赢,牛牛,金花,三公各大游戏.VX244107639, ...

  2. H5游戏开发:推金币

    近期参与开发的一款「京东11.11推金币赢现金」(已下线)小游戏一经发布上线就在朋友圈引起大量传播.看到大家玩得不亦乐乎,同时也引发不少网友激烈讨论,有的说很带劲,有的大呼被套路被耍猴(无奈脸),这都 ...

  3. createjs开发h5游戏: 指尖大冒险

    之前看到一个指尖冒险游戏,觉得挺有意思,就想学习一下怎么实现,毕竟当产经提出类似的需求时,问我等开发可不可以实现的时候,不至于回答不知道. 本文的主要思路,参考的是凹凸实验室的这篇文章:H5游戏开发: ...

  4. python h5游戏_从零开始制作H5人脸融合小游戏

    去年的建军节,一个展示军装照的H5人脸融合游戏火遍朋友圈,带来很好的传播效果.最近欧冠决赛要来了,公司决定做一个寻找和你最像的欧冠球星的H5游戏,那么该怎么做呢?认真分析了一下,这个游戏其实用到的技术 ...

  5. H5案例分享-H5游戏跳跃类玩法分享

    又到了每周一次的精品游戏分享时间!这是一款TOM游戏出品的html5实现的跳跃过关类小游戏.小编发现最近朋友圈很多人都在玩儿跳跃类h5游戏,天空熊猫.粽子哪里跑.跳跳犬等小游戏,为什么跳跃类游戏如此受 ...

  6. 创意h5游戏案例:记忆类H5手机游戏评测

    翻牌记忆类游戏模式深受广大玩家的喜爱,TOM游戏在年末之际为大家带来了一款翻牌记忆类的游戏,此作品也极有可能成为今年H5游戏经典的代表作之一,如果你在游戏过程中有更加深层次的对于该款游戏的经验心得,欢 ...

  7. 技术干货丨《大天使之剑H5》主程与项目总监:H5游戏的压缩与优化经验

    2019独角兽企业重金招聘Python工程师标准>>> 2018年3月,三七互娱在其主办的中国国际互动娱乐大会上称,<大天使之剑H5>最高单日流水超4000万元,而单月最 ...

  8. 极光会客厅:大型H5游戏如何登陆微信小游戏及游戏性能优化分享

    上周末,由极光网络主办的首期"极光会客厅"正式开门迎客.在本次的"2D小游戏开发实战技术沙龙"上,极光网络客户端主程陈策以及极光网络项目总监陈源向一众与会者分享 ...

  9. 项目:漫漫H5游戏-抓娃娃机

    项目信息 时间:2016.2-2016.3 该项目是为漫漫App做营销推广的方式之一:在CentOS+Tomcat+JDK+MySQL的服务器环境下用Html5 canvas+JQuery+Java等 ...

最新文章

  1. 漫谈C#之关键字(1)
  2. AHOI(十二省联考)2019 退役记
  3. c语言中左右对齐的作用,c语言中右对齐的符号
  4. LTI系统的物理可实现性与希尔伯特变换
  5. vue动态切换css文件_vue实现样式之间的切换及vue动态样式的实现方法
  6. net中 css 控制 GridView 样式
  7. php点击导入选择文件,关于怎么选定一个文件并打开的有关问题
  8. C++ vector 内存分配与回收机制
  9. linux数据库redis主从配置,redis介绍及主从配置
  10. docker 权限问题 Got permission denied while trying to connect to the Docker daemon socket at 。。。
  11. 批量修改密码脚本--------小练习
  12. 队列的图文介绍及C/C++的实现实例(转自http://www.cnblogs.com/skywang12345/p/3562279.html)
  13. Windows10 添加打印机
  14. 布尔逻辑析取范式思考
  15. 番茄助手 Visual Assist X 下载安装及使用
  16. gitpc段提交失败schannel: next InitializeSecurityContext failed: Unknown error (0x80092013
  17. 【层级多标签文本分类】HFT-CNN: Learning Hierarchical Category Structure for Multi-label Short Text Categorizati
  18. 2.15 Spring Framework 5.x 之ApplicationContext附加功能
  19. c语言编写水仙花数代码
  20. STM32蜂鸣器及按键的程序编写

热门文章

  1. 【项目】实现网页搜索框功能
  2. 杂谈(2)为什么穷人家难翻身?
  3. Flutter-随机迷宫生成和解迷宫小游戏
  4. CVPR2018资源汇总
  5. 如何让一个程序开机自启
  6. 最详细的力扣sql解析
  7. 用python计算绩点的代码_计算学生的平均绩点GPA的python代码
  8. 读书的心情总是那么好,心情愉悦
  9. LeetCode658-找到k个最接近的元素
  10. 华一汽车科技中控大屏的发展