用javascript制作2048游戏的思路(原创若 转载请附上本链接)
一、项目已上传至github,地址:https://github.com/forjuan/2048game
二、学习了javascript基础后,想要捣鼓点东西做,做了一个自己以前很爱玩的2048游戏。经过初期的思路设计手工画了设计思路图。手工图有空在用图画出来。
实现2048的功能:1、核心:上下左右移动。
2、游戏开始,游戏结束。
3、外观实现。
4、积分(暂时没实现)
把问题分解:1.首要难点移动,将移动进行分解,分为上下左右移动;
2.用什么记录位置,怎样记录每个方块的值,边界,相同值相加?
3.我选择用一个二维数组记录位置相关信息,包括,left,top值(相对于页面的位置),用一个boolean类型value值记录该位置上是否有值。loca[i][i] = {left:***,top:***,value:false}
4.怎么记录小方块,小方块与位置间的关系?我用的是div,每个div是个小方块(样式不在此说明),每个div有x,y值用于储存div的位置信息,value:小方块的值,change:每次移动小方块是否已经相加过(这是后来出现bug想到的)。
5.先向左移动,左移每个小方块向左边移动,左边可能有两种情况:a.无值,
b.有值,有值可能有两种情况,
(1).值相同,
(2).值不同。
6.哪些值需要移动,哪些值不需要移动: 根据5知:不移动:与左边相邻第一个值不相等,或者是到左边界。其他情况都要移动
7.向左移动,则每行的每列的循环从左往右对每个方块执行移动操作(判断是否需要移动,若移动操作)
8.若要移动操作,怎么移动,(我选择用一个函数封装找到这个小方块应该到达的位置,如果它的左边第一个有值而且是相等的,则小方块的值是原来的2倍,它的位置就是左边第一有值得位置,若值不等则目标位置是左边第一有值的值的后一个位置,若它左边都无值,它的目标位置是最左边)
9.基本向左思路就是这样了。
三、编写过程中发现的bug
1.在移动过后,有的小方块,移动乱了位置,无法显示,解决bug比查找bug更简单,怎么查找bug呢,我用的排除法,用浏览器调试工具找到不见的小方块在哪里被隐藏,然后思考它前一步,分析出现这个问题的原因,再单独处理确认错误原因,最后解决问题,我的问题有我用了原生的运动的完美框架,到指定位置会有时间延迟,后面设置的位置信息先执行完,它才运动完,导致后面的设置没用。
2.小方块只有16个,所以一个小方块占用了位置,原来位置上的小方块与它交换位置。
四、版本迭代中
现在我的这个小游戏只是实现了,初步将move(top,left,down,right)封装在同一函数中,同一功能的函数也已封装,为了复用,提高性能,现在正在学习js设计模式,希望能用于该游戏中,将代码完善,提高性能,最后希望丰富该游戏的基本功能,积分,不同模式,移动时有滑动效果,手机版。有兴趣的一起捣鼓哦
用javascript制作2048游戏的思路(原创若 转载请附上本链接)的更多相关文章
- Java程序员面试宝典1 ---Java基础部分(该博文为原创,转载请注明出处)
(该博文为原创,转载请注明出处 http://www.cnblogs.com/luyijoy/ by白手伊凡) 1. 基本概念 1) Java为解释性语言,运行过程:程序源 ...
- Socket的用法——NIO包下SocketChannel的用法 ———————————————— 版权声明:本文为CSDN博主「茶_小哥」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。 原文链接:https://blog.csdn.net/ycgslh/article/details/79604074
服务端代码实现如下,其中包括一个静态内部类Handler来作为处理器,处理不同的操作.注意在遍历选择键集合时,没处理完一个操作,要将该请求在集合中移除./*模拟服务端-nio-Socket实现*/pu ...
- Apache开启状态查看页面(原创贴-转载请注明出处)
=================写在前面的话================== 场景描述:有时候我们需要查看apache的运行状态,只需要开启apache的status功能就可以实现,但是stat ...
- Apache设置页面认证(原创贴-转载请注明出处)
================写在前面的话============== 1.本试验使用的apache版本是2.4.24 场景描述:网站后台管理页面比较重要,不应该任何人都让访问,所以对后台页面做认证 ...
- 后端Apache获取前端Nginx反向代理的真实IP地址 (原创贴-转载请注明出处)
====================说在前面的话==================== 环境:前段Nginx是反向代理服务器:后端是Apache是WEB项目服务器 目的:让后端Apapche获取 ...
- Apache2.4权限配置(原创帖-转载请注明出处)
==================说在前面的话================= 1:这次实验使用的php项目是Discuz,Discuz的安装请参照:http://www.cnblogs.com/ ...
- IIC通讯协议(非原创,转载他人,用于学习)
I2C协议:1.空闲状态 2.开始信号 3.停止信号 4.应答信号 5.数据的有效性 6.数据传输 IIC详解 1.I2C总线具有两根双向信号线,一根是数据线SDA,另一根是时钟线SCL 2.IIC总 ...
- 最少javascript代码完成一个2048游戏
原生javascript代码写的2048游戏.建议在谷歌浏览器下跑.'WASD'控制方向.演示地址请移步:http://runjs.cn/detail/bp8baf8b 直接贴代码~ html: &l ...
- cocos2d-x游戏开发实战原创视频讲座系列1之2048游戏开发
cocos2d-x游戏开发实战原创视频讲座系列1之2048游戏开发 的产生 视持续更新中.... 视频存放地址例如以下:http://ipd.pps.tv/user/1058663622 ...
随机推荐
- css+div水平居中
实现div内容水平居中 实现方案一:margin:0 auto; div{ height:100px; width:100px; background:red; margin:0 auto; } &l ...
- opencv3.2.0实现连续图片合成avi视频
##名称:利用videowriter实现多张连续图片合成avi视频 ##平台:QT5.7.1+OpenCV3.2.0 ##日期:2017年12月10日 /**************新建QT控制台程序 ...
- HiveSql调优经验
背景 在刚使用hive的过程中,碰到过很多问题,任务经常需要运行7,8个小时甚至更久,在此记录一下这个过程中,我的一些收获 join长尾 背景 SQL在Join执行阶段会将Join Key相同的数据分 ...
- Django html标签make_safe
from django.utils.safestring import mark_safe a = mark_safe("<a href='#'>test</a>&q ...
- leetCode题解之寻找string中最后一个word的长度
1.题目描述 返回一个 string中最后一个单词的长度.单词定义为没有空格的连续的字符,比如 ‘a’,'akkk'. 2.问题分析 从后向前扫描,如果string是以空格‘ ’结尾的,就不用计数, ...
- ssm单项目整合
目录 前言 创建maven项目 添加依赖 配置文件 总览 jdbc配置 mybatis配置 dao层配置 service层配置 事务配置 controller配置 web.xml 使用 前言 spri ...
- spring mvc 解决跨域问题
Spring MVC 从4.2版本开始增加了对CORS的支持. 在Controller上使用@CrossOrigin注解: // 指定域名 @CrossOrigin("http://doma ...
- 使用AKLocationManager定位
使用AKLocationManager定位 https://github.com/ideaismobile/AKLocationManager 以下是使用情况: 是不是很简单呢,我们可以将它的步骤进一 ...
- Linux history命令详解
history命令用于显示指定数目的指令命令,读取历史命令文件中的目录到历史命令缓冲区和将历史命令缓冲区中的目录写入命令文件. 该命令单独使用时,仅显示历史命令,在命令行中,可以使用符号!执行指定 ...
- AppHangB1:explorer进程停止与Windows交互
现象:Windows 7,打开 “计算机” 的时候,资源管理器卡死,如图所示. 解决方法:卸载 CAD迷你看图软件,利用 CCleaner 清除注册表.