用JAVA实现了Drop7

图片发自简书App

碰见这款大名鼎鼎的游戏是在我失意之时,玩着玩着竟有了用java写写看的想法,毕竟我java用的不熟,也算是一个锻炼。

drop7的算法很简单,把每个球看成一个元素,元素内的数字如果和其所在的行(空位即止)或列上的元素个数相同,就可以被消除。

因此核心算法应该是这样的:

元素状态有三种,0表示正常,2表示白色块,需要周围消除两次才能显示数字。随机产生元素上的数字,30%的概率设置元素为状态2。

1.使用元素二维数组记录棋盘上的状态

2.元素下落时,做如下判断

 元素所在的列中元素个数是否等于元素上的数字

 向左向右遍历该行,判断所在的行中元素个数是否等于元素上的数字

3.判断通过时,元素爆炸,爆炸时遍历上下左右四个元素,如果出现状态>0的元素,则将状态减1。

4.设定轮次,若所走的步数达到要求,则从底部增加一行状态为2的白色元素。

5.开盘可考虑随机在棋盘上添加任意个元素,而后计算一轮的方式,也可以使用随机下落N个元素的方式。因为当时已经写好了下落的方法,为了偷懒,选了后者。

最后的效果图:

图片发自简书App

核心算法并不复杂,开发的难度主要是在swing的设计上:

1.窗体用JFrame无问题,旁边的等级,步数等都是JLabel,直接添加在JFrame上。右下的规则也是JLabel,点击后会弹出一个预设好的图片,进行规则简介。

2.棋盘使用JPanel,横竖线用paint方法来写,定好窗体大小,两个for循环分别画出8条横线和8条竖线。

3.元素使用JTextArea,主要是为了上面写数字比较方便。同样是为了方便,没有使用圆形的元素,这样直接用setBackground方法就能设置好颜色。

4.建立7个透明的jpanel,覆盖在每一列上,并添加鼠标动作,点击任意一个时判断在其所覆盖的列下落元素。

5.右侧的下一个下落的元素比较重要,每次下落时,我用的方法是新实例化一个对象,对象复制右侧元素的状态,而后让对象下落并重置右侧元素。当然也可以直接拿右侧的元素下落到棋盘然后重新生成新的右侧元素。

6.下落时的一系列动作涉及到棋盘的刷新,我选择的方法是直接让新元素落位后,开一个新的线程来加载一系列动作,因为如果使用主线程,动画都会消失,只会显示最后的结果。

7.当然分数的算法是我自己定的,第一轮消除每个7分,第二轮每个14分,以此类推。

8.最后为了推广,用redis做了一个排行版,每次玩完一局输入名字(类似街机),而后记录在redis的一个hashmap里。

图片发自简书App

纯为好玩,欢迎交流。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 213,335评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,895评论 3 387
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 158,766评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,918评论 1 285
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,042评论 6 385
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,169评论 1 291
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,219评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,976评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,393评论 1 304
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,711评论 2 328
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,876评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,562评论 4 336
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,193评论 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,903评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,142评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,699评论 2 362
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,764评论 2 351

推荐阅读更多精彩内容

  • 使用dancing links算法求解数独 博文来自这里:http://www.cnblogs.com/grene...
    Yihulee阅读 9,562评论 0 13
  • 1、窗体 1、常用属性 (1)Name属性:用来获取或设置窗体的名称,在应用程序中可通过Name属性来引用窗体。 ...
    Moment__格调阅读 4,534评论 0 11
  • 面向对象主要针对面向过程。 面向过程的基本单元是函数。 什么是对象:EVERYTHING IS OBJECT(万物...
    sinpi阅读 1,048评论 0 4
  • “你必坚固,无所惧怕。 你必忘记你的苦楚, 就是想起也如流过去的水一样。 你在世的日子, 要比正午更明, 虽有黑暗...
    木卯丁阅读 88评论 0 2
  • 斟滿著空杯 茶色亦減退 精緻兩杯 等待降溫 熱氣做陪襯 不可貪心 怎麼要皆空兩杯 給你空歡欣 得到著失眠 是我飲得...
    紙鷰阅读 171评论 0 0