台球游戏系统安卓课程设计 精品.docx

上传人:b****8 文档编号:11295643 上传时间:2023-02-26 格式:DOCX 页数:25 大小:1.70MB
下载 相关 举报
台球游戏系统安卓课程设计 精品.docx_第1页
第1页 / 共25页
台球游戏系统安卓课程设计 精品.docx_第2页
第2页 / 共25页
台球游戏系统安卓课程设计 精品.docx_第3页
第3页 / 共25页
台球游戏系统安卓课程设计 精品.docx_第4页
第4页 / 共25页
台球游戏系统安卓课程设计 精品.docx_第5页
第5页 / 共25页
点击查看更多>>
下载资源
资源描述

台球游戏系统安卓课程设计 精品.docx

《台球游戏系统安卓课程设计 精品.docx》由会员分享,可在线阅读,更多相关《台球游戏系统安卓课程设计 精品.docx(25页珍藏版)》请在冰豆网上搜索。

台球游戏系统安卓课程设计 精品.docx

台球游戏系统安卓课程设计精品

 

计算机学院课程设计

 

专业:

计算机应用技术

课程名称:

3G开发基础

课题名称:

台球游戏系统

教师:

学号:

姓名:

 

2013年9月20日——2013年12月25日

 

目录

 

前言

Android是基于Linux开放性内核的操作系统,是Google公司在2007年11月5日公布的手机操作系统。

早期由原名为“Android”的公司开发,谷歌在2005年收购“Android.Inc”后,继续进行对Android系统开发运营,它采用了软件堆层的架构,主要分为三部分。

底层Linux内核只提供基本功能,其他的应用软件则由各公司自行开发,部分程序以Java编写。

2011年初数据显示,仅正式上市两年的操作系统Android已经超越称霸十年的塞班系统,使之跃居全球最受欢迎的智能手机平台。

现在,Android系统不但应用于智能手机,也在平板电脑市场急速扩张。

综合本学期的学习,开发一款基于android环境的台球游戏,熟练掌握android应用开发。

 

1.课程设计目的

1.1关于java

1、熟悉Java开发环境,熟悉用Java完成一个应用程序的设计过程,掌握有关编辑、调试和整合程序的方法和技巧。

2、通过此设计,了解Java语言的特点;熟悉Java程序的编写;体会Java语言在问题求解中的特点。

3、总结学习Java语言的心得和体会,并对Java课程设置提出自己的意见和建议。

1.2关于android

熟悉android开发环境,熟悉用java语言实现一个安卓程序的设计过程,掌握有关的设计技巧

1、熟悉android开发环境,熟悉用java语言实现一个安卓程序的设计过程,掌握有关的设计技巧

2、通过此课程设计,了解android系统的特点,掌握android相关的知识点。

3、总结学习android开发环境,熟悉用java语言实现一个安卓程序的设计过程,掌握有关的设计技巧

总结学习android的心得和体会,并且android课程提出自己的意见和建议,从中得到自己的学习心得和体会。

2.设计任务及要求

根据android课程学习,将手机台球游戏设计的总体设计框架以及详细的设计和实现过程通老师讲解和自己的理解将其全部以课程设计的方式书写出来。

3.总体设计框架

台球游戏

 

欢迎界面

 

开始界面

 

退出

帮助

设置

开始游戏

关于

 

倒计时模式

练习模式

排行榜

4.详细设计和实现过程

4.1配置开发环境

1、安装JDK

首先将下载的jdk-6u24-windows-i586安装到C:

\下

2、配置环境变量

选择计算机>右键>属性>高级设置>环境变量

CLASSPATH:

.;%JAVA_HOME%\lib;%JAVA_HOME%\lib\dt.jar;%JAVA_HOME%\lib\tools.jar;

JAVA_HOME:

C:

\ProgramFiles(x86)\Java\jdk1.6.0_24

Path:

%JAVA_HOME%\bin;

将以上三个配置到环境变量中

3、安装eclipse

