臺球游戲系統(tǒng)安卓課程設(shè)計_第1頁
臺球游戲系統(tǒng)安卓課程設(shè)計_第2頁
臺球游戲系統(tǒng)安卓課程設(shè)計_第3頁
臺球游戲系統(tǒng)安卓課程設(shè)計_第4頁
臺球游戲系統(tǒng)安卓課程設(shè)計_第5頁
已閱讀5頁,還剩16頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

1、. 計算機學(xué)院課程設(shè)計專 業(yè): 計算機應(yīng)用技術(shù) 課程名稱: 3G開發(fā)基礎(chǔ) 課題名稱: 臺球游戲系統(tǒng) 教 師: 學(xué) 號: 姓 名: 2013 年 9月 20 日 2013 年 12 月 25 日目錄前言Android是基于Linux開放性內(nèi)核的操作系統(tǒng),是Google公司在2007年11月5日公布的手機操作系統(tǒng)。早期由原名為“Android”的公司開發(fā),谷歌在2005年收購“Android.Inc”后,繼續(xù)進行對Android系統(tǒng)開發(fā)運營,它采用了軟件堆層的架構(gòu),主要分為三部分。底層Linux內(nèi)核只提供基本功能,其他的應(yīng)用軟件則由各公司自行開發(fā),部分程序以Java編寫。 2011年初數(shù)據(jù)顯示,僅

2、正式上市兩年的操作系統(tǒng)Android已經(jīng)超越稱霸十年的塞班系統(tǒng),使之躍居全球最受歡迎的智能手機平臺?,F(xiàn)在,Android系統(tǒng)不但應(yīng)用于智能手機,也在平板電腦市場急速擴張。綜合本學(xué)期的學(xué)習(xí),開發(fā)一款基于android環(huán)境的臺球游戲,熟練掌握android應(yīng)用開發(fā)。1 課程設(shè)計目的1.1關(guān)于java1、熟悉Java開發(fā)環(huán)境,熟悉用Java完成一個應(yīng)用程序的設(shè)計過程,掌握有關(guān)編 輯、調(diào)試和整合程序的方法和技巧。2、通過此設(shè)計,了解Java語言的特點;熟悉Java程序的編寫;體會Java語言在問題求解中的特點。3、總結(jié)學(xué)習(xí)Java語言的心得和體會,并對Java課程設(shè)置提出自己的意見和建議。1.2關(guān)于a

3、ndroid熟悉android開發(fā)環(huán)境,熟悉用java語言實現(xiàn)一個安卓程序的設(shè)計過程,掌握有關(guān)的設(shè)計技巧1、 熟悉android開發(fā)環(huán)境,熟悉用java語言實現(xiàn)一個安卓程序的設(shè)計過程,掌握有關(guān)的設(shè)計技巧2、 通過此課程設(shè)計,了解android系統(tǒng)的特點,掌握android相關(guān)的知識點。3、 總結(jié)學(xué)習(xí)android開發(fā)環(huán)境,熟悉用java語言實現(xiàn)一個安卓程序的設(shè)計過程,掌握有關(guān)的設(shè)計技巧總結(jié)學(xué)習(xí)android的心得和體會,并且android課程提出自己的意見和建議,從中得到自己的學(xué)習(xí)心得和體會。2 設(shè)計任務(wù)及要求根據(jù)android課程學(xué)習(xí),將手機臺球游戲設(shè)計的總體設(shè)計框架以及詳細的設(shè)計和實現(xiàn)過程

4、通老師講解和自己的理解將其全部以課程設(shè)計的方式書寫出來。3 總體設(shè)計框架臺球游戲歡迎界面 開始界面退出 幫助設(shè)置開始游戲關(guān)于倒計時模式練習(xí)模式排行榜4 詳細設(shè)計和實現(xiàn)過程4.1配置開發(fā)環(huán)境1、 安裝JDK首先將下載的jdk-6u24-windows-i586安裝到C:下 2、配置環(huán)境變量選擇計算機>右鍵>屬性>高級設(shè)置>環(huán)境變量CLASSPATH : .;%JAVA_HOME%lib;%JAVA_HOME%libdt.jar;%JAVA_HOME%libtools.jar;JAVA_HOME : C:Program Files(x86)Javajdk1.6.0_24Pa

