




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
貪吃蛇游戲的設計與實現任務六重難點04030201Android知識靈活運用,開發有一定難度的應用通過SQLite實現結構化數據的本地存儲和讀取設計組件的監聽器自定義實現View組件知識目標掌握自定義View的基本方法掌握自定義View的繪圖和監聽器實現掌握SQLite數據庫的操作方法掌握ListView顯示SQLite數據庫的方法能力目標掌握自定義簡單的View組件,設計組件的方法、監聽器的技能掌握通過SQLite數據庫實現結構化數據的本地存儲和讀取的技能掌握將所學的Android知識靈活運用,開發有一定難度應用的技能項目流程任務簡介任務分析支撐知識任務實施任務小結擴展訓練任務簡介任務分析支撐知識任務實施任務小結擴展訓練本次任務我們將制作一個簡單的貪吃蛇游戲實現貪吃蛇的定時游動、捕食食物、通過按鈕控制其游動的方向、以及積分榜前十名玩家信息的記錄和顯示。任務簡介任務分析支撐知識任務實施任務小結擴展訓練本次任務我們將制作一個簡單的貪吃蛇游戲實現貪吃蛇的定時游動捕食食物通過按鈕控制其游動的方向顯示積分榜前十名玩家信息單擊菜單項【TopTen】游戲結束提示輸入玩家姓名任務簡介任務分析支撐知識任務實施任務小結擴展訓練看似簡單的貪吃蛇游戲實際上需要許多新的知識,首先最上方的游戲區域是我們自己定義的View組件,前面的任務中我們都是使用Android系統自帶的組件(如Button、EditText等),現在我們要試著自己定義一個View組件。蛇的定時移動,會涉及子線程的控制。另外積分榜中玩家信息需要保存在手機本地,再次打開游戲時才能從本地中讀取并顯示,這一次我們不再使用SharedPreference方式,因為對于有一定結構的數據,數據庫無疑是最好的選擇。任務簡介任務分析支撐知識任務實施任務小結擴展訓練由于貪吃蛇游戲有一定的開發量,我們把本次任務分解為三個子任務依次進行: 子任務1(貪吃蛇的繪制):完成貪吃蛇數據結構的創建,以及貪吃蛇的圖形繪制,任務完成后可以看到一條靜止的蛇出現的畫面中; 子任務2(貪吃蛇的游動和控制):實現貪吃蛇的定時游動,通過按鈕改變貪吃蛇的方向,完成貪吃蛇吃食物的功能; 子任務3(TopTen積分榜功能):實現積分榜中前十位玩家信息的保存和顯示。子任務1:貪吃蛇的繪制任務六項目流程任務簡介任務分析支撐知識任務實施任務小結擴展訓練自定義組件了解如何自己定義一個組件1任務簡介任務分析支撐知識任務實施任務小結擴展訓練1.1簡介組件基本上是View的子類布局基本上是ViewGroup的子類1.1簡介View類是所有界面元素的基類,它包含和處理了很多內容:View所在區域的位置信息;計算View及其所有子View尺寸的方法;繪制View及其所有子View的方法;排列子View的方法;焦點處理方法;窗口滾動方法;按鍵和手勢的處理方法。1.2自定義組件的原因那么什么時候需要我們自己定義組件呢?一般出于幾種原因:現有組件或布局無法直接滿足應用程序的需要,需要重新創建一個完全嶄新的組件或布局;需要組合多個已有的組件,形成一個具有更加完整組合功能的組件;需要完全控制某個組件的圖形繪制方法,展現不同于現有組件的外觀;需要修改某個組件的現有事件處理方法。1.3自定義組件的方法自定義組件也有多種方法:繼承已有的組件,在其基礎上做一些添加和修改;組合多個已有的組件,形成一個功能強大的整體;繼承自View類,完全重新一個組件。貪吃蛇組件采用哪種方法呢?1.4View類的方法分類方法說明創建構造方法當組件被創建時構造方法被調用,組件可以通過代碼或者XML布局被創建,兩種創建的方法對應不同的構造方法。onFinishInflate()當組件通過XML布局方式被創建完畢后,該方法被調用。布局onMeasure(int,int)被調用來計算該View的高度和寬度。onLayout(boolean,int,int,int,int)被調用來計算該View顯示的坐標和尺寸大小。onSizeChanged(int,int,int,int)當View尺寸發生變化時,該方法被調用。繪制onDraw(Canvas)當View需要繪制自身內容時,該方法被調用。事件處理onKeyDown(int,KeyEvent)按鍵按下會調用該方法。onKeyUp(int,KeyEvent)按鍵彈起會調用該方法。onTrackballEvent(MotionEvent)軌跡球運動會調用該方法。onTouchEvent(MotionEvent)觸摸屏幕會調用該方法。分類方法說明焦點onFocusChanged(boolean,int,android.graphics.Rect)當View獲得焦點或者失去焦點時,該方法被調用。onWindowFocusChanged(boolean)當View所在窗體獲得焦點或者失去焦點時,該方法被調用。內嵌窗口onAttachedToWindow()當View內嵌到某個窗口時,該方法被調用。onDetachedFromWindow()當View從某個窗口移除時,該方法被調用。onWindowVisibilityChanged(int)當View所在窗口的可見性發生變化時,該方法被調用。1.4View類的方法方法View(Contextcontext)和View(Contextcontext,AttributeSetattrs)功能View類的兩種構造方法第一種是代碼創建組件時被調用的第二種方法是在XML文件中創建組件時被調用的。參數context代表該View對象所運行的Activity環境;當使用XML文件創建組件時,可以在XML文件中指定組件的屬性,attrs會將這些屬性傳遞進構造方法。返回值無1.5重要方法方法voidonSizeChanged(intw,inth,intoldw,intoldh)功能當View尺寸發生變化時,該方法被調用。參數w和h分別為組件最新的寬度和高度;oldw和oldh為該組件原來的寬度和高度。返回值無1.5重要方法方法voidonDraw(Canvascanvas)功能當View需要繪制自身內容時,該方法被調用。參數canvas為該組件的繪圖面板,你可以將組件想象為一張空白的油畫板,如果希望讓組件有漂亮的界面,就需要在這個油畫板上作畫。返回值無系統會在幾種情況下認為View需要重新繪制:組件被創建并顯示;隱藏的組件再次被顯示;調用了invalidate()方法強制組件重繪。1.5重要方法方法voidinvalidate()功能觸發組件重繪,調用該方法后會觸發onDraw()方法被調用。參數無返回值無1.5重要方法圖形繪制了解如何繪制自己的組件樣式2任務簡介任務分析支撐知識任務實施任務小結擴展訓練View類中有一個重要的方法onDraw()進行組件的繪制如果希望自定義的組件是個矩形或圓形或者希望組件是紅色或藍色那么就需要在OnDraw()方法中編寫代碼。Canvas類Paint類2.1簡介方法voidsetARGB(inta,intr,intg,intb)功能設定畫筆的透明度和顏色。參數a代表透明度,取值范圍為0~255,數值越小越透明,顏色上表現越淡。r、g、b分別代表紅色、綠色、藍色的比重,取值范圍為0~255,0代表沒有該顏色,255為最高的比重。返回值無示例Paintpt=newPaint();//設定畫筆為紅色pt.setARGB(255,255,0,0);2.2Paint類的方法方法voidsetColor(intcolor)功能設定畫筆的顏色。參數color為顏色值,實際上一個顏色還是由透明度和紅綠藍組成的,我們常用Color.argb(A,R,G,B)獲得一個顏色值。返回值無示例Paintpt=newPaint();//設定畫筆為黑色pt.setColor(Color.argb(255,0,0,0));2.2Paint類的方法方法voidsetAntiAlias(booleanaa)功能設定是否抗鋸齒。參數aa為true代表使用抗鋸齒,false反之。返回值無示例Paintpt=newPaint();//設定畫筆為黑色且抗鋸齒pt.setColor(Color.argb(255,0,0,0));pt.setAntiAlias(true);2.2Paint類的方法方法voidsetTextSize(floattextSize)功能如果使用畫筆繪制文字,可以使用該方法設定文字的大小。參數textSize為大于0的浮點數,用來指定文字大小。返回值無示例-2.2Paint類的方法方法voiddrawPoint(floatx,floaty,Paintpaint)功能繪制一個點。參數x和y為該點的坐標,paint為畫筆。返回值無示例-2.3Canvas類的方法方法voiddrawLine(floatstartX,floatstartY,floatstopX,floatstopY,Paintpaint)功能繪制一條線。參數startX和startY為起始點的坐標;stopX和stopY為終止點的坐標;paint為畫筆。返回值無示例-2.3Canvas類的方法方法voiddrawText(Stringtext,floatx,floaty,Paintpaint)功能繪制一段文字。參數text為需要繪制的字符串;x和y開始繪制文字的坐標;paint為畫筆。返回值無示例-2.3Canvas類的方法方法voiddrawRect(floatleft,floattop,floatright,floatbottom,Paintpaint)功能繪制一個矩形。參數left和top為矩形左上角點的坐標;right和bottom為矩形右下角點的坐標;paint為畫筆。返回值無示例-2.3Canvas類的方法方法voiddrawBitmap(Bitmapbitmap,floatleft,floattop,Paintpaint)功能繪制一張位圖。參數bitmap為需要繪制的位圖對象;left和top為繪制位圖的左上角起始點的坐標;paint為畫筆。返回值無示例-2.3Canvas類的方法通過一個同心矩形的例子演示如何創建自定義組件類;演示如何添加自定義組件;演示如何進行圖形繪制。2.4示例演示項目流程任務簡介任務分析支撐知識任務實施任務小結擴展訓練子任務分析了解游戲的數據結構和繪制要點1任務簡介任務分析支撐知識任務實施任務小結擴展訓練1.1游戲元素游戲含有以下元素:游戲區域:游戲區域由regionWidth*regionHeight個單元格組成,regionWidth為游戲區域中橫向有多少個單元格,regionHeight為縱向有多少個單元格。而每個單元格是固定尺寸的正方形,我們定義每個正方形的邊長為blocksize。蛇:蛇由多段身體組成,也就是身長。每段身體占據一個單元格,這意味著需要定義蛇身體的坐標。另外不能忽略的是,蛇是具有游動方向的(上下左右四個方向)。食物:食物只占有一個單元格,需要描述食物的坐標。屬性說明finalintBLOCKSIZE;單元格的邊長(像素為單位)intregionWidth,regionHeight;游戲區域的范圍(單元格為單位)intsnakeLen;蛇的長度int[]snakeX,snakeY;蛇的身體坐標intsnakeDir;蛇游動的方向intfoodX,foodY;食物的坐標intfoodCnt;已經吃到的食物個數1.2貪吃蛇組件的數據結構界面布局實現貪吃蛇游戲的布局2任務簡介任務分析支撐知識任務實施任務小結擴展訓練創建項目:創建一個Android應用項目,取名為SnakeGame。默認的Activity為MainActivity,其對應的XML布局文件為activity_main.xml。添加一個自定義組件的類為SnakeView繼承自View類。重寫onDraw和onSizeChanged方法。2.1創建項目RelativeLayout→底層為相對布局;然后是利用相對的特性對各個組件進行布局。↓←↑暫停開始分數:最高分數:SnakeView2.2MainActivity布局功能實現實現貪吃蛇游戲的成員變量、初始化、游戲元素的繪制。3任務簡介任務分析支撐知識任務實施任務小結擴展訓練在SnakeView類中,聲明游戲元素相關的成員變量:
privatefinalintBLOCKSIZE=50; //單元格固定為50*50個像素大小
privateintregionWidth,regionHeight; //游戲區域:橫向、縱向占據的單元格個數
privateintsnakeLen; //蛇的長度(包含蛇頭)
privateint[]snakeX=newint[100]; //蛇的X坐標數組
privateint[]snakeY=newint[100]; //蛇的Y坐標數組
privateintsnakeDir; //蛇的方向
privateintfoodX,foodY; //食物的X和Y坐標
privateintfoodCnt; //已經吃到的食物個數3.1成員變量在SnakeView類中,聲明游戲元素相關的成員變量:
privatePaintptBackground=newPaint(); //用于繪制背景的畫筆
privatePaintptHead=newPaint(); //用于繪制蛇頭的畫筆
privatePaintptBody=newPaint(); //用于繪制蛇身的畫筆
privatePaintptFood=newPaint(); //用于繪制食物的畫筆
publicstaticfinalintDIR_UP=0; //蛇方向:向上
publicstaticfinalintDIR_RIGHT=1; //蛇方向:向右
publicstaticfinalintDIR_DOWN=2; //蛇方向:向下
publicstaticfinalintDIR_LEFT=3; //蛇方向:向左3.1成員變量構造方法調用了InitGame方法進行游戲的初始化:設定各個Paint的顏色;設定蛇的初始長度;設定蛇的初始位置;設定蛇的初始方向;設定食物的初始位置。publicSnakeView(Contextcontext){super(context);initGame();}publicSnakeView(Contextcontext,@NullableAttributeSetattrs){super(context,attrs);initGame();}3.2構造方法重寫onSizeChanged方法,該方法在組件大小發生變化時會被自動調用protectedvoidonSizeChanged(intw,inth,intoldw,intoldh){super.onSizeChanged(w,h,oldw,oldh);regionWidth=w/BLOCKSIZE;regionHeight=h/BLOCKSIZE;
}3.3游
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 肝病護理課件
- 福清市數學試卷
- 廣安市高二數學試卷
- 高中生在家做數學試卷
- 廚房清理知識培訓課件
- 肌腱斷裂的護理課件
- 高一入學分班考數學試卷
- 2025年04月云南寧洱縣醫療衛生事業單位第二輪急需緊缺人才招聘3人筆試歷年專業考點(難、易錯點)附帶答案詳解
- 2025至2030大閘蟹養殖行業發展趨勢分析與未來投資戰略咨詢研究報告
- 2024年文山州麻栗坡縣縣級衛生健康單位選調筆試真題
- AI大模型賦能數字農業農村數字鄉村建設方案
- 2025年國家醫療器械抽檢品種檢驗方案
- 防汛物資儲備定額編制規程(SL298-2024)
- 無人機培訓創業計劃書-20250205-222450
- 輿情分析試題及答案
- 營運車輛入股協議書
- 高中數學專項提升計劃
- 2025年國家公務員考錄《申論》真題及參考答案(行政執法卷)
- 企業數字化轉型與員工績效的關聯性分析報告
- 綜合實踐:畫數學連環畫(大單元教學設計)一年級數學下冊北師大版2025
- 2025年大學英語六級考試試卷及答案
評論
0/150
提交評論