湖南科技大学本科生毕业设计(论文)
图4.4 游戏主界面
其中isNewGame变量用于控制是否显示继续游戏按钮,因为当游戏第一次运行时,显示继续游戏按钮不符合逻辑,设置一个boolean量isNewGame用于控制主界面显示的XML,关键代码如下: if(isNewGame){ } else{ } 当开始新游戏时,置isNewGame变量为false,当游戏完成时,置isNewGame变量为true。
setContentView(R.layout.main); setContentView(R.layout.startmain); 4.4游戏关卡选择模块
(1)游戏难度选择
游戏关卡选择模块主要包括游戏难度等级选择,游戏关卡的选择等。游戏难度等级选择如图4.5所示,游戏关卡选择界面如图4.6所示。
-17-
湖南科技大学本科生毕业设计(论文)
图4.5游戏难度选择界面 图4.6游戏关卡选择界面
游戏难度选择通过实例化一个AlertDialog来实现,传入定义好的难度数组XML,监听选择的项,将索引值传递给关卡选择类LevelActivity.java。XML文件及关键代码如下:
private void openNewGameDialog(Context context) { AlertDialog.Builder builder = new AlertDialog.Builder(context); builder.setItems(R.array.difficulty, -18-
湖南科技大学本科生毕业设计(论文)
new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialoginterface, int i) { ... //打开关卡选择界面 ... }); } builder.show(); 游戏关卡的实现,主要使用Gallery视图。
Gallery介绍:Gallery(俗称画廊视图)是一个锁定中心条目并且拥有水平滚动列表
(2)游戏关卡实现
的视图,一般用来浏览图片,并且可以响应事件显示信息。Gallery还可以和ImageSwitcher组件结合使用来实现一个通过缩略图来浏览图片的效果。
实现步骤:
1.系统定义的Gallery滑动速度很快,重新定义一个继承自Gallery的类CustomGallery,重写onFling()方法,将返回值改为false。
2.以重写过的类CustomGallery作为布局元素,定义布局文件level.xml,关键代码如下:
paramsbtnParamsbtnParamshLayoutbtnParamsbgLayoutGallery以每行三个BtnParams,每页五个params为单位布局 -19- 湖南科技大学本科生毕业设计(论文) 图4.7关卡选择界面布局层次结构图 4.定义完游戏关卡选择模块界面布局后,我们给这个界面定义一个onTouch()方法,监听两类动作完成关卡选择和关卡滑动的命令。图4.8为关卡选择时的效果,图4.9为关卡选择界面滑动时的效果。关键代码如下: private OnTouchListener mTouch = new OnTouchListener(){ }}; float fX = 0; float fY = 0; public boolean onTouch(View view, MotionEvent event) { int iTag = (Integer)view.getTag(); if( event.getAction() == MotionEvent.ACTION_DOWN ){ //如果触摸动作是按下 view.setBackgroundResource(R.drawable.passing); //设置按下的图片 fX = event.getX(); //记录点击位置的坐标 fY = event.getY(); bClick = true; //是否点击布尔值设为true return true; if( Math.abs(fX-event.getX()) < 2*density } bClick = true; //如果触摸动作的坐标差小于两个单位,布尔值不变 } else bClick = false; return true; //否则判定为移动动作 }else if( event.getAction() == MotionEvent.ACTION_MOVE ){ //如果触摸动作是移动 || Math.abs(fY-event.getY()) < 2*density) { else if( event.getAction() == MotionEvent.ACTION_UP ){ view.setBackgroundResource(R.drawable.passed); if( bClick ){ ……. //如果判定为按下动作,则启动GameActivity,同时将关卡值传过去 }return true; }return false; -20- 湖南科技大学本科生毕业设计(论文) 图4.8 关卡选择时的效果图 图4.9 关卡选择界面滑动时的效果图 5.定义游戏关卡选择类LevelActivity.java,设定level.xml为布局文件,定义一个gallery,绑定GalleryAdapter监听器,获取Sudoku.java主界面传过来的关卡数TOTAL_LEVEL,关键代码如下: //获得当前难度等级的总关卡数量 TOTAL_LEVEL = getIntent().getIntExtra(KEY_TOTAL_LEVEL, 0); //定义LevelItem结构的线性表,这里抽象为Gallery显示的所有页面 ArrayList> pages = new ArrayList>(); boolean breakFlag = false;//是否超出关卡数的布尔变量 for( int i=0; i