5、th : %JAVA_HOME%bin;將以上三個配置到環(huán)境變量中3、安裝eclipse雙擊eclipse快捷方式圖標,它會在你選擇的路徑下生成一個workspace文件夾,以后的項目都在這里面。4、 安裝ADT 離線安裝ADT: 點擊eclipse上的help進入如圖所示,點擊add將ADT導(dǎo)入若安裝成功則會出現(xiàn)如圖所示的navigate下面手機圖標。5、 安裝SDK點擊window進入preference,然后點擊android,在SDK Location中導(dǎo)入SDK,安裝成功之后如圖所示。4.2功能定義 臺球游戲是根據(jù)人們?nèi)粘V写蚺_球的模式進行模擬式的通過點擊按鈕來調(diào)準角度并出擊球桿。選

6、擇【開始游戲】之后可選擇【倒計時模式】和【練習(xí)模式】進行玩臺球游戲,另外還可以點擊【排行榜】查看分數(shù)情況,倒計時模式是在一定的時間進行玩游戲,練習(xí)模式是對于初次玩臺球游戲的玩家或者不熟練的玩家。4.3類的設(shè)計WhatMessageConstantMainMenuViewGameActivityFailViewHighScoreWellcomeViewWinViewAboutViewChoiceViewHelpViewSoundControlViewBallBallGoThreadCueGameViewGameViewDrawThreadKeyThreadStrengthBarTableTime

7、rTimeRunningThreadVirtualButtonCueAnimateThreadImageButtonExISwitchButtonSwitchButtonCollisionUtilColorUtilPicLoadUtilScreenScaleResultScreenScaleUtil4.4類的功能 各個類功能清單文件名主要功能備注Constant.java定義臺球所需工具GameActivity.java主體類Main方法WhatMessage.javaSurface所需的常量類ImageButton.java球桿變形按鈕ISwitchButton.javaSwitchButt

8、on.java角度調(diào)整按鈕AboutView,java關(guān)于界面ChoiceView.java選項菜單界面HelpView.java幫助界面SoundControl.java聲音控制界面Ball.java臺球BallGoThread.java桌球運動Cue.java球桿CueAnimateThread.java倒計時間GameView.java游戲界面GameViewDrawThread.java桌球運動畫面KeyThread.java監(jiān)聽觸控按鍵線程類StrengthBar.java力度條Table.java球臺Timer.java計時器TimeRunningThread.java倒計時線程類

9、VirtualButton.java虛擬按鈕類FailView.java游戲失敗界面HighScoreView.java分數(shù)記錄界面MainMenuView.java主界面WellcomeView.java歡迎界面WinView.java游戲勝利界面CollisionUtil.java進行碰撞檢測和物理計算工具類ColorUtil.java顏色工具類DataUtil.java系統(tǒng)當前日期工具類PicLoadUtil.java圖片工具類ScreenScaleResult.java橫豎屏幕工具類ScreenScaleUtil.java計算縮放情況工具類 4.5類的特點4.5.1抽象類WhatMes

10、sage的描述public class WhatMessage public static final int GOTO_WELLCOME_VIEW=0; /歡迎界面 public static final int GOTO_MAIN_MENU_VIEW=1 ; /主菜單界面 public static final int GOTO_GAME_VIEW=2;/游戲界面 public static final int GOTO_SOUND_CONTORL_VIEW=3; /聲音控制界面 public static final int GOTO_WIN_VIEW=4;/勝利界面 public st

11、atic final int GOTO_FAIL_VIEW=5;/失敗界面 public static final int GOTO_HIGH_SCORE_VIEW=6; /排行榜界面 public static final int GOTO_HELP_VIEW=7; /幫助界面 public static final int GOTO_ABOUT_VIEW=8; /關(guān)于界面 public static final int GOTO_CHOICE_VIEW=9; /選擇界面 public static final int OVER_GAME=10; /游戲結(jié)束這個類主要是標識所有Surface

12、View的常量,這些界面的常量用數(shù)字0至10表示的好處是:在后面的編程過程中更快捷,而且簡單明了。4.5.2界面設(shè)置public class AboutView extends ViewGroupPaint paint;/畫筆引用Bitmap bgBitmap;/背景圖片Bitmap bmp;/文字的圖片float bmpx;/文字位置public AboutView(GameActivity activity) super(activity);setWillNotDraw(false);paint=new Paint();/創(chuàng)建畫筆paint.setAntiAlias(true);/打開抗鋸

