毕业论文基于Android平台数独游戏的设计与实现44417.doc

上传人:文库蛋蛋多 文档编号:2394294 上传时间:2023-02-17 格式:DOC 页数:42 大小:2.11MB
返回 下载 相关 举报
毕业论文基于Android平台数独游戏的设计与实现44417.doc_第1页
第1页 / 共42页
毕业论文基于Android平台数独游戏的设计与实现44417.doc_第2页
第2页 / 共42页
毕业论文基于Android平台数独游戏的设计与实现44417.doc_第3页
第3页 / 共42页
毕业论文基于Android平台数独游戏的设计与实现44417.doc_第4页
第4页 / 共42页
毕业论文基于Android平台数独游戏的设计与实现44417.doc_第5页
第5页 / 共42页
点击查看更多>>
资源描述

《毕业论文基于Android平台数独游戏的设计与实现44417.doc》由会员分享,可在线阅读,更多相关《毕业论文基于Android平台数独游戏的设计与实现44417.doc(42页珍藏版)》请在三一办公上搜索。

1、3G手机软件开发课程设计题目:Android平台数独游戏的设计与实现院、 系: 计算机信息与技术系 学科专业: 软件工程 学生姓名: XXX 学 号: B10060XXX 指导教师: XX XX 2013年06月05日目 录一、绪 论31课题内容32课题意义33Android系统介绍和发展趋势4二、需求分析41任务概述42功能需求53性能需求5三、概要设计61数据库设计62功能设计63系统的结构设计64开发工具的选择7四、详细设计81主界面设计811 界面812 主要代码82游戏界面设计1021 界面1022 主要代码103通关界面1331 界面1332 主要代码134排行榜界面1641 界面

2、1642 主要代码175数独简介界面1851 界面1852 主要代码18五、软件实现191主界面实现(见图4-1)192游戏界面实现(见图4-2)193通关界面实现(见图4-3、图4-4)194排行榜界面实现(见图4-5)195数独简介界面实现(见图4-6)19六、软件测试191. 测试策略192测试内容202.1 首界面主要测试内容202.2 游戏界面主要测试内容212.3 游戏结束界面主要测试内容212.4 排行榜界面测试内容212.5 背景音乐测试内容213测试结论21七、总 结22八、参考文献22附 录(部分代码)23一、绪 论1课题内容开发一款Android平台的数独游戏,在教材(A

3、ndroid基础教程)数独游戏的基础上进行功能扩展。扩展部分的功能要求如下:(1)设计游戏关口不低于3关。当用户从第一关通过后,可以选择退出或游戏进入第二关运行,难度按照关口增加递增;(2)每关不少于5种初始局,且能随机选择其中一局运行;(3)用户每次通关播放动画(或音频、图片),并显示用户当前的分数;(4)程序存储得分在前5名用户的得分;2课题意义(1)运用软件工程的原理和方法来指导软件的设计与开发,既是对本学期刚学习的软件工程课程的复习,同时也是一次将理论应用到实践中的实战演练,非常有助于我们提高自己的分析问题、解决问题以及动手方面的能力;(2)通过对数独游戏的设计与实现,可以加深我们对A

4、ndroid了解和认识,使我们对Android编程有一个系统的掌握,为将来的Android游戏或者应用软件的开发打下坚实基础。3Android系统介绍和发展趋势Android是首款基于Linux平台的开放源代码的操作系统,是目前市面上移动设备最为火热的操作系统,其采用Linux内核,由Google公司和开放手机联盟领导及开发。Android是软件堆层(软件叠层)的架构,主要分为三部分:底层以Linux内核工作为基础,只提供基本功能;其他的应用软件则由各公司自行开发,以Java作为编写程序的一部分。Android手机系统的一个很大的优势在于其开放性和服务免费。Android是一个对第三方软件完全

5、开放的平台,开发者在为其开发程序软件时拥有更大的自由度。Android突破了iPhone 等只能添加为数不多的固定软件的枷锁;同时与WindowsMobile、Symbian等厂商不同,Android操作系统免费向开发人员提供。Android项目目前正从手机运营商、厂商、开发者和消费者那里获得大力支持。安卓在全球市场的成长壮大,塞班市场份额不断下跌已成不争事实。安卓操作系统发展迅猛主要得益于免费、开源和良好产业运作策略,这三点为安卓在智能手机市场赢得更多的发展机遇。系统的免费让更多的厂商加入,推动了份额的上升;代码的开源让更多的开发者进入应用开发;应用的丰富吸引了更多用户选择,这也是谷歌值得众

