《Android》課程設(shè)計(jì)報(bào)告(共17頁(yè))_第1頁(yè)
《Android》課程設(shè)計(jì)報(bào)告(共17頁(yè))_第2頁(yè)
《Android》課程設(shè)計(jì)報(bào)告(共17頁(yè))_第3頁(yè)
《Android》課程設(shè)計(jì)報(bào)告(共17頁(yè))_第4頁(yè)
《Android》課程設(shè)計(jì)報(bào)告(共17頁(yè))_第5頁(yè)
已閱讀5頁(yè),還剩12頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、精選優(yōu)質(zhì)文檔-傾情為你奉上濱江學(xué)院 Android課程設(shè)計(jì)報(bào)告題 目 飛翔的圓(類似Flappy Bird) 專 業(yè)_ _學(xué)生姓名_ _ _ _ 學(xué) 號(hào)_ _二一五年 六月 二十五日目錄 一 安卓應(yīng)用程序開發(fā)背景1.1開發(fā)背景1.智能手機(jī)的市場(chǎng)(1)功能多樣化的智能手機(jī)挑戰(zhàn)全球PC出貨量移動(dòng)互聯(lián)網(wǎng)時(shí)代的來(lái)臨,直接促進(jìn)了搭載智能操作系統(tǒng)、具有強(qiáng)大擴(kuò)展性的智能手機(jī)、平板電腦等移動(dòng)終端產(chǎn)業(yè)的蓬勃發(fā)展。來(lái)自美國(guó)最大的風(fēng)險(xiǎn)投資機(jī)構(gòu)KPCB的數(shù)據(jù)顯示,全球智能手機(jī)出貨量正在以遠(yuǎn)高于臺(tái)式電腦、筆記本電腦出貨量的速度快速增長(zhǎng),該機(jī)構(gòu)預(yù)計(jì)2011年全球智能手機(jī)出貨量將達(dá)到4.13億,超過(guò)臺(tái)式電腦與筆記本電腦出貨

2、量的總和。(2)智能手機(jī)的用戶使用數(shù)量正在高速增長(zhǎng)。據(jù)市場(chǎng)調(diào)研機(jī)構(gòu)Gartner信息,2011年全球智能手機(jī)的總出貨量將會(huì)達(dá)到4.68億部,相比2010年實(shí)現(xiàn)了57.7%的增長(zhǎng),而谷歌Android操作系統(tǒng)將會(huì)在今年之內(nèi)成為全球最大的智能手機(jī)操作系統(tǒng)。另外,全球市場(chǎng)調(diào)研機(jī)構(gòu)IDC預(yù)計(jì)未來(lái)5年中國(guó)手機(jī)市場(chǎng)上,智能手機(jī)替代傳統(tǒng)功能手機(jī)的趨勢(shì)將日益明顯,未來(lái)5年中國(guó)智能手機(jī)市場(chǎng)復(fù)合增長(zhǎng)率將達(dá)到34.1%,人們對(duì)IT設(shè)備智能化的向往是這一增長(zhǎng)率能夠?qū)崿F(xiàn)的主要因素,并且與其他國(guó)家相比,中國(guó)智能手機(jī)市場(chǎng)的發(fā)展空間更加廣闊。(3)操作系統(tǒng)格局預(yù)測(cè):Android有望成為智能手機(jī)市場(chǎng)主導(dǎo)力量搭載Android