双击eclipse快捷方式图标,它会在你选择的路径下生成一个workspace文件夹,以后的项目都在这里面。

4、安装ADT

离线安装ADT:

点击eclipse上的help进入如图所示,点击add将ADT导入

若安装成功则会出现如图所示的navigate下面手机图标。

5、安装SDK

点击window进入preference,然后点击android,在SDKLocation中导入SDK,安装成功之后如图所示。

4.2功能定义

台球游戏是根据人们日常中打台球的模式进行模拟式的通过点击按钮来调准角度并出击球杆。

选择【开始游戏】之后可选择【倒计时模式】和【练习模式】进行玩台球游戏,另外还可以点击【排行榜】查看分数情况,倒计时模式是在一定的时间进行玩游戏,练习模式是对于初次玩台球游戏的玩家或者不熟练的玩家。

4.3类的设计

ScreenScaleUtil

4.4类的功能

各个类功能清单

文件名

主要功能

备注

Constant.java

定义台球所需工具

GameActivity.java

主体类

Main方法

WhatMessage.java

Surface所需的常量类

ImageButton.java

球杆变形按钮

ISwitchButton.java

SwitchButton.java

角度调整按钮

AboutView,java

关于界面

ChoiceView.java

选项菜单界面

HelpView.java

帮助界面

SoundControl.java

声音控制界面

Ball.java

台球

BallGoThread.java

桌球运动

Cue.java

球杆

CueAnimateThread.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

进行碰撞检测和物理计算工具类

ColorUtil.java

颜色工具类

DataUtil.java

系统当前日期工具类

PicLoadUtil.java

图片工具类

ScreenScaleResult.java

横竖屏幕工具类

ScreenScaleUtil.java

计算缩放情况工具类

4.5类的特点

4.5.1抽象类WhatMessage的描述

publicclassWhatMessage{

publicstaticfinalintGOTO_WELLCOME_VIEW=0;//欢迎界面

publicstaticfinalintGOTO_MAIN_MENU_VIEW=1;//主菜单界面

publicstaticfinalintGOTO_GAME_VIEW=2;//游戏界面

publicstaticfinalintGOTO_SOUND_CONTORL_VIEW=3;//声音控制界面

publicstaticfinalintGOTO_WIN_VIEW=4;//胜利界面

publicstaticfinalintGOTO_FAIL_VIEW=5;//失败界面

publicstaticfinalintGOTO_HIGH_SCORE_VIEW=6;//排行榜界面

publicstaticfinalintGOTO_HELP_VIEW=7;//帮助界面

publicstaticfinalintGOTO_ABOUT_VIEW=8;//关于界面

publicstaticfinalintGOTO_CHOICE_VIEW=9;//选择界面

publicstaticfinalintOVER_GAME=10;//游戏结束

}

这个类主要是标识所有SurfaceView的常量,这些界面的常量用数字0至10表示的好处是:

在后面的编程过程中更快捷,而且简单明了。

4.5.2界面设置

publicclassAboutViewextendsViewGroup{

Paintpaint;//画笔引用

BitmapbgBitmap;//背景图片

Bitmapbmp;//文字的图片

floatbmpx;//文字位置

publicAboutView(GameActivityactivity){

super(activity);

setWillNotDraw(false);

paint=newPaint();//创建画笔

paint.setAntiAlias(true);//打开抗锯齿

initBitmap();//初始化位图资源

}

//确定View的大小

@Override

protectedvoidonMeasure(intwidthMeasureSpec,intheightMeasureSpec){

this.setMeasuredDimension(bgBitmap.getWidth(),bgBitmap.getHeight());

}

//确定各子控件的位置与大小,调用子控件的layout函数进行

@Override

protectedvoidonLayout(booleanchanged,intl,intt,intr,intb){

}

//显示函数

@Override

publicvoidonDraw(Canvascanvas){

canvas.drawBitmap(bgBitmap,0,0,paint);

canvas.drawBitmap(bmp,bmpx+Constant.X_OFFSET,Constant.BMP_Y+Constant.Y_OFFSET,paint);

}

//加载图片的方法

publicvoidinitBitmap(){

bgBitmap=BitmapFactory.decodeResource(this.getResources(),R.drawable.help);

bmp=BitmapFactory.decodeResource(this.getResources(),R.drawable.bmp0);

bgBitmap=PicLoadUtil.scaleToFitFullScreen(bgBitmap,Constant.wRatio,Constant.hRatio);

bmp=PicLoadUtil.scaleToFit(bmp,Constant.ssr.ratio);

//初始化图片的位置

bmpx=(Constant.SCREEN_WIDTH-bmp.getWidth())/2;

}

}

