4096!——化简的2048游戏[通俗易懂]

4096!——化简的2048游戏

大家好,又见面了,我是全栈君。

游戏介绍:

这个能轻松到达 4096. 所以取名为 4096了。

github地址是:https://github.com/chilly/4096

假设想直接玩游戏訪问 4096.chillyc.info

这个4096 是直接copy的2048。 这个游戏须要消耗比較多的脑力。当然费了脑力还要拼拼运气。

原因在于生成随机方块的地方90%会生成2,10%会生成4. 最后一搏的那个方块非常有可能会由于2。4生成的问题导致游戏失败。

为什么要做这个游戏

这个原因事实上是为让LP打到更高的分数。当然还要有些难度。不能移动一个方块瞬间就变成8192。

还得让LP不能由于运气不佳挂掉。戴着枷锁跳呀跳。所以直接改了2048的源代码。

2048这款游戏怎么做的?

事实上非常细节的,我也没有细致的研究。

2048这个游戏代码量不大。最基本的两个类是game_manager.js 和 grid.js。游戏的主要流程:

  1. 界面接收到keyboard的请求
  2. 交给game_manager的move函数
  3. 推断游戏是否失败
  4. merge tile(也就是merge 色块) 
  5. move tile 
  6. 最后生成在随机的位置生成随机的 tile(2或者4)
  7. 继续监听keyboard请求

怎么做4096这款游戏

做这款游戏的重点是要去除霉运。添加好运

以下做了几点优化点:

1. 真没有什么能够优化的点时,对4产生的概率添加一下。提高到50%。简单暴力

2. 生成的2须要在2旁边,生成的4须要在4旁边:例如以下图:

4096!——化简的2048游戏[通俗易懂]

在2旁边生成2

4096!——化简的2048游戏[通俗易懂]

在4旁边生成4

3. 误操作导致最大值移动。

在误操作时须要弹个框帮助用户确认。

只是为了不要频繁的弹窗,在最大值大于512后才開始提示。这里的算法是推断最大值是否有移动。假设移动,是否会移入到四个角。

是否是在边界处移动。而非向内部移动。

4096!——化简的2048游戏[通俗易懂]

4. 随机生成的色块,能够帮助某些值merge.这里比較tricky的地方。假设某个比較大的两个值须要merge, 可是这两个值差了一个空格。那么就在对应的地方补上2、4。使得这两个比較大的值能够merge。

比例如以下图中的两个32色块:

4096!——化简的2048游戏[通俗易懂]

这个图中向左移动后,32和32会移动到左边。那么第二行的32的右边出现小方块,那么下一次向右移动,32就有机会和32合并。

例如以下图所看到的:

4096!——化简的2048游戏[通俗易懂]

然后继续右移,32能够和32合并了:

4096!——化简的2048游戏[通俗易懂]

5. 在最空旷的地方生成2/4. 这个比較简单就是找4联通最大的空白所在的点。然后将此点设置为2、4。

例如以下图所看到的:

4096!——化简的2048游戏[通俗易懂]

再次优化

当然,经过这系列优化之后。难度有所减少。但不意味着你不动脑筋能够玩到4096. 另外另一些值得优化的点。

  1. 比如第5点,在这一点中,须要生成的色块不应该和最大值在一条直线上。
  2. 另外还须要做的优化就是:假设你一直左右移。非常有可能有一个状态导致无法再左右移动。那么就须要上下移动。这种带来的问题就是最大色块一定会脱离原有的边界。这种移动极有可能导致整个游戏挂掉。所以须要对这一状态进行优化。

  3. 在手机上玩这款游戏。事实上灵敏度是个问题。总感觉慢了半拍(性能上还有值得优化的点)
  4. 在某一个状态,最大值一定在边界上,但不是在四个角。那么最好的情况是能够将最大值移入到四个角中。假如一直是左右移动变为的这个状态。最大值和次大值都都在底线上。之后的步骤一定要让最大值所在的色块不能向上移动。而其它的底线色块能够向上移动。这样上移后,底线就仅仅有最大值。然后再次左右移动就能够将最大值放入到边角中。假设这时随机生成色块,非常有可能次大值等再也无法移回底线。

    所以这种状态也须要优化。

     

4096!——化简的2048游戏[通俗易懂]

4096!——化简的2048游戏[通俗易懂]

4096!——化简的2048游戏[通俗易懂]

结束了吗?

这些优化会在以后慢慢放出来。

如今游戏中bug有些多。像这种游戏也不知道怎么做自己主动化測试的。。

。。。。慢慢做吧。

以下是黑PM的时间:PM们,你们能走查到 8192 这个状态吗? 。

。。。。

算了,你们努力走查到1024就能够公布了吧~

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/115618.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • OpenSSL的Heartbleed漏洞原理及简单模拟

    OpenSSL的Heartbleed漏洞原理及简单模拟Heartbleed漏洞自从Heartbleed漏洞曝光以来,网上能看到很多相关的文章,但大部分都是写的云里雾里,本文尝试直观明了的对漏洞原理进行说明及模拟。OpenSSL是SSL协议以及一系列加密算法的开源实现,使用C语言编写。OpenSSL采用Apache开源协议,可以免费用于商业用途,在很多linux发行版和服务器中得到广泛应用。OpenSSL出现漏洞造成的影响是巨大的,Heartb

  • 推荐他们认为有用Sublime Text3小工具

    推荐他们认为有用Sublime Text3小工具

  • JQuery.validationEngine表单验证插件

    JQuery.validationEngine表单验证插件一、说明JQuery.validationEngine表单验证控件功能强大,自带了样式显示模式:1.字符类型:非空验证、最大长度、最小长度、相等判断、数字和空格、数字和英文字母2.数字类型:数字、整数、最大值、最小值3.日期类型:日期(yyyy-MM-dd/yyyy/MM/dd等)、日期+时间、最小日期、最大日期、日期时间段4.业务字段:url、email、phone、ipv

  • MATLAB对Googlenet模型进行迁移学习

    MATLAB对Googlenet模型进行迁移学习调用MATLAB中的Googlenet工具箱进行迁移学习。%%加载数据clc;closeall;clear;Location=”;%这里输入自己的数据集unzip(‘MerchData.zip’);imds=imageDatastore(‘MerchData’,…%若使用自己的数据集则改为Location(不加单引号)…

  • python基础(3)列表list[通俗易懂]

    python基础(3)列表list[通俗易懂]列表列表特点:是一种序列结构,与元组不同,列表具有可变性,可以追加、插入、删除、替换列表中的元素新增元素appendappend添加一个对象,可以是任意类型a=['zhangsa

  • 课程设计—飞机订票系统

    课程设计—飞机订票系统1. 题目 本课程设计的题目为:飞机订票系统。2. 项目描述 基于目前人们外出远行频繁,为方便乘客提前买票及优化飞机航空订票服务,需要开发一个飞机订票系统,此程序就是要实现航班情况的录入,查询,订票,退票以及航班的查询和修改等基本功能。 3. 数据及其逻辑结构分析 (1)航班的信息:航班的情况存储结构采用单链表,每个元素表示一个航班的情况,包括航班号、起飞时间、降落时间、起

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号