13、齒initBitmap();/初始化位圖資源/確定View的大小Overrideprotected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) this.setMeasuredDimension(bgBitmap.getWidth(), bgBitmap.getHeight();/確定各子控件的位置與大小,調(diào)用子控件的layout函數(shù)進行Overrideprotected void onLayout(boolean changed, int l, int t, int r, int b) /顯示函數(shù)Overridepu

14、blic void onDraw(Canvas canvas) canvas.drawBitmap(bgBitmap, 0, 0, paint);canvas.drawBitmap(bmp, bmpx+Constant.X_OFFSET, Constant.BMP_Y+Constant.Y_OFFSET, paint);/加載圖片的方法public void initBitmap()bgBitmap=BitmapFactory.decodeResource(this.getResources(), R.drawable.help);bmp=BitmapFactory.decodeResourc

15、e(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;界面設(shè)置的類繼承ViewGroup,使用onMeasure確定view大小、onLayo確定各個子控件的位置與大小,onDraw方法顯示

16、函數(shù),initBitmao方法加載圖片。4.5.3監(jiān)聽器public class KeyThread extends Thread private boolean flag=true;GameView gameView;private int sleepSpan=40;private float changeSpeedTime=80f;/改變速度的時間點public KeyThread(GameView gameView)this.gameView=gameView;Overridepublic void run()while(flag)if(!(gameView.keyState&0

17、x20)=0)/第6位是1,可以改變按下按鈕時間gameView.btnPressTime+=3.5f;if(!(gameView.keyState&0x1)=0)/和00001按位或,判斷第1位是否為1,標志向左移if(gameView.btnPressTime<changeSpeedTime)/如果按鍵時間不足gameView.cue.rotateLeftSlowly();/將球桿慢速左轉(zhuǎn)else/如果按鍵超過規(guī)定時間gameView.cue.rotateLeftFast();/將大炮快速左轉(zhuǎn)else if(!(gameView.keyState&0x2)=0)/和0

18、0010按位或,判斷第2位是否為1,標志向右移if(gameView.btnPressTime<changeSpeedTime)/如果按鍵時間不足gameView.cue.rotateRightSlowly();/將球桿慢速右轉(zhuǎn)else/如果按鍵超過規(guī)定時間gameView.cue.rotateRightFast();/將大炮快速右轉(zhuǎn)try Thread.sleep(sleepSpan);/睡眠指定毫秒數(shù) catch(Exception e) e.printStackTrace();/打印堆棧信息 public void setFlag(boolean flag) this.flag =

19、 flag;這監(jiān)聽器是起監(jiān)聽作用的線程類,這段代碼是監(jiān)聽觸控按鍵的線程類,這個線程是對球桿角度偏移進行控制。4.5.4線程間通信Handler myHandler = new Handler()/處理各個SurfaceView發(fā)送的消息 public void handleMessage(Message msg) switch(msg.what) case WhatMessage.GOTO_MAIN_MENU_VIEW: gotoMainMenuView(); break; case WhatMessage.GOTO_GAME_VIEW: gotoGameView(); break; case

20、 WhatMessage.GOTO_SOUND_CONTORL_VIEW: gotoSoundControlView(); break; case WhatMessage.GOTO_WIN_VIEW: gotoWinView(); break; case WhatMessage.GOTO_FAIL_VIEW: gotoFailView(); break; case WhatMessage.GOTO_HIGH_SCORE_VIEW: gotoHighScoreView(); break; case WhatMessage.GOTO_WELLCOME_VIEW: gotoWellcomeView(

21、); break; case WhatMessage.GOTO_HELP_VIEW: gotoHelpView(); break; case WhatMessage.GOTO_ABOUT_VIEW: gotoAboutView(); break; case WhatMessage.GOTO_CHOICE_VIEW: gotoChoiceView(); break; case WhatMessage.OVER_GAME: goToOverView(); break; ;線程間的通信需要用到Handler來發(fā)送消息。線程之間的通信的原理是,線程通過Handler將消息發(fā)送出去,發(fā)出去的消息就會到進

22、入到MessageQueue中,然后再通過Looper將消息循環(huán)的發(fā)送出去。msg.what是Messge對象的屬性,起到標示作用。4.5.5自定義按鈕public class ImageButtonEx extends Button protected Bitmap btBitmap;protected boolean bButtonPressed=false;public ImageButtonEx(Context context)super(context);public ImageButtonEx(Context context,Bitmap btBitmap)super(contex

23、t);this.btBitmap=btBitmap;setBackgroundDrawable(null); 自定義按鈕的好處是,可以根據(jù)自己的喜愛和需要來繪制按鈕,可以使你的游戲界面做得更漂亮,吸引大眾的眼球。在這個游戲中的自定義按鈕需要用到圖形圖像處理中的畫布(Canvas)、畫筆(Paint)和位圖(Bitmap)。4.5.6定時器/繪制時間的方法public void drawSelf(Canvas canvas,Paint paint)int second=this.leftSecond%60;int minute=this.leftSecond/60;/繪制秒鐘drawNumber

24、Bitmap(second,numberBitmaps,endX+Constant.X_OFFSET,endY+Constant.Y_OFFSET,canvas, paint);/繪制分隔符int secondLength=(second+"").length()<=1 ? (second+"").length()+1 : (second+"").length();float breakMarkX=endX-secondLength*numberWidth-breakMarkWidth;float breakMarkY=endY

25、;canvas.drawBitmap(breakMarkBitmap, breakMarkX+Constant.X_OFFSET, breakMarkY+Constant.Y_OFFSET,paint);/繪制時間分隔符圖片/繪制分鐘float miniteEndX=breakMarkX;float miniteEndY=endY;drawNumberBitmap(minute,numberBitmaps,miniteEndX+Constant.X_OFFSET,miniteEndY+Constant.Y_OFFSET,canvas, paint);4.5.7 數(shù)據(jù)存儲/打開或創(chuàng)建數(shù)據(jù)庫的方法

26、 public void openOrCreateDatabase() try sld=SQLiteDatabase.openDatabase ( "/data/data/com.bn.d2.bill/mydb", /數(shù)據(jù)庫所在路徑 null, /CursorFactory SQLiteDatabase.OPEN_READWRITE|SQLiteDatabase.CREATE_IF_NECESSARY /讀寫、若不存在則創(chuàng)建 ); String sql="create table if not exists highScore" + "( &q

27、uot; + "score integer," + "date varchar(20)" + ");" sld.execSQL(sql); catch(Exception e) Toast.makeText(this, "數(shù)據(jù)庫錯誤:"+e.toString(), Toast.LENGTH_SHORT).show(); /關(guān)閉數(shù)據(jù)庫的方法 public void closeDatabase() try sld.close(); catch(Exception e)Toast.makeText(this, "

28、;數(shù)據(jù)庫錯誤:"+e.toString(), Toast.LENGTH_SHORT).show(); /插入記錄的方法 public void insert(int score,String date) try String sql="insert into highScore values("+score+",'"+date+"');" sld.execSQL(sql); sld.close(); catch(Exception e)Toast.makeText(this, "數(shù)據(jù)庫錯誤:&quo

29、t;+e.toString(), Toast.LENGTH_SHORT).show(); /查詢的方法 public String query(int posFrom,int length)/開始的位置,要查尋的記錄條數(shù) StringBuilder sb=new StringBuilder();/要返回的結(jié)果 Cursor cur=null; openOrCreateDatabase(); String sql="select score,date from highScore order by score desc;" cur=sld.rawQuery(sql, null

30、); try cur.moveToPosition(posFrom);/將游標移動到指定的開始位置 int count=0;/當前查詢記錄條數(shù) while(cur.moveToNext()&&count<length) int score=cur.getInt(0); String date=cur.getString(1); sb.append(score); sb.append("/"); sb.append(date); sb.append("/");/將記錄用"/"分隔開 count+; catch(Ex

31、ception e)Toast.makeText(this, "數(shù)據(jù)庫錯誤:"+e.toString(), Toast.LENGTH_SHORT).show();finallycur.close();closeDatabase(); /轉(zhuǎn)換成字符,并返回return sb.toString(); /得到數(shù)據(jù)庫中記錄條數(shù)的方法 public int getRowCount() int result=0; Cursor cur=null; openOrCreateDatabase(); try String sql="select count(score) from

32、highScore;" cur=sld.rawQuery(sql, null); if(cur.moveToNext() result=cur.getInt(0); catch(Exception e)Toast.makeText(this, "數(shù)據(jù)庫錯誤:"+e.toString(), Toast.LENGTH_SHORT).show();finallycur.close();closeDatabase(); return result; 這個游戲中的數(shù)據(jù)存儲用到的是SQLite數(shù)據(jù)庫。SQLite是一個開源的嵌入式關(guān)系數(shù)據(jù)庫,它可以減少應(yīng)用程序管理數(shù)據(jù)的開銷,

33、可移植性好,很容易使用,它本身很小,但卻高效而且可靠。嵌入式數(shù)據(jù)庫的一大好處是在程序內(nèi)部不需要網(wǎng)絡(luò)配置,也不需要管理。使用SQLite數(shù)據(jù)存儲需要熟悉SQL語句的使用。使用SQLite數(shù)據(jù)庫首先需要創(chuàng)建數(shù)據(jù)庫,相關(guān)記錄就會在數(shù)據(jù)庫中。4.5.8多線程 public void run() for(int i=0;i<totalSleepTime/sleepSpan;i+) SurfaceHolder myholder=WinView.this.getHolder(); Canvas canvas = myholder.lockCanvas(); try synchronized (myholder) render(canvas); finally if (canvas != null) myholder.unlockCanvasAndPost(canvas); try Thread.sleep(sleepSpan); catch(Exception e) e.printStackTrace();

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論