基于android的手机益智游戏的设计与实现内容摘要:

application android:icon=@drawable/icon android:label=@string/app_name activity android:name=.BroadCastReceiverActivity android:label=@string/app_name intentfilter action android:name= / category android:name= / /intentfilter /activity !广播注册 receiver android:name=.SmsBroadCastReceiver intentfilter android:priority=20 action android:name=/ /intentfilter /receiver /application usessdk android:minSdkVersion=7 / ! 权限申请 usespermission android:name=/usespermission /manifest 两种注册类型的区别是:1)第一种不是常驻型广播,也就是说广播跟随程序的生命周期。 2)第二种是常驻型,也就是说当应用程序关闭后,如果有信息广播来,程序也会被系统调用自动运行。 ContentProviderContentProvider可以实现不同组件之间的数据共享。 ContentProvider:为存储和获取数据提供统一的接口。 可以在不同的应用程序之间共享数据。 Android已经为常见的一些数据提供了默认的ContentProviderContentProvider使用表的形式来组织数据 无论数据的来源是什么,ContentProvider都会认为是一种表,然后把数据组织成表格ContentProvider提供的方法 query:查询 insert:插入 update:更新 delete:删除 getType:得到数据类型 onCreate:创建数据时调用的回调函数每个ContentProvider都有一个公共的URI,这个URI用于表示这个ContentProvider所提供的数据。 二、ContentProvider的内部原理自定义一个ContentProvider,来实现内部原理步骤:定义一个CONTENT_URI常量(里面的字符串必须是唯一)Public static final Uri CONTENT_URI = (content://)。 如果有子表,URI为:Public static final Uri CONTENT_URI = (content://)。 定义一个类,继承ContentProviderPublic class MyContentProvider extends ContentProvider实现ContentProvider的所有方法(query、insert、update、delete、getType、onCreate)  android:name=. android:authorities= / 本章小结本章将会详细叙述Android的应用程序所包括的基本组件,还有这些组件之间的沟通方式—Intent(除了Contentprovider),同时讲解一下Android应用程序的生命周期(Activity)—这是其他智能收与Android手机平台最显著不同的地方。 最后将介绍在Android的应用程序中如何利用下载外部资源。 4 项目相关技术 地图的滑动地图的滑动我是分两步实现:1. 重写Activity的onFling()方法,用来判断用户手指滑动的方向。 onFling()是Android手势中用来接收快速滑动的方法,要实现这样一个滑动效果需要一下四步, 否则失效。 【8】写一个类,实现OnGestureListener, OnTouchListener接口。 重写里面的方法,记得把onDown()方法return true。 这样才能触发onFling事件。 (2) 设置layout的onTouch事件: LinearLayout layout = (LinearLayout) findViewById()。 (this)。 (3) 在touch时调用如下: 在onTouch方法中return (event)。 //其中detector是:GestureDetector detector = new GestureDetector(this)。 (4)写onFling()方法: public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) { if(() () 50 amp。 amp。 (velocityX)0){ (Left.......)。 //向左滑动 }else if(()()50 amp。 amp。 (velocityX)0){ (Right......)。 //向右滑动 } return false。 } 【8】在本项目中的HKDGActivity的onFling()方法中我是直接调用了GameEngine的onFling()方法: @Override public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) { // TODO Autogenerated method stub// (this, onFling, ).show()。 return (e1, e2, velocityX, velocityY)。 }2. 重写Activity的onScroll()方法,用来控制图片的移动。 @Override public boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX, float distanceY) { // TODO Autogenerated method stub return (e1, e2, distanceX, distanceY)。 } MusicPlayer这是一个自己封装的类,用来播放游戏中的音乐。 里面封装了一个MediaPlayer对象及几个对音乐文件进行操作的方法。 MediaPlayer类可用于控制音频/视频文件或流的播放, 对播放音频/视频文件和流的控制是通过一个状态机来管理的,如下图所示:[9]图42 MediaPlayer的状态机制[9]public class Music { private Context _context。 private MediaPlayer _meMediaPlayer。 private boolean _isMute=false。 public Music(Context context) { _context = context。 _meMediaPlayer = new MediaPlayer()。 } public void initMusic(int resID) { _meMediaPlayer = (_context, resID)。 } public void initMusic(String path) { try { AssetManager assetManager = ()。 AssetFileDescriptor afd = (path)。 ()。 ((), (), ())。 } catch (IllegalArgumentException e) { // TODO Autogenerated catch block ()。 } catch (IllegalStateException e) { // TODO Autogenerated catch block ()。 } catch (IOException e) { // TODO Autogenerated catch block ()。 } } public void playMusic() { if (!()||!_isMute) { try { ()。 ()。 setLoop(true)。 } catch (IllegalStateException e) { // TODO Autogenerated catch block ()。 } catch (IOException e) { // TODO Autogenerated catch block ()。 } } } public void setLoop(boolean isloop) { (isloop)。 } public void setMute(boolean setMute) { _isMute = setMute。 } public void setMusicVolum(int Volume) { (Volume, Volume)。 } public void stop() { if (()||!_isMute) { ()。 } } public void pause() { if (()||!_isMute) { ()。 } } public Boolean isPlaying(){ return ()。 } public void releaseMusic() { ()。 ()。 ()。 _meMediaPlayer=null。 }} 本游戏的核心类GameEngine `如果说整个游戏是一架飞机,那么GameEngine绝对是这个飞机的引擎。 其他所有的类是这架飞机大大小小的零件,部件。 他们之间通过种种设计模式也就是飞机 的钢筋骨架连接起来,成为一架完整的飞机。 而这架飞机最终翱翔天空,GameEngine提供了核心动力。 首先这个类继承了View,而这个自定义的View就是我们游戏的界面。 因此我们可以在这个View里面重写其onDraw()方法来画出炫丽的游戏界面。 protected void onDraw(Canvas canvas) { if (paint == null) { paint = new Paint()。 ()。 } (0, 0, (), (), paint)。 if(ispaint){ if (getPage() != null) { getPage().paint(canvas,mPaint)。 } } if (_screenState != SCREEN_NORMAL) { ()。 (alphaSize)。 (0, 0, (), (), paint2)。 } }然后,这个类实现了Runable接口,在这个View里面重新启动了一个线程用来驱动整个游戏的运行。 // the thread controller public void run() { long start, cost。 while (mBLoop) { start = ()。 try { cost = () start。 start = cost。 if (start 0) { try { logic()。 (start)。 } catch (Exception e) { ()。 } } } catch (Exception e) { ()。 } ()。 // refurbish the screen } }最后,由于本游戏界面繁多,每一个界面都是一个实现了GameView接口的类,[10]到底要实例化谁,将来会不会增加实例化的对象,比如切换界面,这是很容易变化的地方,应该考虑用一个单独的类来做这个创造实例的过程,[10]于是在这个类里面使用了工厂模式用来实现不同游戏界面之间的切换。 publ。
阅读剩余 0%
本站所有文章资讯、展示的图片素材等内容均为注册用户上传(部分报媒/平媒内容转载自网络合作媒体),仅供学习参考。 用户通过本站上传、发布的任何内容的知识产权归属用户或原始著作权人所有。如有侵犯您的版权,请联系我们反馈本站将在三个工作日内改正。