6、多厂商学习的地方。此外,谷歌通过OHA联合众多厂商进行系统研发,不断更新版本,将系统应用推广到更多的终端产品中,确保用户体验持续改善。二、需求分析1任务概述利用所学知识和通过一些拓展开发一款Android平台的数独游戏。数独是一种源自18世纪末的瑞士,后在美国发展、并在日本得以发扬光大的数字谜题,是一种运用纸、笔进行演算的逻辑游戏。玩家需要根据9X9盘面上给出的已知数字和解题帮助推理出所有剩余空格的数字,并填入1-9的数字,使其满足每一行、每一列、每一个粗线宫内的数字均含1-9且不重复。每一道合格的数独谜题都有且仅有一个唯一答案,推理方法也以此为基础任何无解或者多解的题目都是不合格的。这种游戏

7、全面考验玩家的观察能力和推理能力,虽然玩法不是很难,但数字排列方式却千变万化,所以不少教育者认为数独是训练头脑的绝佳方式。2功能需求本程序需要实现选择难度关卡选择,继续上一次未完成游戏,查看排行榜以及退出游戏等一系列基本功能。扩展部分的功能要求如下:(1)设计游戏关口不低于3关。当用户从第一关通过后,可以选择退出或游戏进入第二关运行,难度按照关口增加递增;(2)每关不少于5种初始局,且能随机选择其中一局运行;(3)用户每次通关播放动画(或音频、图片),并显示用户当前的分数;(4)程序存储得分在前5名用户的得分。3性能需求(1)处理的准确性和及时性游戏处理的准确性和及时性是游戏的必要性能。在系统

8、设计和开发过程中,要充分考虑系统当前和将来可能承受的工作量,使系统的处理能力和响应时间能够满足用户对信息处理的需求。(2)软件的易用性该游戏能让用户很简单的操作,使用户能在很快的时间内学会玩该游戏,可以便于用户之间进行思维的比拼。(3)系统的响应速度游戏在用户使用过程中的响应速度要快,达到实时要求,以及时反馈信息。能正确的反应用户的做题时间。(4)解题时间:因为处理数据需要不同的算法,算法的好坏在一定程度上就决定了软件的成败,接替时间控制要达到一定的要求,只有不断的优化算法才能降低解题的时间从而加强软件的快速响应从而更好的满足客户的需求。三、概要设计1数据库设计本程序的数据库名为rank.db

9、,其中的数据表名为myrank,数据内容具体如表3-1所示。表3-1 myrank属性数据类型说明idINTEGER名次nameVARCHAR(10)用户名timeINTEGER用时2功能设计(1)游戏开始功能:通过难度关卡的选择,调用不同游戏局开始新的游戏;(2)游戏继续功能:启动因玩家有事或其他原因而暂停的游戏局;(3)英雄榜功能:通过调用数据库显示前五名玩家的名次、姓名和用时;(4)音乐播放功能:进入游戏主界面、开始游戏以及顺利完成一局游戏或者通关,播放不同的背景音乐;(5)数据存储(数据库)功能:存储玩家的用时、姓名、名次等相关信息;(6)计时功能:记录玩家完成一局游戏所花费的时间;(

10、7)数独简介功能:对数独进行简要的介绍,同时对游戏的玩法进行讲解和说明;(8)退出程序功能:可以顺利退出游戏。3系统的结构设计系统结构为进入主界面显示游戏界面,选择菜单分为五项功能:继续之前的游戏功能、游戏开始功能,查看排行榜功能,数独简介功能以及退出功能。具体系统结构如图3-1所示。图3-1 系统结构图4开发工具的选择本软件采用 Android嵌入式数据库引擎SQLite创建数据库,开发工具采用的是Eclipse。如图3-2所示。图3-3 Eclipse四、详细设计1主界面设计主界面作为游戏的启动界面,用于显示软件的基本功能,使用户对软件有一个整体了解,主界面主要文件名为“Sudoku.ja

11、va”,主界面布局文件名为“main.xml”。11 界面主界面如图4-1所示。图4-1 数独主界面12 主要代码public void onCreate(Bundle savedInstanceState) super.onCreate(savedInstanceState); setContentView(R.layout.main); / Set up click listeners for all the buttons View continueButton = findViewById(R.id.continue_button); continueButton.setOnClick

