全部博文(436)
分类:
2011-04-28 00:01:50
第八次报告
研究题目:Android手机游戏开发的
小组成员:李安 李想
本周计划:
“帮助”与“关于”界面的设计与实现。①帮助界面的实现 ②关于界面的实现 ③Gameview
一.“帮助”界面HelpView类的实现
*将图片绘制到指定位置
*绘制一个“确定”按钮
1)帮助界面的构造器:
实现功能:先得到activity以及surfaceHolder的引用,然后添加Callback接口的实现并对图片资源进行初始化
2)行为重写的绘制方法:
绘制白色背景,将帮助界面的背景图片绘制到指定位置
3)行为重写的键盘监听方法
当点击“确定”按钮时,需要向activity发送Handler消息通知控制器切换屏幕
二.“关于”界面AboutView的实现
关于界面与帮助界面有一些相似的地方。
实现功能:先得到activity以及surfaceHolder的引用,然后添加Callback接口的实现并对图片资源进行初始化
绘制白色背景,再绘制背景图片
当点击“确定”按钮时,需要向activity发送Handler消息
GameView
图1 游戏运行步骤
图2 算法
一.对GameView的成员变量进行介绍
图3 初始化成员变量
二.初始化图片方法init()
初始化游戏中所用到的所有图片。在图片初始化时,会用到Matrix将图片进行缩放,同时在最后调用init2方法来初始化数独数组
图4 初始化所有图片
三.初始化界面方法initView()
对界面的数据进行初始化
图5 初始化界面的数据
步骤:
初始化数独生成器,并得到数独数组——>创建用于存放用户输入数字的数组,并对数组初始化,填充0代表此单元格还没有用户的数字——>创建游戏中默认显示的数字,其算法是从正确答案的数组中随机去掉一部分,将需要去掉的位置用0代替
四.绘画方法onDraw()
该方法主要负责游戏界面的绘制工作,刷帧线程会定时调用该方法进行屏幕刷新
图6 绘画方法onDraw()代码
步骤:
将背景设置为黑色——>绘制背景图片(因为图片比较大,所以绘制在屏幕左上角即可填充全屏幕)——>绘制背景小方格——>绘制屏幕下方四个按钮——>根据当前游戏的状态进行不同的绘制:
根据默认灰色图片的大小计算出灰色图片绘制的坐标,因为每个宫之间有一定的距离,所以需要对计算出来的坐标进行调整——>对坐标计算,按坐标绘制用户输入的数字——>计算出点击的单元格坐标,然后绘制被选中的单元格,使玩家知道当前选中的单元格是哪个——>当需要绘制数字键盘时,在指定位置绘制数字键盘
——>绘制屏幕下方的时间(先根据得到的时间算出有多少分钟,若分钟数是个位数,则在计算出的时间前加上0/再计算秒钟)——>根据计算出的数字绘制时间图片
五.数字键盘的绘制方法drawKey()
图7 数字键盘绘制方法drawKey()
步骤:
创建一个空的图片并得到该图片的画布——>将数字键盘的背景绘制到创建的图片上——>按照角度一一将9个数字会知道创建的图片上——>将创建的图片存储到成员变量key_bitmap中
六.屏幕监听方法onTouchEvent()
图8 屏幕监听方法
步骤:
得到事件发生的X、Y坐标——>对游戏界面胜利或失败时的屏幕监听,当玩家胜利或失败后点击屏幕时,会像Activity发送Handler消息——>当游戏界面显示的是“询问玩家是否真正退出”的界面时,会判断玩家单击的是“是”还是“否”进行处理——>其他情况的事件处理方法,根据屏幕事件的类型调用不同的方法来处理屏幕事件。
七.判断结束方法isFinish()
检查屏幕上所有的单元格是否已被填满即可
图9 判断结束方法isFinish()
步骤:
循环检查inputNum.outputNum数组中不为0位置的个数——>当不为0的个数不到81时,说明还没有填满,返回false,否则说明已经填满,返回true
八 .判断输赢方法isWin()
游戏结束后用来判断本次游戏是输是赢
图10 判断输赢方法isWin()
步骤:得到用户输入的数字——>检查与正确答案是否相同
九.处理屏幕按下事件的方法mouseDown()
当玩家点击屏幕时,通过onTouchEvent()方法对事件进行捕捉,然后判断事件的类型,调用mouseDown()方法处理屏幕按下事件
图11 按下事件方法mouseDown()
步骤:
当数字键盘存在时,判断所点的位置是否在数字键盘上,当点击在数字键盘上时,再判断所点击的数字,并将该数字填入相应的单元格——>计算玩家所点击的位置处于哪个单元格中——>判断点击的位置是否在游戏区域内,只有在区域内才有弹出数字键盘的必要——>当玩家点击的位置在第三宫所在列时,让数字键盘在点击位置的左侧显示,以防数字键盘显示不全。而在前两列时,使数字键盘在点击位置的右侧显示——>判断之前是否已经按过提示按钮,如果按过,则直接将正确答案填入单击处,否则弹出数字键盘
——>处理“暂停”按钮被按下的事件,只有暂停中和游戏中“暂停”按钮才可用,并实现暂停中和游戏中状态的循环
——>处理“换题” 按钮被按下的事件,游戏时间重新开始计算,然后调用init2方法重新初始化游戏界面
——>处理“放弃” 按钮被按下的事件,在代码中先初始化是否放弃提示的提示图片,然后将状态直接设置为4
——>处理“提示” 按钮被按下的事件,只有在暂停或游戏中才有效,将一个标志位设置成true即可
十.屏幕触控笔抬起事件方法mouseUP()
当按钮被按下时会根据按下按钮的不同绘制不同效果
.
图12 抬起事件方法mouseUP()
步骤:
判断玩家在哪个按钮处抬起——>将相应按钮的图片改变
十一.线程的创建和摧毁
View创建时被调用,负责相关线程的启动工作
view摧毁时被调用,负责相关线程的释放工作
图13线程的创建和摧毁
下周计划:还有两周就要进行汇报了,我们打算在最后这两周完成后面所有的内容,我们需要查找一些资料,把后面的工作再完善一下,更熟练的掌握其开发的技巧。剩下的内容还是很多的,尽量做到尽善尽美,同时把最终要上交的报告及演讲时的ppt完成。
文件:
第八次报告.pdf
大小:
135KB
下载:
下载
文件:
GameView.pdf
大小:
1158KB
下载:
下载