×

数独游戏(安卓版)的开发设计报告

消耗积分:1 | 格式:doc | 大小:39KB | 2014-06-07

lijiayao

分享资料个

1、 实验目的
通过“数独游戏”Android应用程序的开发,掌握一个实际应用项目的开发流程和知识。
2、 软件开发的步骤
(一)设计用户界面 
1、创建启动界面 
(1) 使用Eclipse插件创建一个Android应用程序。
(2) 修改res/layout/main.xml文件,使用不同的文本和几个按钮替换原标签。
(3) 在res/values/strings.xml中定义要用到的字符串。
(4) 美化启动界面,将标题文本字体放大且居中,让按钮变小并且使用不同的背景色,在res/values/colors.xml中定义要用到的颜色。
2、模式切换 
为使横向模式下人能正常显示,可为横向模式创建一个不同的布局。创建名为 res/layout-land/main.xml文件,该文件采用TableLayout布局方式创建两列按钮。 
3、实现About对话框
(1) 为About按钮活动创建一个布局文件res/layout/about.xml。我们只需要布局一个版本即可,以为该布局在纵向和横向模式下都可以正常显示。
(2) 在About.java中定义About活动,重写onCreate()方法和并调用setContentView()方法。
(3) 将About对话框的标题及对话框中包含的文本内容添加到res/values/strings.xml中。
(4)  将该活动与Sudoku类中的About按钮关联起来。
(5)  双击AndroidManifest.xml文件,在第一个活动的结束标签之后添加一个新的标签。声明这个活动。
4、应用主题  
可以在res/values/styles.xml中定义自定义主题,但在此只需利用一个预定义主题,在Android.Manifest.xml中修改About的定义,使其具有主题特性。 
5、添加菜单  
实现在按下Mune按钮时弹出菜单。
(1) 在res/values/strings.xml中定义要用到的字符串。
(2) 在res/menu/menu.xml中定义菜单。
(3) 将上面定义的菜单加到Sudoku类中,并导入以下包:  
import android.view.Menu;
import android.view.MenuInflater;
import android.MenuItem; 
(4) 重写Sudoku类中的onCreateOptionsMenu()方法。
6、添加设置  
在Sudoku程序中添加两个设置,一个用于播放背景音乐,一个用于显示提示信息。这两个首选项的键值都是以字符串常量的形式存入Android的首选项数据库中。
7、开始新游戏  
(1) 在res/values/strings.xml中。
(2) 在res/values/arrays.xml中创建难度选择列表 。
(3) 在Sudoku类中导入以下包:  
Import android.app.AlterDialog;
Import android.content.DialogInterface;
Import android.util.Log;  
(4) 在onClick()方法的switch语句添加处理New Game按钮单击事件代码。
8、继续游戏 
(1)  
(2)   
(3) 利用getPuzzle()方法,读取已保存的数据并继续前一个游戏。
9、退出游戏  
实际上该游戏并不需要一个Exit按钮,用户完全可以通过Back键或Home键来完成其他工作。若想添加该按钮,则只需在onClick()方法的switch部分添加如下代码: case  R.id.exit_button: finish();.break; 
(二)绘制2D图形  
1、在Sudoku游戏中添加图形
(1)开始游戏
(2)定义Game类
(3)定义PuzzleView类
(4)绘制游戏盘面
(5)绘制输入
2、处理输入
(1) 实现一个小光标,以显示玩家当前选定的单元格。
(2) 在onKeyDown()方法中增加对应0到9的case分支,以处理键盘输入数字。
(3) 根据每个单元格可填数字的数目为其绘制不同颜色的背景。
3、创建软键盘  
(1) 在res/layout/keypad.xml中创建软键盘用户界面布局。
(2) 定义KeyPad类 4、实现游戏逻辑  在Game.java中实现游戏逻辑。
(三)多媒体多媒体设计设计 为Sudoku游戏配上音乐 
(1)为主屏幕配音  重写Sudoku类中的onResume()和onPause()两个方法即可。
(2)游戏过程中配乐  重写Game类中的onResume()和onPause()两个方法即可。
(3)定义Music类  Music类将管理用来播放当前音乐类的MediaPlayer类。类中Play()方法先调用stop()方法,停止一切正在播放的音乐。然后调用MediaPlayer.create()方法创建一个新的MediaPlayer实例,并将context及ID资源传给该实例。
 

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

评论(0)
发评论

下载排行榜

全部0条评论

快来发表一下你的评论吧 !

'+ '

'+ '

