用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 ...
随机推荐
- 卷积神经网络(CNN)在语音识别中的应用
前言 总结目前语音识别的发展现状,dnn.rnn/lstm和cnn算是语音识别中几个比较主流的方向.2012年,微软邓力和俞栋老师将前馈神经网络FFDNN(Feed Forward Deep Neur ...
- Session、Cookie简单理解
Session: session是一种记录客户状态的机制,session是保存在服务器上的,当浏览器访问服务器的时候,服务器把客户端信息以某种形式记录在服务器上,这就是所谓的session,当浏览器再 ...
- spring <context:annotation-config/> 注解作用
<context:component-scan>包含<context:annotation-config/>的作用 <context:annotation-config/ ...
- java基础(十) 数组类型
1. 数组类简介 在java中,数组也是一种引用类型,即是一种类. 我们来看一个例子,理解一下数组类: public static void main(String[] args) { Class ...
- 【转】SSL协议详解
作者:朱祁林 出处:http://zhuqil.cnblogs.com 原文链接 背景介绍 最近在看<密码学与网络安全>相关的书籍,这篇文章主要详细介绍一下著名的网络安全协议SSL. ...
- JQuery this和$(this)的区别
this其实是一个Html 元素. $this 只是个变量名,加$是为说明其是个jquery对象. 而$(this)是个转换,将this表示的dom对象转为jquery对象,这样就可以使用jquery ...
- Jmeter 测试 JMS (Java Message Service)/ActiveMQ 性能
前言 JMS介绍:JMS即Java消息服务(Java Message Service)应用程序接口,是一个Java平台中关于面向消息中间件(MOM)的API,用于在两个应用程序之间,或分布式系统中发送 ...
- 记录今天客户的SQLSERVER启动不起来( 错误9003)的解决过程2013-11-26
记录今天客户的SQLSERVER启动不起来( 错误9003)的解决过程2013-11-26 今天一大早上班就接到客户的电话,说:SQLSERVER启动不起来,业务系统使用不了 于是我就使用QQ远程,帮 ...
- vim和xshell配色
xshell配色: http://www.hookr.cn/xshell-pei-se.html vim配色: 参考该文中的配置方法,包括设置256色等.http://www.cnblogs.com/ ...
- int to string & string to int
#include "stdafx.h" #include <string> #include <sstream> using namespace std; ...