12、Listener(this); View newButton = findViewById(R.id.new_button); newButton.setOnClickListener(this); View aboutButton = findViewById(R.id.about_button); aboutButton.setOnClickListener(this); View exitButton = findViewById(R.id.exit_button); exitButton.setOnClickListener(this); View rankButton=findVie

13、wById(R.id.rank_button); rankButton.setOnClickListener(this);public void onClick(View v) switch (v.getId() case R.id.continue_button: startGame(Game.DIFFICULTY_CONTINUE); break; case R.id.about_button: Intent i = new Intent(this, About.class); startActivity(i); break; case R.id.new_button: openNewGa

14、meDialog(); break; case R.id.rank_button: Intent t=new Intent(this,Rank.class); startActivity(t); Log.d(ttt, intent go); break; case R.id.exit_button: finish(); break; 2游戏界面设计游戏界面是数独游戏的开始界面,显示了正在进行的某一局游戏。游戏界面主要文件名为“Game.java”和“PuzzleView.java”。21 界面游戏界面如图4-2所示。图4-2 数独游戏界面22 主要代码public class Game ext

15、ends Activity private static final String TAG = Sudoku; public static final String KEY_DIFFICULTY = org.example.sudoku.difficulty; private static final String PREF_PUZZLE = puzzle ; protected static String recordtime=recordtime; /记录时间 private static int continuetime; public static final int DIFFICUL

16、TY_EASY = 0; public static final int DIFFICULTY_MEDIUM = 1; public static final int DIFFICULTY_HARD = 2; protected static final int DIFFICULTY_CONTINUE = -1; int time=0;/定义定时器 int rdm;/生成开局数组随机数 static int sec=0;/计算计时器分 秒 private int puzzle = new int9 * 9;/用一个数组来存下面的每个数字 private final String easyPuz

17、zle = 360000000004230800000004200 + 070460003820000014500013020 + 001900000007048300000000045; private final String mediumPuzzle = 650000070000506000014000005 + 007009000002314700000700800 + 500000630000201000030000097; private final String hardPuzzle = 009000000080605020501078000 + 0000007007060401

18、02004000000 + 000720903090301080000000600; private PuzzleView puzzleView;protected void onCreate(Bundle savedInstanceState) super.onCreate(savedInstanceState); Log.d(TAG, onCreate); rdm=(int)(Math.random()*100%5);/生成随机数获得数组布局中的一种 /Math.random()是令系统随机选取0-1之间的14位的随机数。 /通过调用getPuzzle(diff)来启动不同难度级别 int

19、 diff = getIntent().getIntExtra(KEY_DIFFICULTY, DIFFICULTY_EASY); /获取Activity传来的整形数据 puzzle = getPuzzle(diff);/puzzle数组的值来自于getPuzzle(diff)返回的值 calculateUsedTiles(); puzzleView = new PuzzleView(this); setContentView(puzzleView); puzzleView.requestFocus(); /用于指定屏幕内的焦点View getIntent().putExtra(KEY_DIF

20、FICULTY, DIFFICULTY_CONTINUE); getIntent().putExtra(recordtime,this.time);/获得用户用时 private int getPuzzle(int diff) String puz; switch (diff) case DIFFICULTY_CONTINUE: puz = getPreferences(MODE_PRIVATE).getString(PREF_PUZZLE, easyPuzzlerdm);/easypuzzle time=getPreferences(MODE_PRIVATE).getInt(recordti

21、me, continuetime);/读取保存的用户用时 break; case DIFFICULTY_HARD: puz = hardPuzzlerdm; break; case DIFFICULTY_MEDIUM: puz = mediumPuzzlerdm; break; case DIFFICULTY_EASY: default: puz = easyPuzzlerdm; break; return fromPuzzleString(puz);private void calculateUsedTiles() for (int x = 0; x 9; x+) for (int y =

22、0; y 9; y+) usedxy = calculateUsedTiles(x, y); /游戏结束 int num=0; for(int i=0;imn&mn!=0if(smn&mn!=0) setContentView(R.layout.gameover);restart=(Button)findViewById(R.id.restart);outgame=(Button)findViewById(R.id.outgame);score1=(TextView)findViewById(R.id.score1);restart.setOnClickListener(this);outga

23、me.setOnClickListener(this);score= 1000 - s*10;score1.setText(score+分);/setText(String.valueOf(score)/恭喜您破纪录了elsesetContentView(R.layout.gameover1);mytime=(TextView)findViewById(R.id.mytime);myname=(EditText)findViewById(R.id.myname);orderbutton=(Button)findViewById(R.id.orderbutton);orderbutton.set

24、OnClickListener(this);mytime.setText(s+秒);public void onClick(View v) switch(v.getId()case R.id.restart:num=num+1;if (num2) mp.stop(); Toast toast = Toast.makeText(this,恭喜您顺利通过三关,完成了本关卡的挑战, 2500); / (duration:显示时间) toast.setGravity(Gravity.CENTER, 0, 0);/setGravity(起点位置,水平向右位移,垂直向下位移) toast.show();

25、Intent tt=new Intent(this,Sudoku.class); startActivity(tt); break;else Intent t=new Intent(this,Game.class);startActivity(t);break;case R.id.outgame:mp.stop();Intent tt=new Intent(this,Sudoku.class);startActivity(tt);break;case R.id.orderbutton:/传输数据到数据库if(myname.getText().length()=10&s!=0)GameOver.

26、this.myrank = new MytabOperate(GameOver.this.helper.getWritableDatabase();GameOver.this.myrank.insert(myname.getText().toString(), s);Log.d(aaa,insert success);setContentView(R.layout.gameover);gameover=(TextView)findViewById(R.id.gameover);restart=(Button)findViewById(R.id.restart);/再来一局outgame=(Bu

27、tton)findViewById(R.id.outgame);/返回score1=(TextView)findViewById(R.id.score1);score= 1000 - s*10;score1.setText(score+分);restart.setOnClickListener(this);outgame.setOnClickListener(this);gameover.setText(成绩已登录排行榜!);else /消息对话框new AlertDialog.Builder(this).setMessage(您输入的名字过长(不超过10位)请返回重新输入!).create(

28、).show();break;protected void onResume()super.onResume();mp=MediaPlayer.create(this, R.raw.shengli);mp.start();4排行榜界面排行榜界面是点击“英雄榜”弹出的界面,调用数据库显示前五名玩家的名次、用户名和用时等数据。排行榜界面的文件名为“Rank.java”,布局文件为“Rank.xml”。41 界面排行榜界面如图4-5所示。图4-5 排行榜界面42 主要代码public class Rank extends Activityprivate SQLiteOpenHelper helper

29、 = null ;private LinearLayout mylayout = null ;public void onCreate(Bundle savedInstanceState) super.onCreate(savedInstanceState);super.setContentView(R.layout.rank);Log.d(aaa, contentView go);this.mylayout = (LinearLayout) super.findViewById(R.id.ranklayout);this.helper = new MyDatabaseHelper(this)

30、;ListView listView = new ListView(this) ;/ 要设置数据listView.setAdapter(/ 所有的数据是字符串new ArrayAdapter( this,/ 上下文对象/ 列表显示的布局 android.R.layout.simple_list_item_1,new MytabCursor(/ 实例化查询 / 取得SQLiteDatabase对象this.helper.getReadableDatabase().find();/ 调用find()方法,返回List ;this.mylayout.addView(listView) ;5数独简介界

31、面简介界面是点击“关于数独”弹出的界面,这是显示的是数独的简要介绍以及对游戏的玩法进行讲解和说明的文字。简介界面的文件名为“About.java”,布局文件为“about.xml”。51 界面数独简介界面如图4-6所示。图4-6 排行榜界面52 主要代码public class About extends Activity Override protected void onCreate(Bundle savedInstanceState) super.onCreate(savedInstanceState); setContentView(R.layout.about); 五、软件实现1主界

32、面实现(见图4-1)2游戏界面实现(见图4-2)3通关界面实现(见图4-3、图4-4)4排行榜界面实现(见图4-5)5数独简介界面实现(见图4-6)六、软件测试1. 测试策略以黑盒测试为主,白盒测试为辅,通过简单的查看软件内部代码,了解软件的运行状态。(1)、易用性测试测试目标测试游戏是否容易进入,显示速度,设计是否合理方法进行手工测试调整不规范的地方。完成标准测试成功,测试能达到基本要求并且发现的问题全部解决需考虑的特殊事项测试过程中可能出现手机内存状态不稳定。(2)、功能测试测试目标测试所有功能是否已正常实现。数据精确:各数据类型的输入时统计精确。方法对测试对象的功能进行测试,调整不规范的

33、地方。进行手工测试。完成标准测试成功,测试用例通过并且发现的严重错误全部解决需考虑的特殊事项测试过程中可能出现系统版本不兼容。(3)、性能测试测试目标核实游戏在用户访问多数据时性能的稳定性,不造成系统崩溃或相关的异常现象方法负荷测试和压力测试完成标准系统能满足用户需求中所要求的性能要求需考虑的特殊事项暂无(4)、配置/兼容性测试测试目标核实系统在不同的软件和硬件配置中运行稳定方法手工测试和工具测试相结合完成标准在各种不同android版本、不同类型android手机均能正常实现功能需考虑的特殊事项暂无(5)、安全性测试测试目标核实用户是否只能操作其拥有权限能操作的功能,核实只有具备访问权限的管

34、理员才能访问系统 方法手工测试和工具测试相结合完成标准执行各种非法操作无安全漏洞且游戏使用正常需考虑的特殊事项暂无2测试内容2.1 首界面主要测试内容按钮是否响应,是否能弹出相应对话框。2.2 游戏界面主要测试内容(1)是否能正确弹出棋局;(2)棋盘是否正常显示;(3)点击界面是否弹出当前位置的小键盘,是否有数字提示;(4)数字是否能正确填入,填写出错是否响应错误提示。2.3 游戏结束界面主要测试内容(1)是否正确弹出“通过提示”对话框;(2)图片是否正常显示,得分显示是否正确;(3)当玩家用时低于数据库中的记录时是否能弹出“破纪录”对话框,并正确显示玩家的用时;(4)输入用户信息时:合法输入

35、,能否正常存入数据库并再次弹出“通关提示”对话框;非法输入,系统能否辨别并作出响应;(5)当玩家成功通过三大关卡中的某一个三局及其以上游戏,是否能弹出相应提示并结束。2.4 排行榜界面测试内容(1)是否能正常调用数据库;(2)信息是否正确显示。2.5 背景音乐测试内容(1)打开游戏首界面、进行游戏、游戏通关是否播放不同背景音乐;(2)点击“返回”退出游戏,是否音乐停止。3测试结论 (1)测试目标基本完成;(2)测试全部通过。此次测试是将系统各功能模块进行逐一的检查,对系统各功能的正常运行做了充分的测试。输入数据库数据的检测功能以及出错处理情况。但由于功能模块较多,采用功能测试设计的测试用例比较

36、多,测试花费了一定的时间。七、总 结在做课程设计之前,我对Android知识的掌握是很有限的,主要来自于课堂上老师授予的,而自己在课后花的时间相对较少。因此有些知识记得不清楚甚至不知道,这就在很大程度上给本次课程设计带来了很多麻烦,如时间的多余开销,程序编写的效率低下,代码显得长而复杂等。在本次课程设计的过程中,每一步功能的实现都让我感到无比高兴,哪怕只是一小步。因为每一小点的成功都能让我学到并掌握许多的知识。SQLite 数据库的实现是一个非常艰难的过程,但成功连接的那一刻真的是难以言说的激动。通过TimeThread类实现游戏的计时,GameOver类实现游戏通关的提示与跳转,Rank类将

37、存入数据库中的记录显示输出等功能的实现都是本次课程设计中令我感到骄傲的地方,也是收获最多的地方。通过这次课程设计,让我意识到自己和周围的同学存在着很大的差距,小到Android中语句的定义,我都需要重新去学习。因此我比别人花的更多的时间,浪费了更多的精力,但这些都是值得的,因为这一过程中我学到了许多知识。通过本次课程设计让我进一步熟悉了Android的编程,进一步掌握各种程序调试方法,进一步了解和学习了良好的程序设计风格,受益匪浅!本次课程设计的基本成功是在老师的辛勤帮助下才得以实现,在此感谢张琳老师给我提供了这一个实践动手的机会以及给予我们的悉心指导和帮助,同时也感谢帮助我的各位同学,因为有他们的提醒和建议,才有了我本次课程设计的成功。八、参考文献1 Ed Burnette著,田俊静,张波,黄湘清译.Android基础教程(第3版修订版)M.北京:人民邮电出版社.20112 Nicolas Gramlich,张劲锋.Android编程入门教程andbook中文版M.北京:人民邮电出版社.20103 吴亚峰,索依娜.Android核心技术与实例详解M.北京:电子工业出版社.20104 Rogers Cadenhead,Laura Lemay.21天学通Java 2M.北京:民邮电出版社.2004 5 张海藩.软件工程导论(第五版)M.北京:清华

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 建筑/施工/环境 > 项目建议


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号