当热网管理资料下载(www.downhot.com)提供各类企业日常办公所需要的管理资料的下载服务,同时我们也为大家精心准备了30多万篇常用范文,提高您的工作效率。

管理资料下载网|专业资料下载网站|范文大全网站
搜索
您的当前位置:首页 > 网络营销 > 电脑教程 > 针对安卓游戏“2048”实施的设计与实现

总结报告

针对安卓游戏“2048”实施的设计与实现

2017-06-16发布人:poster

更多0

  安卓( Android) 系统基于Linux 系统,内核和驱动使用C / C + + 语言开发,设计了一个Dalvik JVM 作为中间层,然后在SDK 层面选择Java 作为开发语言,因此,开发一款安卓游戏的应用程序需要较复杂的开发流程。安卓益智类小游戏是日常生活中最耐玩的一种游戏,深受玩家喜爱,男女老少皆宜。与此同时,益智类小游戏相对于一些大型的手机网络游戏以及大型的手机单机游戏而言,具有便捷性、易开发性以及较高的创新性。本文介绍一种新型安卓手机游戏的开发。益智类游戏“2048”开发过程中有几个重难点: ①各种界面布局的正确嵌套使用,这关乎用户体验最直观感受; ②游戏中玩家执行各种事件后,系统需要做出的对应逻辑设计; ③游戏主要逻辑的实现。

  1 游戏梗概

  游戏开始时,棋盘内部Gridlayout 布局中随机出现2 个数字,出现的数字仅可能为“4”“2”中的一个,且“4”“2”出现的概率分别为0 . 8 0 . 2。游戏玩家可以选择上、下、左、右4 个方向移动手指从而触发卡片的移动,如果Gridlayout 布局内的数字卡片出现位置移动或者位置合并,则是为有效正常移动步骤。玩家手指选择移动的方向上如果有一样的数则合并之,每次有效移动可以同时合并所有的2 个数,但不能连续合并2 个数,而且合并的所有数相加即为当前所得分数。玩家移动方向行或列前方有任何空白卡片则会发生位置移动。每一个有效移动步骤的进行都意味着棋盘的空位,即在无数字处随机出现一个数字( 依然可能为“2”“4”,其概率仍然为0 . 8 0 . 2 ) 。棋盘被数字填满则无法进行有效移动,系统自动判定游戏失败即游戏结束。如若棋盘上出现“2048”这样的一个卡片,则为游戏取得胜利,此时游戏仍然继续运行。

  2 布局设计和游戏主要设计

  2. 1 布局设计

  首先设计一个线性布局控件,以此控件为基础,设计一个技术支持的显示文本。与此同时,设计一个计分的文本,并设计好以上2 个组件对应的宽和高。鉴于游戏主体部分是一个4 × 4 的方格,所以我们采取了一个GridLayout布局来实现游戏的主要界面。

  2. 2 游戏主要设计

  2 . 2 . 1 游戏主类GameView

      设计游戏主类GameView 继承自GridLayout 布局。此布局嵌套进入主布局当中,承担着游戏运行的空间,并确保不与其他文本控件的显示发生冲突。

  2 . 2 . 2 触控交互设计

  相比于其他开发系统版本的“2048”键盘式的触控交互设计而言,安卓平台的触控交互设计是根据手势动作来判断进行的。所以这里采用一个触屏监听器,记录下用户手指按下的位置跟手指松开的位置,并比较偏移值的大小来激活上、下、左、右操作所对应的事件。2 . 2 . 3 游戏卡片Card 的添加设计卡片是游戏的核心,要将卡片添加到GameView 中。游戏中必须保证卡片的正常工作逻辑不产生任何异常。这里卡片大小的设计要注意卡片的大小与主界面的大小关系; 其次要注意卡片类的位置存放方式以及卡片类出现的随机性。逻辑以及检查结束的设计在游戏的具体实现中,需要判断玩家操作是否合法、界面是否有事件触发、是否需要添加新数字; 同时从左往右依次遍历,根据获取值的情况来判断是否需要合并卡片,以及是否需要清除合并过的卡片类。游戏结束与否的判断还要考虑以下2 种情况: ①当前所有卡片值为0 ; ②卡片4 个方向上有重复的数字时,这2 种情况下游戏都是不能结束的。

  3 算法设计和具体实现

  3. 1 算法设计

  1 、卡片类的设计。

  对于手机中的卡片类大小,一般可以设计成为Absolute 属性,开发的产品比较直观且能高效运行。但考虑到该游戏能适配各种机型,不能出现卡片内数字溢出等情况,需要将卡片设计成自发适应屏幕大小的类型。在卡片类的设计中应注意以下几种情况:

  为了避免界面的繁琐,当卡片中的值为0 时不显示。

  为了增加卡片的区分度,位子图片颜色适当进行调节。

  主要程序如下:

  public class Card extends FrameLayout { / /

  FrameLayout 是分层布局

  public Card ( Context c) { / / 卡片类添加的属性大小颜色

  super( c) ;

  label = new TextView ( getContext ( ) ) ;

  label. setBackgroundColor( 0 x33 fffdff) ;

  label. setTextSize ( 22 ) ; / / 设置文字在方格的正中间

  label. setGravity( Gravity. CENTER) ;

  LayoutParams lp = new LayoutParams ( - 2

  - 2 ) ; / / 设置大方框距离边缘距离为10 px

  lp. setMargins( 8 8 0 0 ) ; / / 添加画板

  addView ( label lp ) ; / / 为其添加数据,其值为0 setNum( 0 ) ; }

  private int Num = 0 ; / / 取回当前值

  public int getNum( )

  { return Num; } / / 设置当前值

  public void setNum( int Num)

  {

  this. Num = Num; / / 当卡片中值为0时则不显示当前卡片的值

  if( Num < = 0 ) {

  label. setText( " " ) ;

  } else{

  label. setText( Num + " " ) ;

  }

  / * / / 改变文字所在的卡片颜色

  switch ( Num) {

  case 0 :

  label. setBackgroundColor( 0 xffeee4 fa) ;

  break;

  case 2 :

  label. setBackgroundColor( 0 x00000010 ) ;

  break;

  case 4 :

  label. setBackgroundColor( 0 xffede0 d8 ) ;

  break;

  ( 此处省略8 16 32 64 128 256 512 1024 2048 的语法)

  default:

  label. setBackgroundColor( 0 xff3 c3 a22 ) ;

  break;

  }

  * /

  } / / 定义一个equals 方法用于比较卡片中的值的对比

  public boolean equals( Card c) {

  return getNum( ) = = c. getNum( ) ;

  }

  private TextView label;

  }

  2 、触控交互式设计。

  游戏的设计中有4 种事件,分别是上、下、左、右移动。而玩家的手势却是各异,如画圈、画斜线等。如何处理好这些事件,并将其分门别类归纳好,这是基于B / S 架构的安卓版本需要考虑的问题。根据现有的安卓版本,本游戏采取的策略是: 监听用户的按下屏幕位置坐标以及用户离开屏幕的位置坐标,取两者横纵坐标的绝对值相比较再判断大小,从而实现用户手势的监听以及对应事件的触发。

  3 、分数的统计。

  分数的统计是一个繁琐而复杂的过程。有移动事件发生以后,卡片的位置会发生改变,卡片内的值也会发生改变,有些卡片还会被释放。因此应该设计一个全局变量来保存数据; 其次,每个卡片类的设计中必须包含这个要发生交互的值。

  4 、 随机卡片的设计。

  任何一款游戏的设计都应该包含随机性。移动卡片后新卡片的产生需要通过随机种子来产生,卡片随机性的实现是一个难点,可以通过Math. random( ) > 0 . 1 < 2 ∶ 4 函数来实现随机性的控制。

  3. 2 游戏程序具体实现

  用一个GridLayout 来放置所有卡片,卡片类中都有设置值及数值大小。通过addRandomNum( ) 添加初始卡片,添加随机数之前需要清空得分。通过cardsMap[p. x][p. y]. setNum( Math.random( ) > 0. 1 < 2 ∶ 4) 确定游戏开始时2 4的出现比例。在添加数字过程中,分别根据获取值是否为“0”来确定将右边的值放到当前位置还是合并这2 个值。当屏幕捕捉到有动作时,要添加新的随机数,然后检测游戏是否结束。触屏事件中,需要遍历XY 轴上值的情况来判断添加值操作和合并操作。

  各函数属性设置如下:

  point: 分数统计,记录本次游戏的分数;cardsMap[x][y]: 大布局下的小卡片位置;onTouch( View vMotionEvent e) : 触屏事件;addRandomNum ( ) : 添加一个随机数值的初始卡片;onClickListener( ) : 事件监听器;setNum ( cardsMap[x][y]. getNum ( ) *2 ) : 设置卡片值;addScore ( cardsMap[x][y]. getNum ( ) ) :添加分数;swipeLeft ( ) : 向左触屏移动; swipeRight ( )等方法依次类推;checkComplete ( ) : 检查游戏是否完全结束,是,则激活游戏结束事件;对象:GameView: 游戏主类,继承自GridLayout。游戏的运行载体;Card: 卡片对象,存放卡片相关的属性和方法以及相关的属性存取值方法。

  3. 3 测试结果

  本设计各部分代码完成后,在Android4 . 0模拟器和真机上进行检查调试,各模块功能正常运行。

  4 结论

  本文从Java 出发,以Android 为载体,采用面向对象的方法,小游戏“2048”的开发,对游戏的界面以及逻辑的优化实现上进行了详细分析,其面向对象的逻辑思维方式,预计在未来很长的一段时间内都会是安卓游戏编程的主流思想。

管理资料下载站www.downhot.com
提供大量的免费资料下载,如果你喜欢我们,请将我们分享给您的朋友们!

友情链接

汉库克被  | 孕妇服装  | 怎样化装  | 简洁图片  | 有关自然环境的资料  | 美女图片大全  |