3、操作系統(tǒng)的智能手機(jī)目前已經(jīng)成為市場(chǎng)上最炙手可熱的智能產(chǎn)品。來(lái)自美國(guó)市場(chǎng)研究機(jī)構(gòu)Gartner的數(shù)據(jù)顯示,Android操作系統(tǒng)所占的市場(chǎng)份額從2008年的0.5%急劇增長(zhǎng)到2011年的15.94%。開放的源代碼和零成本已經(jīng)讓Android在全世界范圍內(nèi)受到青睞并迅速獲得了主要手機(jī)廠商和數(shù)百萬(wàn)軟件開發(fā)者的支持,Gartner預(yù)計(jì),未來(lái)Android系統(tǒng)的市場(chǎng)份額有望超過(guò)其他操作系統(tǒng),從而成為全球第一大智能手機(jī)操作系統(tǒng)。2.安卓手機(jī)介紹安卓手機(jī)指的是用Android操作系統(tǒng)的手機(jī)。安卓(Android)是基于Linux內(nèi)核的操作系統(tǒng),是Google公司在2007年11月5日公布的手機(jī)操作系統(tǒng)。同樣

4、都是手機(jī)上面用的智能系統(tǒng),安卓的系統(tǒng)是新生系統(tǒng),界面更為華麗,開源性更強(qiáng),當(dāng)然因?yàn)槭切律到y(tǒng),所以在第三方軟件方面暫時(shí)還不太多。因此,安卓應(yīng)用程序的需求還是很迫切的。3.軟件人才需求據(jù)業(yè)內(nèi)統(tǒng)計(jì),目前國(guó)內(nèi)的Android研發(fā)人才缺口至少30萬(wàn)。由于目前Android技術(shù)較新,無(wú)論是相關(guān)書籍、培訓(xùn)還是大學(xué)教育,都處于初級(jí)階段,因此Android人才短期將供不應(yīng)求。從長(zhǎng)期來(lái)看,隨著各種移動(dòng)應(yīng)用和手機(jī)游戲等內(nèi)容需求日益增加,也將激勵(lì)大中小型手機(jī)應(yīng)用開發(fā)商加大對(duì)Android應(yīng)用的開發(fā)力度,因此Android人才的就業(yè)前景也非常廣泛。綜上所述,在這樣的背景下,安卓有很強(qiáng)的生命力。同時(shí),作為一個(gè)新生的系統(tǒng)

5、,其應(yīng)用程序目前并不多,安卓應(yīng)用程序的需求還是很迫切的,安卓研發(fā)人才的缺口還很大。這些都促進(jìn)了我們學(xué)習(xí)開發(fā)安卓應(yīng)用程序。1.2開發(fā)環(huán)境安卓應(yīng)用程序開發(fā)環(huán)境如下:JDK 5 or JDK 6 (JRE alone is not sufficient)Eclipse 3.3 (Europa), 3.4 (Ganymede)Android SDK ADT 0.8.0Eclipse安裝ADT 插件二 安卓應(yīng)用程序開發(fā)理論與方法1、Activity的相關(guān)知識(shí)簡(jiǎn)單理解Activity 代表一個(gè)用戶所能看到的屏幕,Activity 主要是處理一個(gè)應(yīng)用的整體性工作。Activity是最基本的Android 應(yīng)