'+ ''+ '
'+ ''+ ''+ '
'+ ''+ '' ); $.get('/article/vipdownload/aid/'+webid,function(data){ if(data.code ==5){ $(pop_this).attr('href',"/login/index.html"); return false } if(data.code == 2){ //跳转到VIP升级页面 window.location.href="//m.obk20.com/vip/index?aid=" + webid return false } //是会员 if (data.code > 0) { $('body').append(htmlSetNormalDownload); var getWidth=$("#poplayer").width(); $("#poplayer").css("margin-left","-"+getWidth/2+"px"); $('#tips').html(data.msg) $('.download_confirm').click(function(){ $('#dialog').remove(); }) } else { var down_url = $('#vipdownload').attr('data-url'); isBindAnalysisForm(pop_this, down_url, 1) } }); }); //是否开通VIP $.get('/article/vipdownload/aid/'+webid,function(data){ if(data.code == 2 || data.code ==5){ //跳转到VIP升级页面 $('#vipdownload>span').text("开通VIP 免费下载") return false }else{ // 待续费 if(data.code == 3) { vipExpiredInfo.ifVipExpired = true vipExpiredInfo.vipExpiredDate = data.data.endoftime } $('#vipdownload .icon-vip-tips').remove() $('#vipdownload>span').text("VIP免积分下载") } }); }).on("click",".download_cancel",function(){ $('#dialog').remove(); }) var setWeixinShare={};//定义默认的微信分享信息,页面如果要自定义分享,直接更改此变量即可 if(window.navigator.userAgent.toLowerCase().match(/MicroMessenger/i) == 'micromessenger'){ var d={ title:'数独游戏(安卓版)的开发设计报告',//标题 desc:$('[name=description]').attr("content"), //描述 imgUrl:'https://'+location.host+'/static/images/ele-logo.png',// 分享图标,默认是logo link:'',//链接 type:'',// 分享类型,music、video或link,不填默认为link dataUrl:'',//如果type是music或video,则要提供数据链接,默认为空 success:'', // 用户确认分享后执行的回调函数 cancel:''// 用户取消分享后执行的回调函数 } setWeixinShare=$.extend(d,setWeixinShare); $.ajax({ url:"//www.obk20.com/app/wechat/index.php?s=Home/ShareConfig/index", data:"share_url="+encodeURIComponent(location.href)+"&format=jsonp&domain=m", type:'get', dataType:'jsonp', success:function(res){ if(res.status!="successed"){ return false; } $.getScript('https://res.wx.qq.com/open/js/jweixin-1.0.0.js',function(result,status){ if(status!="success"){ return false; } var getWxCfg=res.data; wx.config({ //debug: true, // 开启调试模式,调用的所有api的返回值会在客户端alert出来,若要查看传入的参数,可以在pc端打开,参数信息会通过log打出,仅在pc端时才会打印。 appId:getWxCfg.appId, // 必填,公众号的唯一标识 timestamp:getWxCfg.timestamp, // 必填,生成签名的时间戳 nonceStr:getWxCfg.nonceStr, // 必填,生成签名的随机串 signature:getWxCfg.signature,// 必填,签名,见附录1 jsApiList:['onMenuShareTimeline','onMenuShareAppMessage','onMenuShareQQ','onMenuShareWeibo','onMenuShareQZone'] // 必填,需要使用的JS接口列表,所有JS接口列表见附录2 }); wx.ready(function(){ //获取“分享到朋友圈”按钮点击状态及自定义分享内容接口 wx.onMenuShareTimeline({ title: setWeixinShare.title, // 分享标题 link: setWeixinShare.link, // 分享链接 imgUrl: setWeixinShare.imgUrl, // 分享图标 success: function () { setWeixinShare.success; // 用户确认分享后执行的回调函数 }, cancel: function () { setWeixinShare.cancel; // 用户取消分享后执行的回调函数 } }); //获取“分享给朋友”按钮点击状态及自定义分享内容接口 wx.onMenuShareAppMessage({ title: setWeixinShare.title, // 分享标题 desc: setWeixinShare.desc, // 分享描述 link: setWeixinShare.link, // 分享链接 imgUrl: setWeixinShare.imgUrl, // 分享图标 type: setWeixinShare.type, // 分享类型,music、video或link,不填默认为link dataUrl: setWeixinShare.dataUrl, // 如果type是music或video,则要提供数据链接,默认为空 success: function () { setWeixinShare.success; // 用户确认分享后执行的回调函数 }, cancel: function () { setWeixinShare.cancel; // 用户取消分享后执行的回调函数 } }); //获取“分享到QQ”按钮点击状态及自定义分享内容接口 wx.onMenuShareQQ({ title: setWeixinShare.title, // 分享标题 desc: setWeixinShare.desc, // 分享描述 link: setWeixinShare.link, // 分享链接 imgUrl: setWeixinShare.imgUrl, // 分享图标 success: function () { setWeixinShare.success; // 用户确认分享后执行的回调函数 }, cancel: function () { setWeixinShare.cancel; // 用户取消分享后执行的回调函数 } }); //获取“分享到腾讯微博”按钮点击状态及自定义分享内容接口 wx.onMenuShareWeibo({ title: setWeixinShare.title, // 分享标题 desc: setWeixinShare.desc, // 分享描述 link: setWeixinShare.link, // 分享链接 imgUrl: setWeixinShare.imgUrl, // 分享图标 success: function () { setWeixinShare.success; // 用户确认分享后执行的回调函数 }, cancel: function () { setWeixinShare.cancel; // 用户取消分享后执行的回调函数 } }); //获取“分享到QQ空间”按钮点击状态及自定义分享内容接口 wx.onMenuShareQZone({ title: setWeixinShare.title, // 分享标题 desc: setWeixinShare.desc, // 分享描述 link: setWeixinShare.link, // 分享链接 imgUrl: setWeixinShare.imgUrl, // 分享图标 success: function () { setWeixinShare.success; // 用户确认分享后执行的回调函数 }, cancel: function () { setWeixinShare.cancel; // 用户取消分享后执行的回调函数 } }); }); }); } }); } function openX_ad(posterid, htmlid, width, height) { if ($(htmlid).length > 0) { var randomnumber = Math.random(); var now_url = encodeURIComponent(window.location.href); var ga = document.createElement('iframe'); ga.src = 'https://www1.elecfans.com/www/delivery/myafr.php?target=_blank&cb=' + randomnumber + '&zoneid=' + posterid+'&prefer='+now_url; ga.width = width; ga.height = height; ga.frameBorder = 0; ga.scrolling = 'no'; var s = $(htmlid).append(ga); } } openX_ad(828, '#berry-300', 300, 250);