有一游戏是将屏幕上出现一条线屏幕上出现一条线线拼接起来接到有色方块,然后线路就通了,并会显示出方块颜色……忘了这是啥游戏

《我的世界》构成物品的方块特性解析沙盘游戏中《我的世界》十分火爆,在游戏中的所有物品都是由方块构成的,那么这些方块都有什么特性呢,今天图老师图老师小编就给大家带来《我的世界》构成物品的方块特性解析,一起来看看吧。方块特性:No.1石头,mc里最常见的方块,其实用性不言而喻。石头做工具性价比最高,是前期做工具的不二选择,其工具也被众多服务器,作为新手礼包。No.2 各种原木,作为生存的必备工具,前期出生在一个没有木头的生物群系,那是多么的可怕。但木头做工具就是浪费,而木炭,如果你木头多【熊大,光头强又来砍俺们的树了】可以烧一点点T^T。No.3铁,作为生存里必不可少的方块,铁的需求是较大的,炼药挖金子,去地狱挖钻石,到了后期还要做一些红石机器,铁是生存里一个重要的东西。No.4 金,作为一种不实用的方块,玩家一般不会去刻意寻找金子,但炼药的时候,玩家会满世界找金子,钻石看都不看。No.5钻石 作为一种稀有的珍贵矿物,中期是玩家会满世界找钻,沙漠神庙,丛林神庙看都不看【里面可能有钻石】到了后期是,就是用来炫富的。No.6绿宝石,作为一种基本没用的东西,绿宝石,非常不开心,什么?想要当装备,更多装备mod等你。《我的世界》地狱门点火方法解析攻略 地狱门如果火灭了就出不去了,那么怎么点火呢?下面图老师图老师小编给大家带来玩家分享的《我的世界》地狱门点火方法解析攻略,一起来看吧。点火方法1、死(最快捷最有效也是最无节操的办法。)2、也是我觉得除了上面那个方法最简单的,就是让地狱轰炸机再给你一发,就炸回来,不过容易被补刀,还是可行的。3、找一个砂砾,挖遂石。再找到一个地狱要塞de宝箱,得到铁锭,做一个打火石。4、杀一个地狱轰炸机,得到眼泪,火药;找到要塞,杀凋零骷髅(普通骷髅不行)得到骨头,煤炭;杀烈焰人,得到烈焰棒,做成烈焰粉。用火药,煤炭,烈焰粉合成3个火焰弹。他就是个一次性打火石。PSV《我的世界》取水器制作方法图文教程 《我的世界》中水是很重要的一种资源,不仅可以用它和岩浆来制作黑曜石,而且植物的种植和一些机器的运作都离不开它,但是在游戏中有时水源离我们很远,当我们需要大量
与《我的世界》构成物品的方块特性解析相关的文章
记往物品ID  我们知道游戏中每个物品都有一个ID;比如石头的ID是1,草方块的ID是2,然而,命令方块的ID是137 ,我们记住该ID。输入命令符  如果你有权限使用give命令也就是给予命令,那么我们就可以通过该方法来把该物品给自己。  命令是: /give 玩家名字 物品ID 数量  如:/give admin 137 1  就是给叫admin的玩家一个命令方块!按回车执行  按enter键执行后,如果你的快捷物品栏中有多余的空格,就会显示在快捷物品栏中!  而且数量也只会一个!查找物品  是不是很简单呢?  我们也可以通过该命令去取到一些难得或者在物品里面查找不到的东西  如:龙蛋!回车确定  没错,就是末影龙的蛋,我们不能在物品栏中直接搜索到吧?  那么我们输入:/give admin 122 1  按回车就能得到一枚找到物品  还有更多的物品无法在物品里面搜索查找得到  如:火!完成命令  如果你需要或卖给别人,那么可以使用命令。  如:/give admin 51 1  不过这个命令都是需要权限哦!一般OP都可以敲!  微信公众号搜索“图老师”或者“tulaoshi_com”加关注,每天最新的美食、健康、育儿、美妆、美容、手工DIY等教程让你一手全掌握。推荐关注!【微信扫描下图可直接关注】
《方块冲刺》怎么得到高分?获得高分攻略
方块冲刺游戏上手简单,但是难度极大。如何获得高分?需要一定的技巧。方块冲刺高分技巧攻略送给有需要的小伙伴。《方块冲刺》高分技巧攻略: 1.黄色的方块君:我们要在躲避黑色障碍的同时尽量吃到黄色方块,会有额外的分数加成。2.上下移动的白线:靠近白线同样会为我们加分,前提是要躲开黑色障碍物。3.体验感想:小伙伴一定不要急躁,第一目标还是存活,所以要躲开障碍,之后再考虑额外加分的效果吧!暗黑破坏神2毁灭之王 符文物品、符石功能、赫拉笛克方块等
游戏更新到1.09版之后,除了新增了符石功能之外,物品合成公式也随之改变。因此,本刊编辑部特地将新增及更新的资料整理如下。请注意,先前刊登的《暗黑破坏神∶毁灭之王》密技资料,仅适用於1.08版。加强伤害型装备合成必需品基本修正效果加强伤害型头盔魔法全覆式头盔(FullHelm)伊司(Ith)符石完美蓝宝石(Sapphire)任何魔法珠宝(25~50)对远程武器防御被击中时有5%的机会施放等级4的星爆术(FrostNova)攻击者反受(3~7)点伤害加强伤害型靴子魔法锁链靴(ChainBoots)拉尔(Ral)符石完美蓝宝石(Sapphire)任何魔法珠宝(25~50)对近战武器防御被击中时有5%的机会施放等级4的星爆术(FrostNova)攻击者反受(3~7)点伤害加强伤害型手套魔法锁链手套(ChainGloves)欧特(Ort)符石完美蓝宝石(Sapphire)任何魔法珠宝击退敌人被击中时有5%的机会施放等级4的星爆术(FrostNova)攻击者反受(3~7)点伤害加强伤害型腰带魔法重腰带(HeavyBelt)塔尔(Tal)符石完美蓝宝石(Sapphire)任何魔法珠宝(5~10)%受损之生命移至法力被击中时有5%的机会施放等
《方块西游》新手开局玩法技巧
方块西游是一款超萌的卡牌手游,以西游记为题材,结合俄罗斯方块的特色,下面给大家带来方块西游新手开局玩法技巧,一起来看看吧。第一部分:卡牌首先一上来当然就要抽卡,第一只伙伴抽的必是太上老君,火属性的5星伙伴。。所以接下来我前期目标就很明确,充分利用第一只五星小伙伴的队长技能,尽量凑满4只火属性的伙伴,当然不是说12星的也用,在星级不低的情况下最好同属性,这样才能发挥五星队长的作用。我前期的阵容为 太上老君,骨精灵,小悟空,还有配上一个别的属性的奶-嫦娥,用这套阵容先尽量冲关,将角色等级和伙伴等级都提升上来,别担心前期伙伴升级后没用,之后可以同过伙伴重生把狗粮都退回给你。然后就一直推图,直到推不动为止再加上你的日常活动等等。当等级到25左右的时候就可以进行一次十连抽,于是看脸是时候就到了。颜值比较低的我抽到了又一个太上老君和牛魔王。多数人在很多手游十连抽脸黑后就有弃坑的冲动,但是玩游戏要带脑,方块里面有伙伴分解的功能,分解完后获得的元魂又可以去商店兑换伙伴。一个看似2换1的亏本买卖,但是这个1却可以是你想要的那个伙伴,这样不是反而更好吗?(前提是刷新令别乱用,留着在商店刷伙伴出来)接下来就要把我们的水奶嫦娥换成火奶了,通过伙伴分解获得的元魂换来了祝融这个火奶。。这样就可以组成火之战队,把祝融提升为队长后血量杠杠的~之后再搭配上阵法伙伴,阵法伙伴搭配就更加高深了,而且要求领导力也比较高也就是说角色等级要高,才20几级的渣渣就不讨论这个高深莫测的东西了。于是这样初期阵容就基本成型,可以带着他们pvp和刷日常了。之后再根据自己的需求以及获得的伙伴或材料进行调整就可以了。第二部分:操作操作注意的就是新手往往会经常忘记放技能,一味的无脑砌方块,砌完才“我擦,技能没放”。。技能就是时间,节省自己的时间小关卡就自动碾压,遇到boss关卡注意放技能就可以了。
本文为中国合作伙伴印象特别供稿,转载必须取得授权  虽然很多人认为可能,多看多做就是最好的学习方法,但是我认为学习平面设计,在学平面构成和色彩构成是时候是绝对不可以怠慢的,一定要认真对待,就如同小学,中学是大学的基础,要跑步一定要先会走,虽然说法是土了一点,但是多看多做是累积经验的一种方法,经验是从其他万家的作品于一身的一个总结,如此一来自己所做的作品就会,多多少少受其他风格影响.  其实所谓构成,就是一种造型概念,也是现代造型设计语言.其中含义就是将 点 线 面 色 等各种单元组成一个新的单元,并赋予视觉化的、力学的概念。其中,立体构成是厚度造型,平面构成是以轮廓造型,是将不同的基本形态按一定的规则在平面上组合图案。  平面构成元素,包括概念元素、视觉元素和关系元素,是指造型之前,仅在意念中感觉到的点、线、面、体的概念,其作用是促使视觉元素的形成。视觉元素,是把概念元素见之于画面,是通过看得见的形状 大小 色彩 位置 方向 肌理等被称为基本形的具体形象加以体现的。关系元素,是指视觉元素(即基本形)的组合形式,是通过框架、骨骼以及空间 空心 虚实 有无等因素决定的;其中最主要的因素是骨骼,是可见的,其他如空间,则是以感觉去体现。  平面构成的框架 一切用于平面构成中的可见的视觉元素,通称形象,基本形态即是最基本的形象;限制和管辖基本形在平面构成中的各种不同的编排,即是骨骼。基本形有“正”有“负”,构成中亦可互相转化;基本形相遇时,又可以产生分离 接触 复叠 透叠 联合 减缺 差叠 重合等几种关系。骨骼可以分为:视觉上起作用的有作用骨骼和在视觉上不起作用的无作用骨骼,以及有规律性骨骼(即重复 近似 渐变 发射等骨骼)和非规律性骨骼(密集 对比等骨骼)。基本形与骨骼的上述这些特性,将相互影响 互相制约 互相作用而构成千变万化的构成图案。  上面是平面构成的简单概念和介绍但是平面设计中除了平面构成以外还有另外一个不可或缺的理论知识,就是色彩构成,色彩构成也是平面设计的必须基本知识之一,其实配色方面也是很多人的问题,有人会认为色彩的话只要自己觉得舒服就好了,我个人觉得舒服其实只
《我的世界》方块代码ID大全攻略 最详尽的方块代码《我的世界》是一款非常好玩的沙盒游戏,这款游戏虽然没有精美的画质,但是自由度很高,所以在世界上的人气也一直是居高不下。《我的世界》方块代码ID记不住?不知道有的方块代码是什么?下面图老师图老师小编就给大家带来《我的世界》方块代码ID大全。方块(Block)是Minecraft里最基本的组成单位,也是不可或缺的重要元素。而方块的堆积构成了游戏世界的环境,他们可以透过各种形式被收集和利用。在 1.8 版本(最新的版本)中,总共有 153 种不同的方块。若使用默认资源包,则方块的每个面皆由 16x16 像素组成,但可以透过资源包使得方块变的更精细,例如:32&32,64&64,128&128,256&256,512&512,亦或是(罕见) 768x768 ,
像素。无论是否使用资源包,每个方块大小都等同于现实中的一立方米。[1] 大部分方块都是静态的,除了水,岩浆,火的每一面都有流动的图案。方块的种类:用D标记的方块需要第二部分的数据值来完全定义自己。用I标记的方块与以物品形式存在物品栏中时拥有不同的数据值。用B标记的方块需要第二部分的物品栏数据来完全定义自己。用T标记的方块具有方块实体值用以储存附加数据。用红色标记ID的方块无法由玩家在游戏中通过正常途径获得(除非使用修改器之类的工具,或在多人游戏中使用系统指令)。用蓝色标记ID的方块只能在创造模式中获得。用绿色标记ID的方块在生存模式中只能通过精准采集魔咒获得。主世界自然生成:自然生成的方块包括系统按照世界种子生成的方块。自然产生:自然产生方块是指在某些特定情况下在世界中自然产生的方块,而非玩家创造。建筑:和自然生成方块相同,但是这些方块只有在生成建筑选项被选中时才会被生成。下界自然生成自然产生建筑:下列方块作为下界要塞的一部分被生成。即使生成建筑选项关闭,下界要塞还是可以生成。末路之地自然生成自然产生《我的世界》僵尸巨人召唤方法解析攻略 今天图
并用ps打开一张图片。在ps图像窗口的上方,有一个小框。里面有图片的名称、格式和色彩模式等信息。点一下ps图层面板中的“通道”,点击ps菜单栏中的“图像”,在下拉菜单中选择“模式”,会出现很多色彩模式可供选择。先点击一下CMYK模式。会弹出一个对话框,点击“确定”。这时,会发现图像变暗了一点。现在看一下,在ps图像窗口的上方的小框。里面显示,图片的色彩模式为CMYK模式。再看一下通道,可以用同样的方法把图片转换为灰度模式、索引模式等。相关阅读:【photoshop色彩模式】
《DJMAX 3:黑色方块》CLUB模式BOSS分析由于本人也目前被110W折磨的卡关中……,所以暂时举了6区前几个比较典型的例子...
由于本人也目前被110W折磨的卡关中,所以暂时举了6区前几个比较典型的例子...  但是还是一句话:技巧只能帮助你在能力范围内更好的发挥,提高基本功还是需要刻苦磨练的  【得分对战】  很多朋友卡在得分对战,说与目标成绩相差几十万分。其实如果搞清楚加分的原理,就很好突破目标。得分对战,比的实际上是COMBO数。  大家先看一个例子:  这个是第三大区LOOP CLUB里的B CLASS任务:  DJ.RABI 530000分 歌曲 4BFX Level.8 Lover  下面是在FREE STYLE里的试验:  三张图都是同一首歌同难度的不同分数结果。  可以看出,虽然判定在下降,但是分数却提高了。  (由于在FS里,COMBO是累积的)但是可以算出  第一次: 1015 COMBO  第二次: 1357 COMBO  第三次: 1552 COMBO  所以说,分数是与COMBO数成正比的,而判定的影响近乎微弱。  那么接下就可以从提高COMBO入手,进行分析:  提高COMBO的最直接手段就是爆FEVER,FEVER越高COMBO数越高。  用NM难度或者EZ难度,这样更容易出100%,更快累积COMBO。  有的朋友说,把难度调成HD不就好了,这样分数就是130%了。想一下,在BS里,只有100%才增加气槽,难度调成HD以后,100%更加困难了,FEVER爆的非常少,如何累积COMBO?  所以,在针对得分的对战时,装备FEVER X7或X5(不要用AUTO),同时装备AUTO+1或AUTO+5(保证连击,不要用EZ LONG NOTE, 这里没用),然后就请尽情的刷COMBO吧。  你会发现你的分数在提高噢。  建议难度:NM/ EZ【判定 对战】  要求判定的时候,一样,不要管暴气了。排除一切干扰元素,认真听节奏,看判定线。  漏一两个不要慌,继续打下面的。 要知道,1000个NOTES里,你打了
《俄罗斯方块宠物战》新手攻略指南
备受期待的俄罗斯方块新作《俄罗斯方块宠物战》上架多时,作为加入了日本卡牌游戏元素之后的俄罗斯方块该游十分带感,可谓老树开新花。今天就让我来介绍一下《俄罗斯方块宠物战》的玩法吧!剧情以多对话框的形式展现,比其他游戏一次只显示一句对话的看起来舒服很多。看得懂的玩家也可以注意一下故事,蛮有趣的!然后就可以选初始宠物了,点击头像可以看到详细的属性。其实四个没多大区别,按喜好选就可以了,虽然游戏一共有六个属性(风火水土光暗),但是初始宠只有四个属性而已。经过教学关卡之后我们就可以输入名字,选择头像。这头像的种类还挺多的,好多可爱的男孩子和女孩子啊!
12下一页尾页《Tetris Monster》俄罗斯方块宠物大战首抽推荐
就以上看暗剑素质是最好,其次是光剑,火剑,但是再看看光,暗的技能无伤之舞,但是几乎是没有可能发生满血的情况,相信大家都知道这游戏回血是要用宠,相反火,水,风,地剑的技能是自己属性,150%加成再看看四属中火剑的有两项都比其他叁属优性。最后是双无伤之舞和比较,以上都是由日本讨论区测出的,双无伤之舞==&13万左右,双O的活力==&16万左右,推算双~无伤之舞加成的是1.75%,而双~O的活力加成是3倍。题外话无伤之舞和O的活力都可以加成在主技上例子:已双队长7星火剑为例&==被动加成已150%+150%再发动主动技就X350%,即火剑自身攻击力X150+150%(双火剑被动)X350%(主动技)%X150%X350%=205XXX(20万左右)但扣了怪物的防可能只有14-17万以上都是推算出来的《菲斯》图腾过关方法及俄罗斯方块解密技巧
一、RGB颜色模式   这是Photoshop中最常用的模式,也被称之为真彩色模式。在RGB模式下显示的图像质量最高。因此成为了Photoshop的默认模式,并且Photoshop中的许多效果都需在RGB模式下才可以生效。RGB颜色模式主要是由R(红)、G(绿)、B(蓝)3种基本色相加进行配色,并组成了红、绿、蓝3种颜色通道,每个颜色通道包含了8位颜色信息,每一个信息是用0~255的亮度值来表示,因此这3个通道可以组合产生1670多万种不同的颜色。所以在打印图像时,不能打印RGB模式的图像,这时需要将RGB模式下的图像更改为CMYK模式。如果将RGB模式下的图像进行转换,可能会出现丢色或偏色现象。   二、HSB 模式   HSB模式的建立主要是基于人类感觉颜色的方式,人的眼睛并不能够分辨出RGB模式中各基色所占的比例,而是只能够分辨出颜色种类、饱和度和强度。HSB颜色就是依照人眼的这种特征,形成了自身符合人类可以直接用眼睛就能分辨出来颜色的直观法,它主要是将颜色看作由色相(Hue)、饱和度(Saturation)、明亮度(Brightness)组成。在这之中,这三个构成要素都描述了不同的意义,比如,色相指的是由不同波长给出的不同颜色区别特征,如红色和绿色具有不同的色相值;饱和度指颜色的深浅,即单个色素的相对纯度,如红色可以分为深红、洋红、浅红等;明亮度用来表示颜色的强度,它描述的是物体反射光线的数量与吸收光线数量的比值。单击颜色功能面板右上方的横向黑三角可以从弹出式菜单中选择HSB滑块。在这里我们需要注意的一点是,HSB模式是通过0-360度的角度来表示的,并不是我们所理解的要用百分比来表示,就像是一个带有颜色的大风轮,每转动一点,其颜色就根据这个圆周角度进行符合一定规律的变化。   三、CMYK颜色模式   这也是常用的一种颜色模式,当对图像进行印刷时,必须将它的颜色模式转换为CMYK模式。因此,此模式主要应用于工业印刷方面。CMYK模式主要是由C(青)、M(洋红)、Y(黄)、K(黑)4种颜色相减而配色的。因此它也组成了青、洋红、黄、黑4个通道,每个通道混合而构成了
《我的世界》指令方块通关攻略在《我的世界》中指令方块其实是一个很方便的东西,但是大多数小伙伴都对此一知半解,那么大家知道如何在《我的世界》中利用指令方块制作速度最快脉冲吗?知道速度最快脉冲有什么用么?今天图老师图老师小编就来给大家介绍一下,希望这篇攻略对大家有帮助!指令方块通关攻略:《我的世界》中有很多小伙伴都想知道如何用指令方块做速度最快脉冲教程,这次图老师图老师小编就给大家带来指令方块做的速度最快脉冲,也算是教程吧。下面一起来看一下吧!咱们看见了,脉冲速度太快,致使活塞卡Bug:脉冲后边的输出红石是一向亮着的,由于速度太快红石无法时刻平息。假如后边放铁门的话,那是万能噪音机。后边放指令方块的话,可能是刷屏利器,也可能是坑爹利器,咱们怎样用看咱们的了。下面来说下原理。指令方块里的指令是:/summon FallingSand ~ ~1 ~{Tile:152}来剖析下指令。这是一个MC版别1.7才能用的新指令,/summon。这个指令的正常用途是刷怪物用的,比方刷僵尸啥,黑龙也能够刷。可是如今咱们刷的是坠落沙特点,是一种方块。坠落沙即是沙子坠落时分的状况,打不掉,TNT炸的话能够炸飞,就和TNT点着的时分差不多。指令方块里用/summon刷的话,也是相同作用,可是能够把任何方块成为坠落沙特点。结尾作用是,红石块,泥土啥也能够像沙子这样天上掉下。这即是用的原理:天降红石块。指令里的 FallingSand 即是坠落沙的意思。这个高速脉冲是让指令方块在自个头上刷出一个坠落沙方式的红石块(Tile:152 即是把坠落沙的ID成为152,也即是红石块),当这个红石块刷出后会立刻被体系刷没,可是有很短的一段时刻存在。在这一段时刻里,红石块又一次的激活了指令方块,致使指令方块又刷一个新的出来。这样重复循环,就成为了脉冲。接下来说说怎样缔造。首要第一步即是放下一个指令方块,打入指令。(/summon FallingSand ~ ~1 ~ {Tile:152}),之后在指令方块的正上方,放一个红石块,之后脉冲就开端了。红石块周围放个红石的话能够给出输出。当然,这个脉冲也算高档,能够手动
图老师百科方块色彩构成专题提供方块色彩构成等最新信息,希望对您有所帮助,关注图老师微信获取更多方块色彩构成信息。方块色彩构成百科专题更新时间: 12:23:003904人阅读
Android(131)
Android实训案例(四)——关于Game,2048方块的设计,逻辑,实现,编写,加上色彩,分数等深度剖析开发过程!
关于2048,我看到很多大神,比如医生,郭神,所以我也研究了一段时间,还好是研究了一套逻辑,这是一整套的2048游戏从设计到逻辑再到编写的全部过程,小伙伴们看仔细咯,刚好今天是礼拜天,一天应该了一把这篇博客发表了,其实2048开发起来还是有点难度的,并且他的逻辑挺强的,我也是看了很多的资料偷学的,很适合来锻炼自己的逻辑性
我们首先先来选择开发环境,这里我们就以Eclipse为IDE,新建一个工程——Game2048
一.Score分数
既然是2048游戏,我们也就做一个简单的,他有一个分数,然后就是一个游戏的布局,我们也做一个简单的4*4的游戏,大概的设计图就是这样
二.游戏类:GameView
因为我们的游戏所使用到的布局就是GridLayout,所以我们新建一个GameView继承自GridLayout,然后通过算法动态添加方块,并且监听手势进行操作,这个重写的GridLayout就是游戏的布局了
&com.lgl.game2048.GameView
android:id="@+id/game_view"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1" /&
三.实现交互逻辑
我们这里铁定是手势操作啦,这里我们就得区分手势是往上,往下,往左,往右,的手势,这时候,我们就需要用到手势监听——OnTouchListener了,也为了确保是实时监听,我们直接在initView的初始方法中处理
我们其实只要知道两点,用户手指按下的坐标点和手指离开的坐标点,然后进行比对,就能识别出用户的意图了
其实关于MotionEvent的几个方法,大家估计都见怪不怪了,因为用的太多了
private void initView() {
setOnTouchListener(new OnTouchListener() {
private float startX, startY, offsetX, offsetY;
public boolean onTouch(View v, MotionEvent event) {
* 交互逻辑 :我们其实只要知道两点,用户手指按下的坐标点和手指离开的坐标点,然后进行比对,就能识别出用户的意图了
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN:
startX = event.getX();
startY = event.getY();
case MotionEvent.ACTION_UP:
offsetX = event.getX() - startX;
offsetY = event.getY() - startY;
if (Math.abs(offsetX) & Math.abs(offsetY)) {
if (offsetX & -5) {
System.out.println("左");
} else if (offsetX & 5) {
System.out.println("右");
if (offsetY & -5) {
System.out.println("上");
} else if (offsetY & 5) {
System.out.println("下");
return true;
上面的逻辑是不是非常的简单,然后我们操作一下,看log
现在手势识别也是很精准了,当然,我们的代码设计也不能太过臃肿,所以,我们的操作逻辑就不在里面编写了,我们分别实现四个方向的方法
private void isLeft() {
private void isRight() {
private void isTop() {
private void isButtom() {
然后把输出语句替换掉,监听到哪个方向就执行哪个方法
private void isXXX() {
四.实现方块类CardView
我们可以把这一个个卡片看作是一个对象,我们每次操作,他都要进行实例化
首先,我们新建一个类CardView继承自FrameLayout,再里面我们要考虑三点
2.卡片上的数字
卡片相同的比较
package com.lgl.game2048;
import android.content.C
import android.widget.FrameL
import android.widget.TextV
public class CardView extends FrameLayout {
private int num = 0;
private TextView tv_
public CardView(Context context) {
super(context);
tv_num = new TextView(getContext());
tv_num.setTextSize(20);
LayoutParams lp = new LayoutParams(-1, -1);
addView(tv_num, lp);
setNum(0);
public int getNum() {
public void setNum(int num) {
this.num =
tv_num.setText(num + "");
public boolean equals(CardView card) {
return getNum() == card.getNum();
五.动态分配方块的宽高以及添加方块
1.动态分配方块的宽高
写到这里,就有一个梗了,还是Android的老毛病,屏幕的适配问题,所以我们队卡牌的宽高是不能做限定的,也就是说我们要去根据手机屏幕动态分配卡片的width和height,在这里我们就得用到我之前一篇博客
中提到的一个方法了
protected void onSizeChanged(int w, int h, int oldw, int oldh) {
super.onSizeChanged(w, h, oldw, oldh);
他负责我们的View在父容器的位置,所以我们动态分配高宽也是在他这里面完成,首先,位置发生改变之后,我们得到的位置是一个确定数,但是为了防止用户是横放这手机,这就蛋疼了,所以我们得进行一个设置了
我们打开AndroidManifest.xml的activity标签中加入
android:screenOrientation="portrait"
好的,现在可以计算了
宽高求最小值 因为考虑到,我们的方阵他是正方形的,而手机屏幕是长方形的,这样,我们的正方形要设置变长就得求长方形的宽,也就是最小值了
并且我们也不需要他填满宽度,我们需要一点空隙,所以我们减去10个像素
再让他除以4,通过这种方式,我们就可以动态平分这个宽度了
int cardWidth = (Math.min(w, h)-10)/4;
2.添加方块
-1.添加卡片
private void addCard(int cardWidth, int cardHeight) {
for (int i = 0; i & 4; i++) {
for (int j = 0; j & 4; j++) {
c = new CardView(getContext());
c.setNum(2);
addView(c, cardWidth, cardHeight);
好的,我们来运行一下(换个AS2.0的模拟器感觉萌萌哒)
-2.方块换行
你会发现,并没有4*4,而且一排没有换行,我们回到GameView的initView()方法中添加
setColumnCount(4);
现在再看看
-3.文字居中
现在我们调整一下,让文字居中,在CardView中
//文字居中
tv_num.setGravity(Gravity.CENTER)
现在是不是好看多了
-4.方块颜色
既然是玩2048我们怎么能少了颜色尼,我们就根据这
中的色彩表来,自己觉得什么颜色好看可以自行替换,我们直接来到CardView里面
tv_num.setBackgroundColor(0xffBDB76A);
-5.方块间距
既然是方块间隔,我们还是回到CardView里面,还记得我们设置的LayoutParams吗?你可能想到了吧,我们用Margins
lp.setMargins(10, 10, 0, 0);
-6.记忆方块
我们所操作之后,会有新生成的卡片,为了不重合,我们得做一个记忆功能
private CardView[][] cards = new CardView[4][4];
然后在addCard()方法中
cards[j][i] =
我们先来思考一下这个随机数的逻辑,我们玩2048的时候,是不是开始新游戏的时候会随机出现两个方块,而这两个方块,他是随机出现在4*4的任意位置的,所以,我们确定下来,一开始是两个方块的随机出现,再接下来,我们会发现,他有时候是两个2,但是有时候是一个2,一个4,这个4出现的几率有点小,而且我们作为游戏规则制定者,这个也是我们控制的,这里,我不想他出现的很容易,所以我这里的逻辑就设置成1-9,这样4出现的概率会小很多,好了,基本确定了,我们就开始写代码了,我们写一个方法,在此之前,我们要对之前的代码进行调整一下,在CardView中setNum方法中,我们默认为0就占一格,
if (num &= 0) {
tv_num.setText("");
tv_num.setText(num + "");
然后把刚才的文字设置换成0
// c.setNum(2)
c.setNum(0)
然后我们就可以添加随机数了,我们新建一个方法addRandom();
private void addRandom() {
point.clear();
for (int i = 0; i & 4; i++) {
for (int j = 0; j & 4; j++) {
if (cards[j][i].getNum() &= 0) {
point.add(new Point(j, i));
Point p = point.remove((int) (Math.random() * point.size()));
cards[p.x][p.y].setNum(Math.random() & 0.1 ? 2 : 4);
这个时候我们就可以开始游戏了,为了方便等下我们需要重新开始游戏,我们就新建一个startGame()方法,让他在onSizeChanged()调用
private void startGame() {
for (int i = 0; i & 4; i++) {
for (int j = 0; j & 4; j++) {
cards[j][i].setNum(0);
addRandom();
addRandom();
好的,我们现在运行一下啊
这正是我们要的效果,每次进入游戏随机生成两个方块,他会出现在不同的位置,而且会出现2和4,4的概率小很多
七.实现方块滑动,递加逻辑
好的,终于到了核心的东西了,这次我们就要用到之前所写的上下左右方向方法了
private void isLeft() {
* 这里的逻辑有三种情况 1.左边为空,直接左滑到最后一格 2.左边碰到的第一个数是相等的,就相加 3.左边碰到的第一个数是不相等的,靠在旁边
for (int i = 0; i & 4; i++) {
for (int j = 0; j & 4; j++) {
for (int j2 = j + 1; j2 & 4; j2++) {
if (cards[j2][i].getNum() & 0) {
if (cards[j][i].getNum() &= 0) {
cards[j][i].setNum(cards[j2][i].getNum());
cards[j2][i].setNum(0);
} else if (cards[j][i].equals(cards[j2][i])) {
cards[j][i].setNum(cards[j][i].getNum() * 2);
cards[j2][i].setNum(0);
private void isRight() {
* 这里的逻辑有三种情况 1.左边为空,直接左滑到最后一格 2.左边碰到的第一个数是相等的,就相加 3.左边碰到的第一个数是不相等的,靠在旁边
for (int i = 0; i & 4; i++) {
for (int j = 3; j &= 0; j--) {
for (int j2 = j - 1; j2 &= 0; j2--) {
if (cards[j2][i].getNum() & 0) {
if (cards[j][i].getNum() &= 0) {
cards[j][i].setNum(cards[j2][i].getNum());
cards[j2][i].setNum(0);
} else if (cards[j][i].equals(cards[j2][i])) {
cards[j][i].setNum(cards[j][i].getNum() * 2);
cards[j2][i].setNum(0);
private void isTop() {
* 这里的逻辑有三种情况 1.左边为空,直接左滑到最后一格 2.左边碰到的第一个数是相等的,就相加 3.左边碰到的第一个数是不相等的,靠在旁边
for (int j = 0; j & 4; j++) {
for (int i = 0; i & 4; i++) {
for (int i2 = i + 1; i2 & 4; i2++) {
if (cards[j][i2].getNum() & 0) {
if (cards[j][i].getNum() &= 0) {
cards[j][i].setNum(cards[j][i2].getNum());
cards[j][i2].setNum(0);
} else if (cards[j][i].equals(cards[j][i2])) {
cards[j][i].setNum(cards[j][i].getNum() * 2);
cards[j][i2].setNum(0);
private void isButtom() {
* 这里的逻辑有三种情况 1.左边为空,直接左滑到最后一格 2.左边碰到的第一个数是相等的,就相加 3.左边碰到的第一个数是不相等的,靠在旁边
for (int j = 0; j & 4; j++) {
for (int i = 3; i &= 0; i--) {
for (int i2 = i - 1; i2 &= 0; i2--) {
if (cards[j][i2].getNum() & 0) {
if (cards[j][i].getNum() &= 0) {
cards[j][i].setNum(cards[j][i2].getNum());
cards[j][i2].setNum(0);
} else if (cards[j][i].equals(cards[j][i2])) {
cards[j][i].setNum(cards[j][i].getNum() * 2);
cards[j][i2].setNum(0);
四个方法的逻辑都是大同小异的,不过逻辑性还是很强的,大家可以适当的去研究一下然后我们多增加几个方块先来模拟下效果
方块的逻辑差不多写完了,我们先来就在MainActivity里面来实现我们的Score计分
MainActivity
package com.lgl.game2048;
import android.app.A
import android.os.B
import android.widget.TextV
public class MainActivity extends Activity {
private TextView tv_
private static MainActivity mainActivity = null;
private int score = 0;
public MainActivity() {
mainActivity = this;
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
tv_score = (TextView) findViewById(R.id.tv_score);
public static MainActivity getMainActivity() {
return mainA
public static void setMainActivity(MainActivity mainActivity) {
MainActivity.mainActivity = mainA
public void clearScore(){
score = 0;
showScore();
public void showScore(){
tv_score.setText("分数:"+score);
public void addScore(int s){
showScore();
这是我们计分的过程,我们思考一下在什么时候计分呢?想想就知道在滑动的时候俩值相加的时候开始计分,所以我们在四个滑动方法有值的判断句中添加
//开始计分
MainActivity.getMainActivity().addScore(cards[j][i].getNum());
同时,我们在开始游戏的时候要清零,所以我们在startGame方法中要添加
//计分清零
MainActivity.getMainActivity().clearScore()
九.滑动后增加方块
我们默认进来是两个方块,但是滑动之后我们应该也要随机增加方块才能达到游戏的逻辑,你说是吧!
所以,只要你滑动了,我们就要添加,一直到gameover结束为止,那我们依然在那四个方向方法里写
private void isxx(){
boolean isAdd = false;
for(....){
for(....){
for(....){
isAdd = true;
}else if(....){
isAdd = true;
if (isAdd) {
addRandom();
好的,我们现在来运行一下
游戏现在大体上是OK的了
十.游戏结束
游戏有始有终,我们现在就来判断游戏结束,游戏结束有两个前提
1.16个格子都是满的
2.上下左右相邻的格子都不相同
这样的话我们就可以写一个endGame方法,然后让他在每次增加方块的时候调用了
private void endGame() {
boolean isEnd = true;
for (int i = 0; i & 4; i++) {
for (int j = 0; j & 4; j++) {
if (cards[j][i].getNum() == 0
|| (j & 0 && cards[j][i].equals(cards[j - 1][i]))
|| (j & 3) && cards[j][i].equals(cards[j + 1][i])
|| (i & 0 && cards[j][i].equals(cards[j][i - 1]))
|| (i & 3 && cards[j][i].equals(cards[j][i + 1]))) {
isEnd = false;
break ALL;
if (isEnd) {
new AlertDialog.Builder(getContext())
.setTitle("Sorry,游戏结束!")
.setMessage("是否重新开始?")
.setPositiveButton("是",
new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog,
int which) {
startGame();
.setNegativeButton("否",
new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog,
int which) {
}).show();
好的,现在我们可以来检测一下了
十一.优化之色块
我们的数字每个数字代表一种颜色,这里我就简单的写点颜色,你们要是喜欢可以自己想改什么就改什么
在CardView中setnum方法里
switch (num) {
tv_num.setBackgroundColor(0xffBDB76A);
tv_num.setBackgroundColor(0xffeee4da);
tv_num.setBackgroundColor(0xffede0c8);
tv_num.setBackgroundColor(0xfff2b179);
tv_num.setBackgroundColor(0xfff59563);
tv_num.setBackgroundColor(0xfff67c5f);
tv_num.setBackgroundColor(0xfff65e3b);
tv_num.setBackgroundColor(0xffedcf72);
tv_num.setBackgroundColor(0xffedcc61);
tv_num.setBackgroundColor(0xffedc850);
case 1024:
tv_num.setBackgroundColor(0xffedc53f);
case 2048:
tv_num.setBackgroundColor(0xffedc22e);
tv_num.setBackgroundColor(0xff3c3a32);
我们运行下
Demo下载地址:
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:1076387次
积分:13684
积分:13684
排名:第1079名
原创:215篇
评论:922条
难度:中级
类型:实战教学
难度:初级
类型:技术教程
难度:初级
类型:技术教程
通往Android的神奇之旅(已满)
Android旅行的路途
Android进阶深度学习群
好友的博客
长期为您推荐优秀博文、开源项目、视频等,进入还有好玩的等着你,欢迎扫一扫。
文章:14篇
阅读:81170
阅读:24284
文章:35篇
阅读:184892
文章:14篇
阅读:81864
(2)(3)(3)(2)(2)(5)(2)(1)(7)(5)(18)(10)(10)(11)(12)(20)(24)(18)(10)(17)(27)(7)

我要回帖

更多关于 显示器上出现一条线 的文章

 

随机推荐