版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、台球游戏系统设计_课程设计论文 计算机学院课程设计 专 业: 计算机应用技术 课程名称: 3g开发基础 课题名称: 台球游戏系统 教 师: 学 号: 姓 名:前言 android是基于linux开放性内核的操作系统,是google公司在2007年11月5日公布的手机操作系统。早期由原名为“android”的公司开发,谷歌在2005年收购“android.inc”后,继续进行对android系统开发运营,它采用了软件堆层的架构,主要分为三部分。底层linux内核只提供基本功能,其他的应用软件则由各公司自行开发,部分程序以java编写。 2011年初数据显示,仅正式上市两年的操作系统android
2、已经超越称霸十年的塞班系统,使之跃居全球最受欢迎的智能手机平台。现在,android系统不但应用于智能手机,也在平板电脑市场急速扩张。 综合本学期的学习,开发一款基于android环境的台球游戏,熟练掌握android应用开发。课程设计目的1.1关于java1、熟悉java开发环境,熟悉用java完成一个应用程序的设计过程,掌握有关编 辑、调试和整合程序的方法和技巧。2、通过此设计,了解java语言的特点;熟悉java程序的编写;体会java语言在问题求解中的特点。3、总结学习java语言的心得和体会,并对java课程设置提出自己的意见和建议。1.2关于android熟悉android开发环境
3、,熟悉用java语言实现一个安卓程序的设计过程,掌握有关的设计技巧熟悉android开发环境,熟悉用java语言实现一个安卓程序的设计过程,掌握有关的设计技巧通过此课程设计,了解android系统的特点,掌握android相关的知识点。总结学习android开发环境,熟悉用java语言实现一个安卓程序的设计过程,掌握有关的设计技巧总结学习android的心得和体会,并且android课程提出自己的意见和建议,从中得到自己的学习心得和体会。设计任务及要求 根据android课程学习,将手机台球游戏设计的总体设计框架以及详细的设计和实现过程通老师讲解和自己的理解将其全部以课程设计的方式书写出来。总
4、体设计框架详细设计和实现过程4.1配置开发环境1、 安装jdk首先将下载的jdk-6u24-windows-i586安装到c:下2、配置环境变量选择计算机右键属性高级设置环境变量classpath :;%java_home%lib;%java_home%libdt.jar;%java_home%libtools.jar;java_home : c:program filesx86javajdk1.6.0_24path : %java_home%bin;将以上三个配置到环境变量中3、安装eclipse双击eclipse快捷方式图标,它会在你选择的路径下生成一个workspace文件夹,以后的项目
5、都在这里面。安装adt离线安装adt:点击eclipse上的help进入如图所示,点击add将adt导入若安装成功则会出现如图所示的navigate下面手机图标。安装sdk点击window进入preference,然后点击android,在sdk location中导入sdk,安装成功之后如图所示。4.2功能定义 台球游戏是根据人们日常中打台球的模式进行模拟式的通过点击按钮来调准角度并出击球杆。 选择【开始游戏】之后可选择【倒计时模式】和【练习模式】进行玩台球游戏,另外还可以点击【排行榜】查看分数情况,倒计时模式是在一定的时间进行玩游戏,练习模式是对于初次玩台球游戏的玩家或者不熟练的玩家。4.
6、3类的设计4.4类的功能各个类功能清单文件名主要功能备注constant.java定义台球所需工具gameactivity.java主体类main方法whatmessage.javasurface所需的常量类imagebutton.java球杆变形按钮iswitchbutton.javaswitchbutton.java角度调整按钮aboutview,java关于界面choiceview.java选项菜单界面helpview.java帮助界面soundcontrol.java声音控制界面ball.java台球ballgothread.java桌球运动cue.java球杆cueanimateth
7、read.java倒计时间gameview.java游戏界面gameviewdrawthread.java桌球运动画面keythread.java监听触控按键线程类strengthbar.java力度条table.java球台timer.java计时器timerunningthread.java倒计时线程类virtualbutton.java虚拟按钮类failview.java游戏失败界面highscoreview.java分数记录界面mainmenuview.java主界面wellcomeview.java欢迎界面winview.java游戏胜利界面collisionutil.java进行碰
8、撞检测和物理计算工具类colorutil.java颜色工具类datautil.java系统当前日期工具类picloadutil.java图片工具类screenscaleresult.java横竖屏幕工具类screenscaleutil.java计算缩放情况工具类 4.5类的特点 4.5.1抽象类whatmessage的描述 public class whatmessage public static final int goto_wellcome_view0; /欢迎界面 public static final int goto_main_menu_view1 ; /主菜单界面 public
9、static final int goto_game_view2;/游戏界面 public static final int goto_sound_contorl_view3;/声音控制界面 public static final int goto_win_view4;/胜利界面 public static final int goto_fail_view5;/失败界面 public static final int goto_high_score_view6; /排行榜界面 public static final int goto_help_view7; /帮助界面 public stati
10、c final int goto_about_view8; /关于界面 public static final int goto_choice_view9; /选择界面 public static final int over_game10; /游戏结束 这个类主要是标识所有surfaceview的常量,这些界面的常量用数字0至10表示的好处是:在后面的编程过程中更快捷,而且简单明了。 4.5.2界面设置public class aboutview extends viewgrouppaint paint;/画笔引用bitmap bgbitmap;/背景图片bitmap bmp;/文字的图片f
11、loat bmpx;/文字位置public aboutviewgameactivity activity superactivity;setwillnotdrawfalse;paintnew paint;/创建画笔paint.setantialiastrue;/打开抗锯齿initbitmap;/初始化位图资源/确定view的大小overrideprotected void onmeasureint widthmeasurespec, int heightmeasurespec /.width, bgbitmap.getheight;/确定各子控件的位置与大小,调用子控件的layout函数进行o
12、verrideprotected void onlayoutboolean changed, int l, int t, int r, int b /显示函数overridepublic void ondrawcanvas canvas canvas.drawbitmapbgbitmap, 0, 0, paint;canvas.drawbitmapbmp, bmpx+constant.x_offset, constant.bmp_y+constant.y_offset, paint;/加载图片的方法public void initbitmap/.resources, /.p;/.resourc
13、es, /0.0;bgbitmappicloadutil.scaletofitfullscreenbgbitmap, constant.wratio, constant.hratio;bmppicloadutil.scaletofitbmp, /.io;/初始化图片的位置bmpxconstant.screen_width-bmp.getwidth/2; 界面设置的类继承viewgroup,使用onmeasure确定view大小、onlayo确定各个子控件的位置与大小,ondraw方法显示函数,initbitmao方法加载图片。4.5.3监听器public class keythread ext
14、ends thread private boolean flagtrue;gameview gameview;private int sleepspan40;private float changespeedtime80f;/改变速度的时间点public keythreadgameview gameviewthis.gameviewgameview;overridepublic void runwhileflagif!gameview.keystate&0x200/第6位是1,可以改变按下按钮时间gameview.btnpresstime+3.5f;if!gameview.keystate&0
15、x10/和00001按位或,判断第1位是否为1,标志向左移ifgameview.btnpresstimechangespeedtime/如果按键时间不足/.ateleftslowly;/将球杆慢速左转else/如果按键超过规定时间/.ateleftfast;/将大炮快速左转else if!gameview.keystate&0x20/和00010按位或,判断第2位是否为1,标志向右移ifgameview.btnpresstimechangespeedtime/如果按键时间不足/.aterightslowly;/将球杆慢速右转else/如果按键超过规定时间/.aterightfast;/将大炮快
16、速右转try thread.sleepsleepspan;/睡眠指定毫秒数 catchexception e e.printstacktrace;/打印堆栈信息 public void setflagboolean flag this.flag flag;这监听器是起监听作用的线程类,这段代码是监听触控按键的线程类,这个线程是对球杆角度偏移进行控制。 4.5.4线程间通信 handler myhandler new handler/处理各个surfaceview发送的消息 public void handlemessagemessage msg switchmsg.what case what
17、message.goto_main_menu_view: gotomainmenuview; break; case whatmessage.goto_game_view: gotogameview; break; case whatmessage.goto_sound_contorl_view: gotosoundcontrolview; break; case whatmessage.goto_win_view: gotowinview; break; case whatmessage.goto_fail_view: gotofailview; break; case whatmessag
18、e.goto_high_score_view: gotohighscoreview; break; case whatmessage.goto_wellcome_view: gotowellcomeview; break; case whatmessage.goto_help_view: gotohelpview; break; case whatmessage.goto_about_view: gotoaboutview; break; case whatmessage.goto_choice_view: gotochoiceview; break; case whatmessage.ove
19、r_game: gotooverview; break; ; 线程间的通信需要用到handler来发送消息。线程之间的通信的原理是,线程通过handler将消息发送出去,发出去的消息就会到进入到messagequeue中,然后再通过looper将消息循环的发送出去。msg.what是messge对象的属性,起到标示作用。 4.5.5自定义按钮 public class imagebuttonex extends button protected bitmap btbitmap; protected boolean bbuttonpressedfalse; public imagebuttone
20、xcontext context supercontext; public imagebuttonexcontext context,bitmap btbitmap supercontext; this.btbitmapbtbitmap; setbackgrounddrawablenull; 自定义按钮的好处是,可以根据自己的喜爱和需要来绘制按钮,可以使你的游戏界面做得更漂亮,吸引大众的眼球。在这个游戏中的自定义按钮需要用到图形图像处理中的画布(canvas)、画笔(paint)和位图(bitmap)。4.5.6定时器/绘制时间的方法public void drawselfcanvas can
21、vas,paint paintint secondthis.leftsecond%60;int minutethis.leftsecond/60;/绘制秒钟 drawnumberbitmapsecond,numberbitmaps,endx+constant.x_offset,endy+constant.y_offset,canvas, paint;/绘制分隔符int secondlengthsecond+.length1second+.length+1 : second+.length;float breakmarkxendx-secondlength*numberwidth-breakma
22、rkwidth;float breakmarkyendy;canvas.drawbitmapbreakmarkbitmap, breakmarkx+constant.x_offset, breakmarky+constant.y_offset,paint;/绘制时间分隔符图片/绘制分钟float miniteendxbreakmarkx;float miniteendyendy; drawnumberbitmapminute,numberbitmaps,miniteendx+constant.x_offset,miniteendy+constant.y_offset,canvas, paint
23、; 4.5.7 数据存储/打开或创建数据库的方法 public void openorcreatedatabase trysldsqlitedatabase.opendatabase/data/data/com./.l/mydb, /数据库所在路径null, /cursorfactorysqlitedatabase.open_readwrite|sqlitedatabase.create_if_necessary /读写、若不存在则创建; string sqlcreate table if not exists highscore + +score integer, +date varchar
24、20 +;sld.execsqlsql;catchexception e toast.maketextthis, 数据库错误:+e.tostring, toast.length_short.show; /关闭数据库的方法 public void closedatabase trysld.close;catchexception etoast.maketextthis, 数据库错误:+e.tostring, toast.length_short.show;/插入记录的方法 public void insertint score,string date trystring sqlinsert in
25、to highscore values+score+,+date+;sld.execsqlsql;sld.close;catchexception etoast.maketextthis, 数据库错误:+e.tostring, toast.length_short.show;/查询的方法 public string queryint posfrom,int length/开始的位置,要查寻的记录条数 stringbuilder sbnew stringbuilder;/要返回的结果cursor curnull;openorcreatedatabase;string sqlselect scor
26、e,date from highscore order by score desc;cursld.rawquerysql, null;try cur.movetopositionposfrom;/将游标移动到指定的开始位置int count0;/当前查询记录条数whilecur.movetonext&countlengthint scorecur.getint0;string datecur.getstring1; sb.appendscore;sb.append/;sb.appenddate;sb.append/;/将记录用/分隔开count+;catchexception etoast.m
27、aketextthis, 数据库错误:+e.tostring, toast.length_short.show;finallycur.close;closedatabase;/转换成字符,并返回return sb.tostring; /得到数据库中记录条数的方法 public int getrowcount int result0;cursor curnull;openorcreatedatabase;try string sqlselect countscore from highscore;cursld.rawquerysql, null;ifcur.movetonextresultcur
28、.getint0;catchexception etoast.maketextthis, 数据库错误:+e.tostring, toast.length_short.show;finallycur.close;closedatabase;return result; 这个游戏中的数据存储用到的是sqlite数据库。sqlite是一个开源的嵌入式关系数据库,它可以减少应用程序管理数据的开销,可移植性好,很容易使用,它本身很小,但却高效而且可靠。嵌入式数据库的一大好处是在程序内部不需要网络配置,也不需要管理。使用sqlite数据存储需要熟悉sql语句的使用。使用sqlite数据库首先需要创建数据库
29、,相关记录就会在数据库中。4.5.8多线程public void runforint i0;itotalsleeptime/sleepspan;i+ surfaceholder /.holder;canvas canvas myholder.lockcanvas; try synchronized myholder rendercanvas; finally if canvas ! null myholder.unlockcanvasandpostcanvas; try thread.sleepsleepspan; catchexception e e.printstacktrace; 该run方
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2022年湖南省永州市公开招聘警务辅助人员辅警笔试自考题1卷含答案
- 2024年江苏省淮安市公开招聘警务辅助人员辅警笔试自考题1卷含答案
- 2024年内蒙古自治区巴彦淖尔市公开招聘警务辅助人员辅警笔试自考题2卷含答案
- 2021年浙江省温州市公开招聘警务辅助人员辅警笔试自考题1卷含答案
- 江苏省无锡市(2024年-2025年小学六年级语文)统编版质量测试((上下)学期)试卷及答案
- 2025年燃气掺混设备项目提案报告模式
- 2025年生活垃圾焚烧炉项目立项申请报告模板
- 2025年新能源发电项目提案报告模范
- 2025年渔业服务项目提案报告
- 方案公司3篇资料
- 日拱一卒行稳致远
- 培训内驱力的课件
- 管理后台策划方案
- 人防、物防、技防工作措施
- 市场部培训课程课件
- 八年级历史上册论述题汇总
- 资产评估学教程(第八版)习题及答案 乔志敏
- 提高留置针规范使用率
- 垃圾清运服务投标方案(技术方案)
- 《民俗旅游学》教学大纲(含课程思政元素)
- 人教版小学三年级上学期期末数学试卷(及答案)
评论
0/150
提交评论