6、用程序組件,應(yīng)用程序中,一個(gè)活動(dòng)通常就是一個(gè)單獨(dú)的屏幕。每一個(gè)活動(dòng)都被實(shí)現(xiàn)為一個(gè)獨(dú)立的類,并且從活動(dòng)基類中繼承而來(lái),活動(dòng)類將會(huì)顯示由視圖控件組成的用戶接口,并對(duì)事件做出響應(yīng)。大多數(shù)的應(yīng)用是由多個(gè)屏幕顯示組成,因而要用到多個(gè)Activity。(1)Activity的相關(guān)方法及相關(guān)函數(shù):A、void onCreate(Bundle) 首次啟動(dòng)時(shí)調(diào)用,接受參數(shù):Null or savedInstanceState(保存的以前某些狀態(tài)信息)B、void onStart() 說(shuō)明了將要顯示給用戶的活動(dòng)C、void onRestart() 將處于停止?fàn)顟B(tài)的活動(dòng)重新顯示給用戶D、void onResume(

7、) 用戶可以開始與活動(dòng)進(jìn)行交互時(shí)調(diào)用。如動(dòng)畫播放和音樂(lè)播放。E、void onPause() 活動(dòng)將要進(jìn)入后臺(tái)運(yùn)行時(shí)調(diào)用。(此時(shí)前臺(tái)啟動(dòng)了另一個(gè)活動(dòng))F、void onStop() 不需要某個(gè)活動(dòng)了,就調(diào)用G、void onDestroy()銷毀活動(dòng)(2)多個(gè)Activity之間的跳轉(zhuǎn): 通過(guò)Intent類實(shí)現(xiàn)屏幕之間的跳轉(zhuǎn)(包括沒(méi)有參數(shù)關(guān)系和需要傳遞參數(shù)兩種情況)。(3)兩個(gè)Activity之間進(jìn)行數(shù)據(jù)交換: startActivity() 只有Intent一個(gè)參數(shù)。public void startSubActivity(Intent intent, int requestCode) (r

8、equestCode:用來(lái)標(biāo)識(shí)某一個(gè)調(diào)用,一般定義一個(gè)常量。)傳過(guò)去:函數(shù)原型為: public Intent setData(ContentURI data) 然后,參數(shù)帶到新的Activity后,同樣用Activity.getIntent()函數(shù)可得到當(dāng)前過(guò)來(lái)的Intent對(duì)象,然后用getData()就取到參數(shù)了。 傳回來(lái):函數(shù)原型為: public final void setResult(int resultCode, String data)2、Intent的相關(guān)知識(shí)Intent 是描述應(yīng)用想要做什么。Android 使用了Intent 這個(gè)特殊類,實(shí)現(xiàn)在屏幕與屏幕之間移動(dòng)。Int

9、ent 數(shù)據(jù)結(jié)構(gòu)兩個(gè)最重要的部分是動(dòng)作和動(dòng)作對(duì)應(yīng)的數(shù)據(jù)。Intent類綁定一次操作,它負(fù)責(zé)攜帶這次操作所需要的數(shù)據(jù)以及操作的類型等。3、Layout 用于用戶界面設(shè)計(jì)。包含AbsoluteLayout, FrameLayout,GridView, LinearLayout, ListLayout, RadioGroup, TableLayout等等。在本程序中用到的有:(1) 線性布局LinearLayout垂直:android:orientation="vertical“水平:android:orientation="horizontal"(2) 相對(duì)布局Rel

10、ativeLayout讓子元素指定它們相對(duì)于其他元素的位置(通過(guò)ID 來(lái)指定)或相對(duì)于父布局對(duì)象。在RelativeLayout布局里的控件包含豐富的排列屬性: Layout above:控件在指定控件的上方Layout below:控件在指定控件的下方Layout to left of三 小游戲應(yīng)用程序的設(shè)計(jì)與實(shí)現(xiàn)3.1 擬解決的問(wèn)題及目標(biāo)本游戲上手簡(jiǎn)單,主旨在讓人在緊張的生活中,獲得游戲的樂(lè)趣,程序要實(shí)現(xiàn)的目標(biāo)有如下幾個(gè):(1) 界面流暢(2) 有當(dāng)前得分(3) 有最高得分(4) 后點(diǎn)擊界面重新開始游戲3.2 總體設(shè)計(jì)1、游戲的操作流程 點(diǎn)擊屏幕即可開始,當(dāng)出現(xiàn)游戲界面是,通過(guò)點(diǎn)擊屏幕控制

11、圓點(diǎn)的高度,使得圓點(diǎn)觸碰不到上下兩邊的長(zhǎng)方形。3.3 詳細(xì)設(shè)計(jì)與編碼實(shí)現(xiàn)1、 游戲界面 開始界面,點(diǎn)擊屏幕圓點(diǎn)自動(dòng)向前移動(dòng) 當(dāng)前得分0,點(diǎn)擊屏幕控制圓點(diǎn)高度 觸碰到長(zhǎng)方形,游戲結(jié)束,點(diǎn)擊屏幕重新開始2、 核心代碼如下: GameBirdActivity類public class GameBirdActivity extends Activity public static GameBirdActivity instance; private LinearLayout gameView;public void onCreate(Bundle savedInstanceState) super.o