界面设置的类继承ViewGroup,使用onMeasure确定view大小、onLayo确定各个子控件的位置与大小,onDraw方法显示函数,initBitmao方法加载图片。

4.5.3监听器

publicclassKeyThreadextendsThread{

privatebooleanflag=true;

GameViewgameView;

privateintsleepSpan=40;

privatefloatchangeSpeedTime=80f;//改变速度的时间点

publicKeyThread(GameViewgameView)

{

this.gameView=gameView;

}

@Override

publicvoidrun()

{

while(flag)

{

if(!

((gameView.keyState&0x20)==0))//第6位是1,可以改变按下按钮时间

{

gameView.btnPressTime+=3.5f;

}

if(!

((gameView.keyState&0x1)==0))//和00001按位或,判断第1位是否为1,标志向左移

{

if(gameView.btnPressTime

{

gameView.cue.rotateLeftSlowly();//将球杆慢速左转

}

else//如果按键超过规定时间

{

gameView.cue.rotateLeftFast();//将大炮快速左转

}

}

elseif(!

((gameView.keyState&0x2)==0))//和00010按位或,判断第2位是否为1,标志向右移

{

if(gameView.btnPressTime

{

gameView.cue.rotateRightSlowly();//将球杆慢速右转

}

else//如果按键超过规定时间

{

gameView.cue.rotateRightFast();//将大炮快速右转

}

}

try{

Thread.sleep(sleepSpan);//睡眠指定毫秒数

}

catch(Exceptione){

e.printStackTrace();//打印堆栈信息

}

}

}

publicvoidsetFlag(booleanflag){

this.flag=flag;

}

}

这监听器是起监听作用的线程类,这段代码是监听触控按键的线程类,这个线程是对球杆角度偏移进行控制。

4.5.4线程间通信

HandlermyHandler=newHandler(){//处理各个SurfaceView发送的消息

publicvoidhandleMessage(Messagemsg){

switch(msg.what)

{

caseWhatMessage.GOTO_MAIN_MENU_VIEW:

gotoMainMenuView();

break;

caseWhatMessage.GOTO_GAME_VIEW:

gotoGameView();

break;

caseWhatMessage.GOTO_SOUND_CONTORL_VIEW:

gotoSoundControlView();

break;

caseWhatMessage.GOTO_WIN_VIEW:

gotoWinView();

break;

caseWhatMessage.GOTO_FAIL_VIEW:

gotoFailView();

break;

caseWhatMessage.GOTO_HIGH_SCORE_VIEW:

gotoHighScoreView();

break;

caseWhatMessage.GOTO_WELLCOME_VIEW:

gotoWellcomeView();

break;

caseWhatMessage.GOTO_HELP_VIEW:

gotoHelpView();

break;

caseWhatMessage.GOTO_ABOUT_VIEW:

gotoAboutView();

break;

caseWhatMessage.GOTO_CHOICE_VIEW:

gotoChoiceView();

break;

caseWhatMessage.OVER_GAME:

goToOverView();

break;

}

}

};

线程间的通信需要用到Handler来发送消息。

线程之间的通信的原理是,线程通过Handler将消息发送出去,发出去的消息就会到进入到MessageQueue中,然后再通过Looper将消息循环的发送出去。

msg.what是Messge对象的属性,起到标示作用。

4.5.5自定义按钮

publicclassImageButtonExextendsButton{

protectedBitmapbtBitmap;

protectedbooleanbButtonPressed=false;

publicImageButtonEx(Contextcontext){

super(context);

}

publicImageButtonEx(Contextcontext,BitmapbtBitmap){

super(context);

this.btBitmap=btBitmap;

setBackgroundDrawable(null);

}

自定义按钮的好处是,可以根据自己的喜爱和需要来绘制按钮,可以使你的游戏界面做得更漂亮,吸引大众的眼球。

在这个游戏中的自定义按钮需要用到图形图像处理中的画布(Canvas)、画笔(Paint)和位图(Bitmap)。

4.5.6定时器

//绘制时间的方法

publicvoiddrawSelf(Canvascanvas,Paintpaint){

intsecond=this.leftSecond%60;

intminute=this.leftSecond/60;

//绘制秒钟

drawNumberBitmap(second,numberBitmaps,endX+Constant.X_OFFSET,endY+Constant.Y_OFFSET,canvas,paint);

//绘制分隔符

intsecondLength=(second+"").length()<=1?

(second+"").length()+1:

(second+"").length();

floatbreakMarkX=endX-secondLength*numberWidth-breakMarkWidth;

floatbreakMarkY=endY;

canvas.drawBitmap(breakMarkBitmap,breakMarkX+Constant.X_OFFSET,breakMarkY+Constant.Y_OFFSET,paint);//绘制时间分隔符图片

//绘制分钟

floatminiteEndX=breakMarkX;

floatminiteEndY=endY;

drawNumberBitmap(minute,numberBitmaps,miniteEndX+Constant.X_OFFSET,miniteEndY+Constant.Y_OFFSET,canvas,paint);

}

4.5.7数据存储

//打开或创建数据库的方法

publicvoidopenOrCreateDatabase()

{

try

{

sld=SQLiteDatabase.openDatabase

"/data/data/com.bn.d2.bill/mydb",//数据库所在路径

null,//CursorFactory

SQLiteDatabase.OPEN_READWRITE|SQLiteDatabase.CREATE_IF_NECESSARY//读写、若不存在则创建

);

Stringsql="createtableifnotexistshighScore"+

"("+

"scoreinteger,"+

"datevarchar(20)"+

");";

sld.execSQL(sql);

}

catch(Exceptione)

{

Toast.makeText(this,"数据库错误:

"+e.toString(),Toast.LENGTH_SHORT).show();

}

}

//关闭数据库的方法

publicvoidcloseDatabase()

{

try

{

sld.close();

}

catch(Exceptione)

{

Toast.makeText(this,"数据库错误:

"+e.toString(),Toast.LENGTH_SHORT).show();;

}

}

//插入记录的方法

publicvoidinsert(intscore,Stringdate)

{

try

{

Stringsql="insertintohighScorevalues("+score+",'"+date+"');";

sld.execSQL(sql);

sld.close();

}

catch(Exceptione)

{

Toast.makeText(this,"数据库错误:

"+e.toString(),Toast.LENGTH_SHORT).show();;

}

}

//查询的方法

publicStringquery(intposFrom,intlength)//开始的位置,要查寻的记录条数

{

StringBuildersb=newStringBuilder();//要返回的结果

Cursorcur=null;

openOrCreateDatabase();

Stringsql="selectscore,datefromhighScoreorderbyscoredesc;";

cur=sld.rawQuery(sql,null);

try

{

cur.moveToPosition(posFrom);//将游标移动到指定的开始位置

intcount=0;//当前查询记录条数

while(cur.moveToNext()&&count

{

intscore=cur.getInt(0);

Stringdate=cur.getString

(1);

sb.append(score);

sb.append("/");

sb.append(date);

sb.append("/");//将记录用"/"分

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

当前位置:首页 > 解决方案 > 解决方案

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1