




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、濱江學院 Android課程設計報告題 目 飛翔的圓(類似Flappy Bird) 專 業(yè)_ _學生姓名_ _ _ _ 學 號_ _二一五年 六月 二十五日目錄一 安卓應用程序開發(fā)背景2 1.1開發(fā)背景2 1.2開發(fā)環(huán)境3二 安卓應用程序開發(fā)理論與方法3三 小游戲應用程序的設計與實現(xiàn)5 3.1 擬解決的問題及目標5 3.2 總體設計5 3.3 詳細設計與編碼實現(xiàn)6四 總結15一 安卓應用程序開發(fā)背景1.1開發(fā)背景1.智能手機的市場(1)功能多樣化的智能手機挑戰(zhàn)全球PC出貨量移動互聯(lián)網時代的來臨,直接促進了搭載智能操作系統(tǒng)、具有強大擴展性的智能手機、平板電腦等移動終端產業(yè)的蓬勃發(fā)展。來自美國最大
2、的風險投資機構KPCB的數(shù)據(jù)顯示,全球智能手機出貨量正在以遠高于臺式電腦、筆記本電腦出貨量的速度快速增長,該機構預計2011年全球智能手機出貨量將達到4.13億,超過臺式電腦與筆記本電腦出貨量的總和。(2)智能手機的用戶使用數(shù)量正在高速增長。據(jù)市場調研機構Gartner信息,2011年全球智能手機的總出貨量將會達到4.68億部,相比2010年實現(xiàn)了57.7%的增長,而谷歌Android操作系統(tǒng)將會在今年之內成為全球最大的智能手機操作系統(tǒng)。另外,全球市場調研機構IDC預計未來5年中國手機市場上,智能手機替代傳統(tǒng)功能手機的趨勢將日益明顯,未來5年中國智能手機市場復合增長率將達到34.1%,人們對I
3、T設備智能化的向往是這一增長率能夠實現(xiàn)的主要因素,并且與其他國家相比,中國智能手機市場的發(fā)展空間更加廣闊。(3)操作系統(tǒng)格局預測:Android有望成為智能手機市場主導力量搭載Android操作系統(tǒng)的智能手機目前已經成為市場上最炙手可熱的智能產品。來自美國市場研究機構Gartner的數(shù)據(jù)顯示,Android操作系統(tǒng)所占的市場份額從2008年的0.5%急劇增長到2011年的15.94%。開放的源代碼和零成本已經讓Android在全世界范圍內受到青睞并迅速獲得了主要手機廠商和數(shù)百萬軟件開發(fā)者的支持,Gartner預計,未來Android系統(tǒng)的市場份額有望超過其他操作系統(tǒng),從而成為全球第一大智能手機
4、操作系統(tǒng)。2.安卓手機介紹安卓手機指的是用Android操作系統(tǒng)的手機。安卓(Android)是基于Linux內核的操作系統(tǒng),是Google公司在2007年11月5日公布的手機操作系統(tǒng)。同樣都是手機上面用的智能系統(tǒng),安卓的系統(tǒng)是新生系統(tǒng),界面更為華麗,開源性更強,當然因為是新生系統(tǒng),所以在第三方軟件方面暫時還不太多。因此,安卓應用程序的需求還是很迫切的。3.軟件人才需求據(jù)業(yè)內統(tǒng)計,目前國內的Android研發(fā)人才缺口至少30萬。由于目前Android技術較新,無論是相關書籍、培訓還是大學教育,都處于初級階段,因此Android人才短期將供不應求。從長期來看,隨著各種移動應用和手機游戲等內容需求
5、日益增加,也將激勵大中小型手機應用開發(fā)商加大對Android應用的開發(fā)力度,因此Android人才的就業(yè)前景也非常廣泛。綜上所述,在這樣的背景下,安卓有很強的生命力。同時,作為一個新生的系統(tǒng),其應用程序目前并不多,安卓應用程序的需求還是很迫切的,安卓研發(fā)人才的缺口還很大。這些都促進了我們學習開發(fā)安卓應用程序。1.2開發(fā)環(huán)境安卓應用程序開發(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 插件二 安卓應用程序開
6、發(fā)理論與方法1、Activity的相關知識簡單理解Activity 代表一個用戶所能看到的屏幕,Activity 主要是處理一個應用的整體性工作。Activity是最基本的Android 應用程序組件,應用程序中,一個活動通常就是一個單獨的屏幕。每一個活動都被實現(xiàn)為一個獨立的類,并且從活動基類中繼承而來,活動類將會顯示由視圖控件組成的用戶接口,并對事件做出響應。大多數(shù)的應用是由多個屏幕顯示組成,因而要用到多個Activity。(1)Activity的相關方法及相關函數(shù):A、void onCreate(Bundle) 首次啟動時調用,接受參數(shù):Null or savedInstanceState
7、(保存的以前某些狀態(tài)信息)B、void onStart() 說明了將要顯示給用戶的活動C、void onRestart() 將處于停止狀態(tài)的活動重新顯示給用戶D、void onResume() 用戶可以開始與活動進行交互時調用。如動畫播放和音樂播放。E、void onPause() 活動將要進入后臺運行時調用。(此時前臺啟動了另一個活動)F、void onStop() 不需要某個活動了,就調用G、void onDestroy()銷毀活動(2)多個Activity之間的跳轉: 通過Intent類實現(xiàn)屏幕之間的跳轉(包括沒有參數(shù)關系和需要傳遞參數(shù)兩種情況)。(3)兩個Activity之間進行數(shù)據(jù)交
8、換: startActivity() 只有Intent一個參數(shù)。public void startSubActivity(Intent intent, int requestCode) (requestCode:用來標識某一個調用,一般定義一個常量。)傳過去:函數(shù)原型為: public Intent setData(ContentURI data) 然后,參數(shù)帶到新的Activity后,同樣用Activity.getIntent()函數(shù)可得到當前過來的Intent對象,然后用getData()就取到參數(shù)了。 傳回來:函數(shù)原型為: public final void setResult(int
9、resultCode, String data)2、Intent的相關知識Intent 是描述應用想要做什么。Android 使用了Intent 這個特殊類,實現(xiàn)在屏幕與屏幕之間移動。Intent 數(shù)據(jù)結構兩個最重要的部分是動作和動作對應的數(shù)據(jù)。Intent類綁定一次操作,它負責攜帶這次操作所需要的數(shù)據(jù)以及操作的類型等。3、Layout 用于用戶界面設計。包含AbsoluteLayout, FrameLayout,GridView, LinearLayout, ListLayout, RadioGroup, TableLayout等等。在本程序中用到的有:(1) 線性布局LinearLayou
10、t垂直:android:orientation=vertical“水平:android:orientation=horizontal(2) 相對布局RelativeLayout讓子元素指定它們相對于其他元素的位置(通過ID 來指定)或相對于父布局對象。在RelativeLayout布局里的控件包含豐富的排列屬性: Layout above:控件在指定控件的上方Layout below:控件在指定控件的下方Layout to left of三 小游戲應用程序的設計與實現(xiàn)3.1 擬解決的問題及目標本游戲上手簡單,主旨在讓人在緊張的生活中,獲得游戲的樂趣,程序要實現(xiàn)的目標有如下幾個:(1) 界面流暢
11、(2) 有當前得分(3) 有最高得分(4) 后點擊界面重新開始游戲3.2 總體設計1、游戲的操作流程 點擊屏幕即可開始,當出現(xiàn)游戲界面是,通過點擊屏幕控制圓點的高度,使得圓點觸碰不到上下兩邊的長方形。3.3 詳細設計與編碼實現(xiàn)1、 游戲界面 開始界面,點擊屏幕圓點自動向前移動 當前得分0,點擊屏幕控制圓點高度 觸碰到長方形,游戲結束,點擊屏幕重新開始2、 核心代碼如下: GameBirdActivity類public class GameBirdActivity extends Activity public static GameBirdActivity instance; private
12、LinearLayout gameView;public void onCreate(Bundle savedInstanceState) super.onCreate(savedInstanceState);instance = this;this.getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);requestWindowFeature(Window.FEATURE_NO_TITLE);setContentView(R.la
13、yout.content_view);/gamegameView = (LinearLayout)this.findViewById(R.id.game_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);startActi
14、vity(intent);public static final String GameBirdSettingsFile = GameBird_Settings;public static final String Settings_LevelLast = LevelLast;public static final String Settings_LevelTop = LevelTop;private void saveSettingData(int level) SharedPreferences gb_settings = getSharedPreferences(GameBirdSett
15、ingsFile, 0);gb_settings.edit().putInt(Settings_LevelLast, level).commit();int top = gb_settings.getInt(Settings_LevelTop, 0);if(leveltop)gb_settings.edit().putInt(Settings_LevelTop, level).commit();GameBirdSurfaceView類public class GameBirdSurfaceView extends SurfaceView implements Callback, Runnabl
16、e private SurfaceHolder sfh;private Paint 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_MEN
17、U;private int floor = new int2;private int 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 walls = new Ar
18、rayList();private ArrayList remove_walls = new ArrayList();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.setAnti
19、Alias(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();pr
20、ivate 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);wal
21、l_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.drawColo
22、r(Color.BLACK);/backgroundint floor_start = floor0;while(floor_startscreenW)canvas.drawLine(floor_start, floor1, floor_start+floor_width, floor1, paint);floor_start += floor_width*2;/wallfor (int i = 0; i = floor1 - bird_width)gameState = GAME_MENU;initGame();break;return true;public boolean onKeyDo
23、wn(int keyCode, KeyEvent event) if (keyCode = KeyEvent.KEYCODE_BACK) GameBirdActivity.instance.finish();System.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 += b
24、ird_v;if(bird1 floor1 - bird_width)bird1 = floor1 - bird_width;gameState = GAME_OVER;/top /if(bird1=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 -= spee
25、d;if(wall0-wall_w)remove_walls.add(wall);elseif(wall0-bird_width=bird0&(bird1=wall1+wall_h-bird_width)gameState = GAME_OVER;int pass = wall0+wall_w+bird_width-bird0;if(pass0 & -pass0)walls.removeAll(remove_walls);/new wallmove_step += speed;if(move_stepwall_step)int wall = new intscreenW, (int)(Math
26、.random()*(floor1-2*wall_h)+0.5*wall_h);walls.add(wall);move_step = 0;break;case GAME_OVER:/birdif(bird1 = floor1 - bird_width)bird1 = floor1 - bird_width;elseGameBirdActivity.instance.showMessage(level_value);gameState = GAME_MENU;initGame();break;public void run() while (flag) long start = System.
27、currentTimeMillis();myDraw();logic();long end = System.currentTimeMillis();try if (end - start 50) Thread.sleep(50 - (end - start); catch (InterruptedException e) e.printStackTrace();public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) public void surfaceDestroyed(Surf
28、aceHolder holder) flag = false;LoadingActivity類public class LoadingActivity extends Activity public void onCreate(Bundle savedInstanceState) super.onCreate(savedInstanceState);this.getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);requestWin
29、dowFeature(Window.FEATURE_NO_TITLE);setContentView(R.layout.loading);final TextView gameStart = (TextView)findViewById(R.id.game_start);AdView adView = (AdView)findViewById(R.id.adView);adView.setAdListener(new AdListener() public void onReceiveAd(Ad arg0) gameStart.setVisibility(View.VISIBLE);publi
30、c 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 = (TextView)findViewById(R.id.level_Message);levelMessage.setText(SCORE: +data0+nBEST:
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 包過培訓機構合同范本
- 勞工住宿合同范本
- 辦公用品購置合同范本
- 共享菜園轉讓合同范本
- 公司外包收債合同范本
- 健康產業(yè)合同范本
- 農村修橋工程合同范本
- 2024年重慶松山醫(yī)院招聘考試真題
- 寫退貨合同范本
- 2024年重慶市永川區(qū)三教鎮(zhèn)招聘公益性崗位人員筆試真題
- 新概念英語第一冊課文完整版
- 急救藥品搶救藥品培訓
- 人教鄂教版三年級下冊科學全冊教案
- 如何做好一名優(yōu)秀的項目經理
- (完整word版)中考定語從句精講+練習答案
- 110KV電纜敷設專項施工方案方案
- 醫(yī)師簽名(簽章)留樣備案表
- 0~6歲兒童眼保健和視力檢查標準技術操作
- 卷內目錄填寫式樣
- GB/T 15077-2008貴金屬及其合金材料幾何尺寸測量方法
- 項目7選購機箱和atx電源學習資料
評論
0/150
提交評論