在上一篇博客中我主要写了数组一些最基本最简单的知识,现在又过了几天,对数组又有了一些新的想法。
数组这个东西,虽然定义的方法就那么几种,虽然属性就一个,但可谓“短小精悍”。各类排序问题中,数组的效率很高,这几天算是“小有成就”了,因为做出来了一个可以玩的游戏——2048。用到了数组,也发现了数组真的是给我们提供了很大的方便。
现在我就来记录一下自己做出2048的艰辛过程,以及对数组和写程序的一些感悟。
做2048的第一步,就是画图和界面。这里面要注意一点,在重写窗体的paint方法的时候要调用一下父类的paint方法。
第二步,添加事件和动作监听器,一点开始就要随机产生两张图片——2或者4,这两张图片要随机放在我们画好的4X4的格子里。一点重新开始要清除原有的记录,再重新产生两张图片。这要定义一个存储图片的数组,依次按下标值放好。这样随机产生图片的时候就可以用随机数组下标来实现。
第三步,要移动方块。这个问题当时是让我头疼的,因为我的算法真的很差。终于体会到同行的小伙伴说过的一句话,大体意思是,我说java谁都可以学,那我们读这么好的学校就没有什么优越性了,然后她说,还是有区别的,没有学过的和学过的相比,学过的会赢在算法和数据结构上。好吧。。。我真是完全当了一个反例了,有学过数据结构,没有学过算法,但是呢,当时没好好学,学的仅有的一点点也早就不记得了。好吧,零基础菜鸟只能一点一点慢慢来了。(好像跑题了- -!)移动方块的算法想不到确实觉得难,想到了其实不用多少代码。算法的大体意思就是,当我按向上键的时候,跟列是没关系的,只有行是在不断减小,我现在先遍历所有的空格,找到不为空的那个位置,再找这一列位于这个位置上方的位置,看是否为空,为空就将图片赋值给空的,再不停往上找,往上赋值,一直到找到格子的边界。其他方向也是类似。数组存储了所有的位置,给数组没有图片时附上初值为-1,图片为2时为0,4为1等等以此类推。这样就可以用数组来定位行和列,和图片的属性。好方便有木有。
代码在此:
if(e.getKeyCode()==KeyEvent.VK_UP){
//外层循环,j表示列,上下移动的时候列没有关系,只与行有关
for(int j= 0;j<=3;j++){
for(int i=0;i<=3;i++){
if(array[i][j] != -1){
for(int x=0;x<i;x++){
if(array[x][j]==-1){
array[x][j]=array[i][j];
array[i][j]=-1;
break;
}
}
}
}
}
第四步,要将相同的方块相加,同时还要产生另一个随机的2或者4。我当时因为忘记一点,所以刚开始写了遍历每一行每一列,只要比如说按上键,那就比较同一列上相等的,然后把横坐标值大的数组值等于-1,小的加1。这样马上就有问题了,只要同一列上有相同的就那么做,也不管中间是不是有数挡着,然后我就开始纠结,要看两个相邻的情况,还有隔一个空,隔两个空,中间隔其他数是不能动。最后睡了一觉起来发现自己真是太傻了,我已经移动了,要能加一定是相邻的,真是想好多。这个问题就轻松解决了。我这个活生生血淋淋的教训告诉大家,当你想不通一个事情的时候要学会转移注意力,有时候太专注了就是在钻牛角尖了。然后又在空白的地方随机产生了一个图片放在随机空白处。这个就不多说。
离成功已经很接近了,最后一步,调试。调试的时候产生了问题,第一个,如果同一行里有三张图片,前两张是一样的 ,例如2和2,第三张是4,我按右键之后,原本应该是前两张相加变成4,第三张往前移一位。可是呢,前两张能加,第三张却不往前移,后来我发现了,是因为我之前在相加之后将后面一个位置的数组设成了-1,即没有图片。好了,解决办法就是,再将前面ctrl+c一遍,在相加之后ctrl+v。至少实现了功能,虽然很麻烦,也好low,--!
分享到:
相关推荐
用java的二维数组实现五子棋小游戏,适合初学者学习二维数组
标题中的“微信小程序经典2048小游戏实现版”指的是基于微信小程序平台开发的一个游戏应用,它是对流行数字拼图游戏2048的改编。2048游戏的规则简单,玩家通过上下左右滑动屏幕,使得数字方块合并,每次合并相同数字...
2048小游戏是一款非常受欢迎的数字合并类益智游戏,其核心玩法是通过滑动屏幕上的数字方块,使得相同数字的方块能够合并成更大的数字,最终目标是达到数字2048。这个源码是用Java编程语言编写的,非常适合初学者学习...
通过c++数组实现的趣味小游戏,完美增加学习兴趣
《2048小游戏——基于MATLAB App Designer》是一款利用MATLAB开发平台的App Designer功能设计的趣味益智游戏。MATLAB,全称Matrix Laboratory,是MathWorks公司推出的一款强大的数学计算软件,广泛应用于工程计算、...
微信小程序经典2048小游戏是一款基于JavaScript编程语言开发的轻量级游戏,深受用户喜爱。这款游戏是2048游戏的微信小程序版本,玩家通过滑动屏幕将数字方块合并,目标是达到2048这个数字。下面将详细探讨这款小程序...
在本项目中,我们关注的是一个基于Android平台的期末作品——2048小游戏的实现。这个项目不仅包含了游戏的源代码,还附带了相关的视频教程,为学习Android开发和游戏编程的学生提供了宝贵的资源。下面我们将深入探讨...
JavaScript 2048小游戏是一款基于网页的数字合成游戏,灵感来源于2014年流行的“2048”游戏。这个游戏的目标是通过滑动屏幕上的数字方块,让相同数值的方块相撞合并,最终达到2048这个数字。在这个项目中,源代码是...
《2048小游戏源码解析与探讨》 2048是一款深受玩家喜爱的数字合并游戏,由19岁的意大利开发者Gabriele Cirulli于2014年创造。这款游戏规则简单,但挑战性十足,使得它在全球范围内迅速流行起来。本文将围绕“2048小...
### 数组与字符串知识点 ...综上所述,该文档涵盖了数组和字符串的基础操作,以及一个实际应用案例——猜密码小游戏。这些知识点不仅有助于初学者理解Java中数组和字符串的使用方法,也为进一步学习提供了实践基础。
《C#实现的2048小游戏详解》 2048是一款广受欢迎的益智游戏,由Gabriele Cirulli在2014年开发,以其简单易上手的操作和富有挑战性的玩法迅速风靡全球。在这个8x8的数字棋盘上,玩家需要通过上下左右滑动来合并相同...
在本项目中,我们关注的是一个基于Android平台开发的2048小游戏,这是一个非常流行的数字拼图游戏,由Gabriele Cirulli在2014年创建。这个项目作为一个毕业作品,不仅包含了游戏的源代码,还提供了毕业论文和答辩用...
JAVA 用二维数组编写的一个扫雷游戏,绝对可以用!界面简洁美观!
《C#2048小游戏(WinForm)详解》 2048是一款风靡全球的数字合并游戏,它的简洁设计和挑战性吸引了无数玩家。本文将深入探讨如何使用C#编程语言,结合Windows Forms(WinForm)技术,构建一个属于自己的2048小游戏...
《2048小游戏:H5技术实现与解析》 2048小游戏,作为一款深受全球玩家喜爱的数字合并益智游戏,以其简洁的界面和极具挑战性的玩法,吸引了无数爱好者。它由意大利开发者Gabriele Cirulli在2014年推出,其核心目标是...
unity制作的一个纯数组,文字rpg小游戏
总的来说,开发《简易2048小游戏》涉及了Java基础语法、面向对象编程、数据结构(二维数组)、事件驱动编程、图形用户界面设计以及基本的算法设计。这个项目既适合初学者练手,也对有一定经验的开发者提供了挑战,是...
《基于JAVA开发的2048小游戏》 2048是一款广受欢迎的数字益智游戏,由19岁的意大利开发者Gabriele Cirulli在2014年创造。这个游戏的目标是通过合并相同的数字来生成2048这个数字。而本项目是将2048游戏移植到了Java...
JavaScript实现的2048小游戏是一款基于HTML5、CSS3和原生JavaScript的轻量级游戏,它通过简单的数字合并规则提供了一种富有挑战性的娱乐方式。在这个项目中,我们将探讨JavaScript的核心概念以及如何利用它们来创建...