纯代码实现2048各种版本

来源:互联网 发布:数据割接 编辑:程序博客网 时间:2024/06/13 14:57

       背景: 在看了极客学院 的Android 实战视频教程之后,觉得受益匪浅.我在上面加了一些东西,做了一些优化.现在游戏分为几个版本:经典版(2 4 8 16 …)  情侣版,逆向版,丧病版,朝代版,甲乙丙丁版.

      架构: 1.游戏主界面类(MainActivity)

2.游戏二级界面(SecondActivity 可以玩游戏的那个界面,根据配置类选择不同版本进去)

3.卡片类( Card            LayoutParams,根据配置信息显示不同界面,一个数字既是一张卡片)

4.卡片移动动画实现类(AnimLayer)

5.游戏逻辑实现类(GameView)

6.配置类(Config)

7.关于作者(About)

 

具体说明:

MainActivity:选择不同的版本进入游戏

Config:控制游戏行数和列数,版本
   SecondActivity:显示当前分数.保存分数(保存到文件中): Editore = getPreferences(MODE_PRIVATE).edit();

         e.putInt(SP_KEY_BEST_SCORE,s);

         e.commit();

   

    获得文件中的最高分: getPreferences(MODE_PRIVATE).getInt(SP_KEY_BEST_SCORE, 0);   其他就是显示卡片呈现给用户.

GameView:游戏的主要逻辑.用一个卡片数组,记录卡片信息. 设置监听器,当用户触摸屏幕时,调用触发以下监听器,判断用户想要的方向(setOnTouchListener),获取用户按下时的坐标,再获取用户离开屏幕时坐标即可知道用户想滑动的方向,但是注意判断一个x方向的相差大还是y方向上的差距大.用户如果左滑,则写一个左滑的函数,实现左滑应该做什么.滑动函数实现:比如从做往右,左边有值的卡片往右滑过去,遇到空格就跳过,遇到相等的就相加.游戏结束:在没有空格并且相邻两个不相等时即为游戏结束

Card:一个卡片就是一个LayoutParams,上面放一个文本控件,这个类就是美化这个卡片的,颜色,显示的文字等,根据Config的配置信息显示不同的内容.

AnimLayer:继承自FrameLayout.滑动特效:从一个点到另一个点,在其间产生划痕的效果   这里是从当前位置移到上下左右的其中一个.需要用到一个函数, TranslateAnimation 位移动画效果

          *TranslateAnimation(float fromXDelta, floattoXDelta, float fromYDelta, float toYDelta)

          *  floatfromXDelta 动画开始的点离当前View X坐标上的差值

                float toXDelta 动画结束的点离当前View X坐标上的差值

                float fromYDelta动画开始的点离当前View Y坐标上的差值

                float toYDelta 动画开始的点离当前View Y坐标上的差值

               

                常见方法:

                animation.setDuration(longdurationMillis);//设置动画持续时间

                animation.setRepeatCount(inti);//设置重复次数

                animation.setRepeatMode(Animation.REVERSE);//设置反方向执行

特效实现方法:从一个点到下一个点,如果下一个点是空的则先把下一个设置为不可见,在利用移动动画函数将动画实现,再显示下一个点.

生成卡片时的缩放效果:用到了Android缩放动画效果的一个函数android中提供了4中动画:

                                                          AlphaAnimation透明度动画效果

                                                          ScaleAnimation缩放动画效果

                                                          TranslateAnimation位移动画效果

                                                          RotateAnimation旋转动画效果

 

                                                          ScaleAnimation(floatfromX, float toX, float fromY, float toY,int pivotXType, float pivotXValue, intpivotYType, float pivotYValue)

                                                          floatfromX 动画起始时 X坐标上的伸缩尺寸

                                                          floattoX 动画结束时 X坐标上的伸缩尺寸

                                                          floatfromY 动画起始时Y坐标上的伸缩尺寸

                                                          floattoY 动画结束时Y坐标上的伸缩尺寸

                                                          intpivotXType 动画在X轴相对于物件位置类型

                                                          floatpivotXValue 动画相对于物件的X坐标的开始位置

                                                          intpivotYType 动画在Y轴相对于物件位置类型

                                                          floatpivotYValue 动画相对于物件的Y坐标的开始位置

 

 

 


1 0
原创粉丝点击