12、nCreate(savedInstanceState);instance = this;this.getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);requestWindowFeature(Window.FEATURE_NO_TITLE);setContentView(R.layout.content_view);/gamegameView = (LinearLayout)this.findViewById(R.id.game_

13、view);gameView.addView(new GameBirdSurfaceView(this);public void showMessage(int level)saveSettingData(level);Intent intent = new Intent(this, LoadingActivity.class);intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);startActivity(intent);public static final String GameBirdSettingsFile = "GameBird

14、_Settings"public static final String Settings_LevelLast = "LevelLast"public static final String Settings_LevelTop = "LevelTop"private void saveSettingData(int level) SharedPreferences gb_settings = getSharedPreferences(GameBirdSettingsFile, 0);gb_settings.edit().putInt(Setti

15、ngs_LevelLast, level).commit();int top = gb_settings.getInt(Settings_LevelTop, 0);if(level>top)gb_settings.edit().putInt(Settings_LevelTop, level).commit();GameBirdSurfaceView類public class GameBirdSurfaceView extends SurfaceView implements Callback, Runnable private SurfaceHolder sfh;private Pain

16、t paint;private Thread th;private boolean flag;private Canvas canvas;private static int screenW, screenH;private static final int GAME_MENU = 0;private static final int GAMEING = 1;private static final int GAME_OVER = -1;private static int gameState = GAME_MENU;private int floor = new int2;private i

17、nt floor_width = 15;private int speed = 3;private int level = new int2;private int level_value = 0;private int bird = new int2;private int bird_width = 10;private int bird_v = 0;private int bird_a = 2;private int bird_vUp = -16;private ArrayList<int> walls = new ArrayList<int>();private

18、ArrayList<int> remove_walls = new ArrayList<int>();private int wall_w = 50;private int wall_h = 100;private int wall_step = 30;public GameBirdSurfaceView(Context context) super(context);sfh = this.getHolder();sfh.addCallback(this);paint = new Paint();paint.setColor(Color.WHITE);paint.set

19、AntiAlias(true);paint.setTextSize(50);paint.setStyle(Style.STROKE); setFocusable(true);setFocusableInTouchMode(true);this.setKeepScreenOn(true);public void surfaceCreated(SurfaceHolder holder) screenW = this.getWidth();screenH = this.getHeight();initGame();flag = true;th = new Thread(this);th.start(

20、);private void initGame() if (gameState = GAME_MENU) floor0 = 0;floor1 = screenH - screenH/5;level0 = screenW/2;level1 = screenH/5;level_value = 0;bird0 = screenW/3;bird1 = screenH/2;walls.clear();floor_width = dp2px(15);speed = dp2px(3);bird_width = dp2px(10);bird_a = dp2px(2);bird_vUp = -dp2px(16)

21、;wall_w = dp2px(45);wall_h = dp2px(100);wall_step = wall_w*4;private int dp2px(float dp)int px = Math.round(TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, dp, getResources().getDisplayMetrics();return px;public void myDraw() try canvas = sfh.lockCanvas();if (canvas != null) /clearcanvas.draw

22、Color(Color.BLACK);/backgroundint floor_start = floor0;while(floor_start<screenW)canvas.drawLine(floor_start, floor1, floor_start+floor_width, floor1, paint);floor_start += floor_width*2;/wallfor (int i = 0; i < walls.size(); i+) int wall = walls.get(i);float pts = wall0,0,wall0,wall1,wall0,wa

23、ll1+wall_h,wall0,floor1, wall0+wall_w,0,wall0+wall_w,wall1, wall0+wall_w,wall1+wall_h,wall0+wall_w,floor1,wall0,wall1, wall0+wall_w, wall1,wall0,wall1+wall_h, wall0+wall_w, wall1+wall_h;canvas.drawLines(pts, paint);paint);floor1, paint);/birdcanvas.drawCircle(bird0, bird1, bird_width, paint);/levelc

24、anvas.drawText(String.valueOf(level_value), level0, level1, paint); catch (Exception e) finally if (canvas != null)sfh.unlockCanvasAndPost(canvas);public boolean onTouchEvent(MotionEvent event) if(event.getAction() = MotionEvent.ACTION_DOWN)switch (gameState) case GAME_MENU:gameState = GAMEING; /bir

25、d_v = bird_vUp; /break;case GAMEING:bird_v = bird_vUp;break;case GAME_OVER:/bird downif(bird1 >= floor1 - bird_width)gameState = GAME_MENU;initGame();break;return true;public boolean onKeyDown(int keyCode, KeyEvent event) if (keyCode = KeyEvent.KEYCODE_BACK) GameBirdActivity.instance.finish();Sys

26、tem.exit(0);return true;return super.onKeyDown(keyCode, event);private int move_step = 0;private void logic() switch (gameState) case GAME_MENU:break;case GAMEING:/birdbird_v+=bird_a;bird1 += bird_v;if(bird1 > floor1 - bird_width)bird1 = floor1 - bird_width;gameState = GAME_OVER;/top /if(bird1<

27、;=bird_width) /bird1=bird_width; /floorif(floor0 < -floor_width)floor0 += floor_width*2;floor0 -= speed;/wallremove_walls.clear(); for (int i = 0; i < walls.size(); i+) int wall = walls.get(i);wall0 -= speed;if(wall0<-wall_w)remove_walls.add(wall);elseif(wall0-bird_width<=bird0&&

28、 wall0+wall_w+bird_width>=bird0&&(bird1<=wall1+bird_width|bird1>=wall1+wall_h-bird_width)gameState = GAME_OVER;int pass = wall0+wall_w+bird_width-bird0;if(pass<0 && -pass<=speed)level_value+;/out of screenif(remove_walls.size()>0)walls.removeAll(remove_walls);/new w

29、allmove_step += speed;if(move_step>wall_step)int wall = new intscreenW, (int)(Math.random()*(floor1-2*wall_h)+0.5*wall_h);walls.add(wall);move_step = 0;break;case GAME_OVER:/birdif(bird1 < floor1 - bird_width)bird_v+=bird_a;bird1 += bird_v;if(bird1 >= floor1 - bird_width)bird1 = floor1 - bi

30、rd_width;elseGameBirdActivity.instance.showMessage(level_value);gameState = GAME_MENU;initGame();break;public void run() while (flag) long start = System.currentTimeMillis();myDraw();logic();long end = System.currentTimeMillis();try if (end - start < 50) Thread.sleep(50 - (end - start); catch (In

31、terruptedException e) e.printStackTrace();public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) public void surfaceDestroyed(SurfaceHolder holder) flag = false;LoadingActivity類public class LoadingActivity extends Activity public void onCreate(Bundle savedInstanceState)

32、super.onCreate(savedInstanceState);this.getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);requestWindowFeature(Window.FEATURE_NO_TITLE);setContentView(R.layout.loading);final TextView gameStart = (TextView)findViewById(R.id.game_start);AdVie

33、w adView = (AdView)findViewById(R.id.adView);adView.setAdListener(new AdListener() public void onReceiveAd(Ad arg0) gameStart.setVisibility(View.VISIBLE);public void onPresentScreen(Ad arg0) / TODO Auto-generated method stubpublic void onLeaveApplication(Ad arg0) / TODO Auto-generated method stubpublic void onFailedToReceiveAd(Ad arg0, ErrorCode arg1) / TODO Auto-generated method stubpublic void onDismissScreen(Ad arg0) / TODO Auto-generated method stub);View gameMessage = findViewById(R.id.GameMessage);int data = getSettingData();TextView levelMessage = (TextVi

溫馨提示

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

最新文檔

評(píng)論

0/150

提交評(píng)論