国产粉嫩无码不卡在线观看,酒店大战丝袜高跟鞋人妻,特级精品毛片免费观看,欧美亚洲日本国产综合在线

安卓APP源碼和設(shè)計報告——Android小程序超級小貓(超級小貓游戲)

移動終端開發(fā)(Android)

結(jié)課報告

題目: Android小程序超級小貓

班級:

姓名:

成績:

一、項目概述

1、設(shè)計背景與意義

1.1 手機游戲的設(shè)計背景

自上世紀(jì)80年代第一部手機誕生以來,隨著計算機技術(shù)的進步,手機也經(jīng)歷了從模擬到GSM、2.5G再到今天的3G手機如此一個發(fā)展歷程。特別是進入21世紀(jì)后手機的硬件性能得到很大的提高,當(dāng)前主流手機普遍配有主頻500MHZ的微處理器和500MB容量的存儲器。與之同步發(fā)展的還有支持手機運行的手機操作系統(tǒng),從當(dāng)初的單片機系統(tǒng)到后來的專用嵌入式系統(tǒng),到后來開始為智能手機設(shè)計開發(fā)出可以更高效管理手機軟硬件資源的操作系統(tǒng),其中有不少屬于開源項目的手機操作系統(tǒng)。目前全球的智能手機操作系統(tǒng)主要以Google公司開發(fā)的Android系統(tǒng)、蘋果公司開發(fā)的iPhone系統(tǒng)、諾基亞公司開發(fā)的Symbian系統(tǒng)、微軟公司開發(fā)的WindowsMobile系統(tǒng)和Linux系統(tǒng)為代表。從圖1.1為2011全球智能手機操作系統(tǒng)市場份額統(tǒng)計,Android僅僅經(jīng)過兩三年的發(fā)展就搶占了43%的市場份額,并保持著2%的增長速度。中國是最大的手機市場,2011年的統(tǒng)計數(shù)據(jù)表明,Android已取代了iPhone成為中國市場額最大的智能手機操作系統(tǒng)。

安卓APP源碼和設(shè)計報告——Android小程序超級小貓(超級小貓游戲)

圖1.1 2011全球智能手機操作系統(tǒng)市場份額統(tǒng)計

Android系統(tǒng)是Google公司于2007年推出的一款手機操作系統(tǒng),目前能安裝于HTC、摩托羅拉、聯(lián)想華為等知名品牌手機。它是基于Linux2.6.1內(nèi)核的一個開源手機操作系統(tǒng),目前最高版本為2.4,集成了GPS電子地圖導(dǎo)航、重力感應(yīng)器、多點觸控等重要功能,開發(fā)者可以開發(fā)出豐富的運用。由于android智能手機操作系統(tǒng)是一個開源項目,具有很強的開放性和可擴展性,吸引了大量的手機軟件開發(fā)人員為這些手機系統(tǒng)開發(fā)應(yīng)用軟件及休閑游戲,極大的豐富了手機功能。為服務(wù)廣大的開發(fā)人員與谷歌手機用戶,谷歌公司在因特網(wǎng)搭建了一個應(yīng)用軟件商店。開發(fā)人員開發(fā)出的手機應(yīng)用軟件可以陳列于應(yīng)用軟件商店中供用戶挑選購買,解決了軟件工程師最薄弱的軟件營銷環(huán)節(jié),作為目前廣大手機軟件工程師最大的創(chuàng)收途徑而博得廣泛的熱衷。

電腦游戲是很多人不可或缺的娛樂活動,八九十年達(dá)的“貪吃蛇”和“超級瑪麗”給大家留下了歡樂的歡樂記憶,也為游戲創(chuàng)作者帶來了巨額財富。近二十年來,隨著計算機硬件性能的提升及軟件開發(fā)者的努力,游戲作品不論是創(chuàng)意還是視聽感覺都有飛躍的發(fā)展。當(dāng)前電腦游戲行業(yè)非常繁榮,競爭也非常激烈,隨著智能手機的問世并普及,越來越多的游戲開發(fā)人員把目光轉(zhuǎn)向了手機游戲這個新興的行業(yè)。

手機通常重量輕,隨身攜帶方便,現(xiàn)代人們壓力大,非常希望在工作之余,上下班途中可以通過娛樂來放松自己,此時,手機游戲便能發(fā)揮出它輕松休閑的特點。受手機性能的制約,以往運行于手機之上的游戲一般較為簡單,但隨著微電子技術(shù)的發(fā)展,手機性能越來越優(yōu)良,現(xiàn)在已經(jīng)可以開發(fā)出類似于PC機上的游戲。特別是隨著3G移動網(wǎng)絡(luò)的迅猛發(fā)展,可以預(yù)料在十年之內(nèi)目前如火如荼的網(wǎng)絡(luò)游戲也將轉(zhuǎn)戰(zhàn)至手機平臺。

1.2 國內(nèi)外手機游戲的研究現(xiàn)狀

在手機應(yīng)用開發(fā)領(lǐng)域當(dāng)前較為火熱的有J2ME語言、Object C語言和Android SDK。J2ME 作為Java2的一個組成部分,以其發(fā)展時間長而成為較為普遍的技術(shù)。其最大的優(yōu)勢在于移植性強,使用J2ME技術(shù)開發(fā)的程序,可以經(jīng)過簡單的修改以后,能在不同廠商的手機上運行。同時由于Java語言的普及從而開發(fā)周期大大縮短。但是,也因為兼顧移植性,導(dǎo)致其開發(fā)出的功能受到一定的限制,又因為其運行于JVM上并受手機性能的影響所以運行速度普遍較慢。Object C語言基于標(biāo)準(zhǔn)的ANSI C,其語法源于Smalltalk消息傳遞風(fēng)格,作為iPhone手機上的標(biāo)準(zhǔn)開發(fā)語言而受到青睞。相對于J2ME最大特點是軟件運行效率高速度快,界面也繼承了蘋果的華麗風(fēng)格,遺憾的是開發(fā)出的應(yīng)用軟件只能運行于iPhone手機上。谷歌與開發(fā)手機聯(lián)盟合作開發(fā)的Android SDK是近兩年誕生的充滿活力和生命力的手機開發(fā)語言,是一個標(biāo)準(zhǔn)的、開放的移動電話軟件平臺,不存在任何以往那種阻礙移動產(chǎn)業(yè)創(chuàng)新的專有權(quán)障礙。相對于其他開發(fā)語言,Android最大的優(yōu)點就是開放性,吸引了眾多的開發(fā)者的支持,短短兩年時間開發(fā)出大量的手機應(yīng)用軟件,豐富了手機的應(yīng)用功能。另外對網(wǎng)絡(luò)友好,支持大部分網(wǎng)絡(luò)功能,并與Google應(yīng)用無縫結(jié)合,可以輕松獲取Google服務(wù)。

安卓APP源碼和設(shè)計報告——Android小程序超級小貓(超級小貓游戲)

圖1.2 2011年中國移動應(yīng)用超市各類手機軟件下載比例

Android和手機應(yīng)用市場正處于起步階段,市場和消費者需要個接受的過程,眾多開發(fā)者也都在積極探索盈利模式。Android開發(fā)者實現(xiàn)盈利主要依賴兩方面因素,一是全球Android手機終端的爆發(fā),另外就是海外付費應(yīng)用程序的模式逐漸形成。目前Android應(yīng)用開發(fā)個人或團體雖未取得規(guī)模盈利,但也開始逐漸向盈利模式轉(zhuǎn)移,獲得不錯收益。圖1.2是中國移動應(yīng)用軟件超市2011年的統(tǒng)計數(shù)據(jù),消費者下載量最高的依然是應(yīng)用開發(fā),其次便是游戲開發(fā),占據(jù)39%的下載量,而傳統(tǒng)的增值業(yè)務(wù)則只占5%,在移動互聯(lián)網(wǎng)時代,開發(fā)者紛紛逃離營運商的束縛,轉(zhuǎn)向利潤較為豐厚的應(yīng)用程序和游戲開發(fā)。由此圖也可以看出手機游戲軟件在消費者中的受歡迎程度,如果想在未來手機應(yīng)用程序開發(fā)中實現(xiàn)規(guī)模則需要加大手機游戲方面的開發(fā)力度。

目前在手機上開發(fā)出較為成功的游戲主要有FTG格斗游戲、PUZ益智類游戲、RPG角色扮演游戲、SLG模擬/戰(zhàn)棋式戰(zhàn)略游戲以及體感游戲和寵物養(yǎng)成游戲六類。其中格斗游戲誕生于街機,曾經(jīng)的“街霸”是其典型代表。FTG系統(tǒng)的核心是對戰(zhàn)斗部分進行碰撞檢測計算。益智游戲最大的創(chuàng)意是其游戲規(guī)則,玩家需要以自己的智慧對游戲規(guī)則進行思考,判斷從而通關(guān)以獲得成就感。PUZ游戲?qū)ν婕也僮饕蟛桓呤鞘謾C游戲中受眾面最廣的游戲,最具代表是“推箱子”。角色扮演游戲是最能與用戶共鳴的游戲,開啟了一扇通往虛擬現(xiàn)實的大門,可以讓玩家沉浸于打怪升級的快樂之中,“仙劍奇?zhèn)b傳”是其經(jīng)典代表。RPG游戲的核心是代表玩家角色成長的升級系統(tǒng),游戲都貫穿一個故事情節(jié),所以其創(chuàng)意是多元的、立體的,讓開發(fā)者有更廣闊的創(chuàng)作空間。戰(zhàn)棋類游戲是玩家在虛擬地圖上指揮一定角色與敵方展開戰(zhàn)斗,典型的有“地雷戰(zhàn)”。體感游戲主要依賴手機中的重力感應(yīng)等裝置開發(fā)出的新型游戲,玩家可以通過搖晃、旋轉(zhuǎn)、移動等動作來操作游戲。寵物養(yǎng)成游戲則因為其人性化游戲情節(jié)而吸引人們注意力。

手機游戲研發(fā)的重點是游戲情節(jié)和游戲界面。游戲情節(jié)的創(chuàng)作依賴人的想象力和創(chuàng)造力,主題及素材可以來源于熱門小說也可來古老傳說,例如中國的經(jīng)典名著“三國志”被日本光榮公司搬去后創(chuàng)作出名噪一時的經(jīng)典同名游戲。還有著名網(wǎng)絡(luò)小說“誅仙”也被創(chuàng)作為當(dāng)前流行的同名網(wǎng)絡(luò)游戲。這些文學(xué)作品為手機游戲的開發(fā)提供了大量的可創(chuàng)作素材。同時,行業(yè)競爭的激烈也導(dǎo)致雷同的不少游戲情節(jié)出現(xiàn),這就要求創(chuàng)作人員不斷發(fā)揮才能,構(gòu)思出更加豐富的游戲主題。游戲界面方面隨著手機性能不斷提高的影響,也愈加華麗。從當(dāng)初粗糙單色的俄羅斯方塊到后來顏色豐富的2D游戲,再到現(xiàn)在開始流行的極具立體效果的3D游戲。游戲的操縱方面也有革命性發(fā)展,從最初按鍵操縱到后來的屏幕多點觸控再發(fā)展到重力感應(yīng)操縱。

1.3 本課題研究的目的、意義及研究內(nèi)容

由于本人對游戲的酷愛、對代碼的敏感和對童年紅白機時代游戲的懷念,在Android平臺下通過掌握的Java語言基礎(chǔ)和對Android知識的深入學(xué)習(xí),研究并開發(fā)了一款益智闖關(guān)類游戲“超級小貓”,并通過整個學(xué)習(xí)、設(shè)計和實現(xiàn)的過程,能提高自己的代碼量和讀寫代碼能力,為以后步入Android應(yīng)用開發(fā)工作打下基礎(chǔ)。

  1. 設(shè)計功能

2.1.1 需求

功能:實現(xiàn)主人公小貓的前進、跳躍、頂金幣、頂磚塊、踩敵人、吃道具等功能并有關(guān)卡設(shè)置。

操作:設(shè)置屏幕虛擬鍵,使玩家通過觸控虛擬鍵對小貓的操作。

音效:游戲有背景音樂,按鈕、跳躍和死亡音效。

動畫效果:主人公和敵人的移動過程、死亡后的效果,磚塊及問號被頂后的效果。

2.1.2開發(fā)環(huán)境

硬件:Microsoft Windows 7操作系統(tǒng)

IDEEclipse

版本:Android2.2

2.1.3游戲設(shè)計思想和模塊劃分

本游戲采用Java面向?qū)ο笏枷?,將游戲中所有的對象通過劃分模塊進而創(chuàng)建各自的類。設(shè)計初期,通過對程序需求的分析,劃分了游戲背景模塊、游戲控制模塊,游戲地圖模塊、道具模塊、特效模塊、玩家模塊和敵人模塊主要幾個模塊。而后,通過幾大模塊,對游戲中的對象歸類,通過不斷的補充各個類的屬性,完善程序。

道具模塊

背景模塊

特效模塊

控制模塊

地圖模塊

敵人模塊

玩家模塊

圖3.2程序模塊圖

2.1.4游戲具體設(shè)計

1.游戲背景模塊

該模塊主要實現(xiàn)了游戲公共背景,包括天空不斷漂浮的白云,主程序顯示的分?jǐn)?shù)、金幣個數(shù)、時間、小山和大山,虛擬鍵左、右、上、音樂開、音樂關(guān)、退出游戲。由BG類和JOY類實現(xiàn)。

BG類

該類負(fù)責(zé)畫出分?jǐn)?shù)、金幣個數(shù)、時間、小山、大山和不斷漂浮的3朵白云,之所以要把這些對象放入一個bg類中,是由于它們都是一旦繪制出來就成系統(tǒng)本身的了,不受玩家控制而影響。而把受玩家控制的公共背景對象寫入其他類中。金幣圖片是一個幀動畫播放位圖,大、小山是用for循環(huán)有規(guī)律的畫入畫布中,白云的繪入是靜態(tài)的,但通過讓其橫坐標(biāo)變化和for語句判斷來實現(xiàn)循環(huán)在頁面漂浮的效果。實現(xiàn)代碼如下:

public void upData()

{//分別以1和2的速度循環(huán)移動

yunX1-=2;

if(yunX1<-50)

{

yunX1=490;

}

yunX2-=1;

if(yunX2<-50)

{

yunX2=490;

}

yunX3-=2;

if(yunX3<-50)

{

yunX3=490;

}

}

JOY類

在此類中畫出虛擬鍵左、右、上、音樂開、音樂關(guān),并加入觸屏監(jiān)聽方法。觸屏的監(jiān)聽是一個難點,要精確計算出所繪圖片寬高像素大小和玩家點擊屏幕范圍,這樣才能準(zhǔn)確監(jiān)聽到玩家所需的操作。

2.游戲控制模塊

該模塊主要實現(xiàn)了讓游戲能按照預(yù)期的順序播放畫面,綜合了游戲用到的所有類,根據(jù)狀態(tài)執(zhí)行各個類的線程。由MC類實現(xiàn)。

MC類

該類繼承了Android中的SurfaceView繪圖類,實現(xiàn)Runnable接口。該類引用了整個程序的所有類。創(chuàng)建初期,定義狀態(tài)標(biāo)識線程執(zhí)行順序即頁面切換,是通過后續(xù)類的完成進而對MC類的補充完成。

3.游戲地圖模塊

該模塊實現(xiàn)了游戲地圖信息的保存,增加了游戲的擴展性。由map類和TiledMap類實現(xiàn),地圖信息保存在一個二維數(shù)組中位圖大小經(jīng)過處理為16*16,屏幕寬為480,高為320,即地圖信息為20行,列根據(jù)關(guān)卡的長度自定。

4.道具模塊

該模塊中實現(xiàn)了游戲中道具毒蘑菇的控制。由類DJ類實現(xiàn),主要控制毒蘑菇的移動方法和碰撞檢測。

5.特效模塊

該模塊實現(xiàn)了公共圖片金幣的動畫效果、游戲主人公死亡后顯示圖片效果、碰到毒蘑菇顯示圖片效果、殺死敵人后敵人消失效果、碰撞普通磚塊后的爆炸效果、碰撞問號磚塊后彈出金幣效果。主要由TX、TX1、TX2、TX3、TX4、TX5、TXManager幾個類分別實現(xiàn)。

6.玩家模塊

該模塊實現(xiàn)了游戲主人公在場景中根據(jù)玩家的控制自由移動的功能。由Player類實現(xiàn)。是游戲設(shè)計的難點。

7.敵人模塊

該模塊實現(xiàn)了游戲中所有敵人的控制。由NPC、NPC01、NPC02、NPC03、NPC04_guike、NPCManager幾個類分別實現(xiàn)。

2.2游戲設(shè)計過程中遇到的問題和技術(shù)難點

2.2.1圖片問題

為了游戲美觀和地圖設(shè)計的方便,要把圖片處理成跟屏幕分辨率寬高都成比例,借助Batch Image Resizer和PS圖片處理工具分別對游戲素材進行縮放和去除圖片背景的操作。游戲中的主人公是位圖播放,Android中提供給我們播放幀動畫的方法。在繪圖中,Android中的繪圖類SurfaceView,默認(rèn)采用雙緩沖技術(shù),保證了屏幕不出現(xiàn)閃爍現(xiàn)象。

2.2.2控制問題

游戲的控制分為系統(tǒng)控制和玩家控制,由系統(tǒng)控制的只需設(shè)置其相應(yīng)的方法,在需要的時候執(zhí)行相應(yīng)的線程。由玩家控制的主要是對主人公的移動控制,在編寫代碼的過程中,左、右移動相對簡單,讓它跳起來一度用了不少時間學(xué)習(xí),對跳躍加入重力引擎方法 成功解決了實現(xiàn)跳躍高度一定,速度變化,有真實感的跳躍動作。

2.2.3碰撞檢測

游戲的核心重點在于碰撞檢測方法的編寫,即使繪圖再美,玩家控制的再好,到了不該過去的地方照樣過去,失去了游戲的規(guī)則。碰撞檢測包括,游戲主人公與敵人的碰撞、主人公與障礙物的碰撞、敵人與障礙物的碰撞、道具與主人公的碰撞

16*16 16*16

障礙物

② ③

圖3.3碰撞檢測示意圖

由圖3.3表示,主人公與障礙物的碰撞,當(dāng)在范圍①時,表示在障礙物上面,可以站在上面進行跳的動作,否則就是在空中,進行下降的動作。當(dāng)跳到④的范圍時,表示玩家與障礙物碰撞,障礙物執(zhí)行自己的方法(消失或者變化),玩家自由下落。主人公與敵人的碰撞中,當(dāng)主人公在范圍①—④時出于碰撞的臨界點,碰撞后玩家和敵人執(zhí)行自己的方法(死亡圖片或者爆炸消失)。敵人與主人公的碰撞與主人公與障礙物的碰撞類似,道具與主人公的碰撞與主人公與敵人碰撞類似。

2.2.4音效控制

在本程序中對主人公的跳躍,死亡,點擊主菜單按鈕都加入了音效,此外游戲中還有背景音樂。這個功能的實現(xiàn)用了Android中的SoundPool和Mediaplayer,前者控制音效,后者控制背景音樂。部分代碼如下:

主控制類MC中聲明

//聲明SoundPool

static SoundPool sp;

//記錄背景音樂文件id

static int soundId_long;

//記錄死亡音樂文件id

static int death;

//記錄點擊菜單音樂文件id

static int press;

//聲明一個音樂播放器

private static MediaPlayer mediaplayer;

主方法中

//實例SoundPool播放器

setSp(new SoundPool(4, AudioManager.STREAM_MUSIC, 100));

//加載音樂文件獲取其數(shù)據(jù)ID

//跳躍音效的初始化

setSoundId_long(getSp().load(context, R.raw.jump, 1));

//死亡音效的初始化

death = sp.load(context, R.raw.dead, 1);

//點擊音效的初始化

press = sp.load(context, R.raw.coin, 1);

//背景音樂的初始化

setMediaplayer(MediaPlayer.create(context, R.raw.mario));

//設(shè)置循環(huán)播放

getMediaplayer().setLooping(true);

(new Thread(this)).start() ;

然后分別在事件響應(yīng)中加入響應(yīng)方法。

//點擊音樂開時

if(joy.music1down==true)

{

MC.getMediaplayer().start();}

//點擊音樂關(guān)時

if(joy.music2down==true){

MC.getMediaplayer().pause();

}

在Player類中加入

//當(dāng)點擊跳躍鍵時

if(joy.up_down==true){

m=1;

vy=-18;

//狀態(tài)為跳躍

changeFS(2);

//此時加入點擊音效

MC.sp.play(MC.getSoundId_long(), 1f, 1f, 0, 0, 1); }

2.2.5頁面控制

為了實現(xiàn)能按照流程執(zhí)行,在主控制類MC中用

switch(CanvasIndex){ case:

Berak;}語句對頁面進行的切換控制。根據(jù)各個頁面時時反饋的CanvasIndex值確定跳入哪一個頁面。CanvasIndex值設(shè)置為0、5、10、15、20、25、30、35、40分別代表幫助頁面 、logo頁面、主頁面、加載頁面、主程序頁面、結(jié)束頁面、第二關(guān)切換頁面、第二關(guān)加載頁面、第二關(guān)主頁面。用switch控制能簡單有效的切換到下一個頁面而退出上一個頁面。

2.3 開發(fā)過程簡述

游戲的開發(fā)不同于應(yīng)用開發(fā),游戲里面更多的用了繪圖方法和游戲算法,所涉及的類不是分步一個一個寫出來的,很多都是同時創(chuàng)建的,并且經(jīng)過無數(shù)次的調(diào)試 。類中的屬性也是時時根據(jù)需要添加進去的,使其功能逐步完善。在次過程中通過學(xué)習(xí)相關(guān)內(nèi)容,閱讀相關(guān)代碼,不斷的嘗試和失敗中找到屬于自己的編寫風(fēng)格,應(yīng)用到實例開發(fā)中。

二、項目設(shè)計

要求:描述設(shè)計的設(shè)計思路與設(shè)計過程,例如,界面包括什么布局、組件;功能實現(xiàn)如果操作:哪個組件什么事件、事件處理是什么響應(yīng)

1、程序分析和具體實現(xiàn)

1.1游戲Logo頁面

程序中有個logo類,該類負(fù)責(zé)繪制logo頁面,頁面狀態(tài)為5,程序主控制類MC默認(rèn)設(shè)置狀態(tài)為5即打開程序后就顯示logo頁面。在這個類中加入了漸變效果。如圖1.1:

安卓APP源碼和設(shè)計報告——Android小程序超級小貓(超級小貓游戲)

圖1.1

public void render(Canvas g)

{

Paint paint=new Paint();

paint.setColor(0xff000000);

g.drawRect(0,0,480,320, paint);

paint.setAlpha(a);

g.drawBitmap(im, 30,0, paint);

}

public void upData()

{

t ;

if(t>150)

{a-=10}

if(a<=0)

{ a=0;

MC.CanvasIndex=10;

t=0;

}

在480*320的畫布上面繪制logo頁面背景圖片,由a值控制顯示,下面的線程方法中,用for語句控制a值,t 直到150,這個是圖片漸漸出現(xiàn)的效果,當(dāng)t>150時,a-=10,這個是圖片漸漸消失的效果,整個過程大約有5秒鐘,然后自動跳轉(zhuǎn)到游戲主菜單。

1.2游戲主菜單分析

程序中CanvasMain類實現(xiàn)了主菜單的功能。有開始游戲按鈕和游戲幫助按鈕,開始游戲按鈕使用了圖片閃爍播放效果。效果如圖1.2所示:

安卓APP源碼和設(shè)計報告——Android小程序超級小貓(超級小貓游戲)

圖1.2

if(t%5==0)

{g.drawBitmap(im1,185,180,paint);

}

public void upData()

{t ;

if(t>5){

t=0;}}

用了if語句判斷,使圖片交替出現(xiàn),達(dá)到閃爍效果,增加美感。對按鈕的監(jiān)聽是用了Android中的觸屏監(jiān)聽方法,監(jiān)聽玩家點到屏幕的范圍判斷操作。

//按鍵監(jiān)聽

public void penDown(float _x,float _y)

{ //判斷是否點擊圖片區(qū)域坐標(biāo)

if(Math.abs(240-_x)<40&&Math.abs(193-_y)<40){

//游戲開始,初始化游戲數(shù)據(jù)

CanvasUI.jinbiCount=0;

CanvasUI.life=3;

CanvasUI.score=0;

CanvasUI.time=0;

//跳轉(zhuǎn)頁面到Loading

MC.CanvasIndex=15;

}

if(Math.abs(240-_x)<40&&Math.abs(280-_y)<40)

{//播放音效

MC.sp.play(MC.press, 1f, 1f, 0, 0, 1);

MC.CanvasIndex=0;

}

}}

其中if(Math.abs(240-_x)<40&&Math.abs(193-_y)<40)

和if(Math.abs(240-_x)<40&&Math.abs(280-_y)<40)

兩個if語句經(jīng)過仔細(xì)計算后得出的,即在按鈕大小的范圍內(nèi),方便能準(zhǔn)確監(jiān)聽到用戶操作。當(dāng)點擊開始游戲時,初始化游戲數(shù)據(jù),設(shè)定狀態(tài)變量MC.CanvasIndex=15,傳給MC,告訴MC應(yīng)該顯示開始游戲的頁面了。同理,點擊 游戲幫助時,由MC控制顯示幫助頁面。效果如圖1.3所示:

安卓APP源碼和設(shè)計報告——Android小程序超級小貓(超級小貓游戲)

圖1.3

1.3 開始游戲過程的后臺邏輯

當(dāng)玩家點擊開始游戲后,玩家看到的只有一個載入頁面,顯示的是玩家現(xiàn)在人數(shù),而后臺要經(jīng)過迅速的線程加載。在MC類中實現(xiàn)。首先,響應(yīng)的是Loading類,如下圖1.4所示:

圖 1.4

初始化地圖信息、人物信息、敵人信息、道具信息,隨后修改狀態(tài)變量CanvasIndex值為20,傳給MC,

case 20:

if(joy.music1down==true)

{

//開始背景音樂

MC.getMediaplayer().start();

}

if(joy.music2down==true)

{

//暫停背景音樂

MC.getMediaplayer().pause();

} //執(zhí)行公共圖片繪制

joy.upData();

//執(zhí)行Player線程

p.upData(this,joy,mp,tm,dm,nm);

//執(zhí)行地圖線程

mp.upData(p, cx, cy);

//執(zhí)行背景線程

bg.upData();

//執(zhí)行地圖線程

btm.upData(p, cx, cy,mp,nm,tm);

//執(zhí)行道具線程

dm.upData(mp,p, tm);

//執(zhí)行特效線程

tm.upData(mp,tm,p);

//執(zhí)行勝利線程

win.upData(p, cx, cy);

//執(zhí)行敵人線程

nm.upData(mp,cx,p,tm);

//執(zhí)行主頁面線程

cui.upData(p,tm);

//跳出

break;

效果如圖1.5所示:

安卓APP源碼和設(shè)計報告——Android小程序超級小貓(超級小貓游戲)

圖 1.5

三、項目代碼

要求:項目的核心代碼:并在相關(guān)功能模塊處添加功能說明及注釋

  1. 布局文件代碼

//開始游戲布局文件

<?xml version=”1.0″ encoding=”utf-8″?>

<RelativeLayout xmlns:android=”http://schemas.android.com/apk/res/android”

xmlns:dlc=”http://schemas.android.com/apk/res/com.dlc.finaldesign”

xmlns:tools=”http://schemas.android.com/tools”

android:id=”@ id/rl_gamecenter_main”

android:layout_width=”fill_parent”

android:layout_height=”fill_parent”

android:background=”@drawable/bg_gradient_color_lightblue”

android:orientation=”vertical” >

<!– 底部工具欄,里面有四個圖片按鈕 –>

<LinearLayout

android:id=”@ id/rl_gamecenter_bottom”

android:layout_width=”match_parent”

android:layout_height=”60dp”

android:layout_alignParentBottom=”true”

android:background=”@drawable/bg_gradient_color_blue”

android:orientation=”horizontal” >

<com.dlc.finaldesign.ui.view.ChangeColorIconWithTextView

android:id=”@ id/ccitv_gamecenter_indicator_notify”

android:layout_width=”0dp”

android:layout_height=”fill_parent”

android:layout_weight=”1″

android:padding=”5dp”

dlc:icon=”@drawable/tab_mygames”

dlc:text=”我的游戲”

dlc:text_size=”12sp” />

<com.dlc.finaldesign.ui.view.ChangeColorIconWithTextView

android:id=”@ id/ccitv_gamecenter_indicator_games”

android:layout_width=”0dp”

android:layout_height=”fill_parent”

android:layout_weight=”1″

android:padding=”5dp”

dlc:icon=”@drawable/tab_gamehome”

dlc:text=”游戲首頁”

dlc:text_size=”12sp” />

<com.dlc.finaldesign.ui.view.ChangeColorIconWithTextView

android:id=”@ id/ccitv_gamecenter_indicator_more”

android:layout_width=”0dp”

android:layout_height=”fill_parent”

android:layout_weight=”1″

android:padding=”5dp”

dlc:icon=”@drawable/tab_moregame”

dlc:text=”更多”

dlc:text_size=”12sp” />

</LinearLayout>

<!– ViewPager –>

<!– 計算相對位置時,需要定位的布局需要計算好高度 –>

<RelativeLayout

android:layout_width=”fill_parent”

android:layout_height=”fill_parent”

android:layout_above=”@id/rl_gamecenter_bottom”

android:layout_alignParentTop=”true”

android:orientation=”vertical” >

<com.dlc.finaldesign.ui.view.MyViewPager

android:id=”@ id/mvp_gamecenter_main”

android:layout_width=”fill_parent”

android:layout_height=”fill_parent”

android:layout_gravity=”center”

android:background=”#eee” >

</com.dlc.finaldesign.ui.view.MyViewPager>

</RelativeLayout>

</RelativeLayout>

2、類文件代碼

//Player類(核心類)

public class Player extends MySprite {

public static final int SPEED = 5;

// 定義水平移動速度,和垂直速度

float vx, vy;

float vy1; // 優(yōu)化碰撞檢測

int m;

// 定義瑪麗死亡,默認(rèn)為不死

boolean PlayerIsDead = false;

boolean ishitUp; // 碰撞金幣磚塊

boolean isDead; // 死亡判斷

// 定義是否創(chuàng)建對象,包括敵人,障礙物等

boolean HaveCreate;

// 定義判斷是否過關(guān)

boolean nextLevel;

// 為瑪麗的狀態(tài)定義二維數(shù)組

static int[][] fsData = new int[][] { { 0 },// 等待

{ 0, 0, 1, 1 },// 行走

{ 2 },// 跳躍

{ 3 } // 死亡

};

// 根據(jù)瑪麗的狀態(tài)繪圖

public Player(Bitmap im, float x, float y) {

super(im, fsData, 0, 0, x, y, 31, 37, -15, -37);

// 默認(rèn)初始移動速度為0

vx = vy = 0;

m = 0;

vy1 = 0;

// 定義默認(rèn)值

PlayerIsDead = false;

ishitUp = false;

isDead = false;

HaveCreate = false;

nextLevel = false;

}

// 創(chuàng)建游戲邏輯方法

public void upData(MC mc, JOY joy, map mp, TXManager tm, DJManager dm,

NPCManager nm) {

this.nextFream();

// 接收參數(shù)m判斷

if (m < 3) {

x = vx;

// 定義瑪麗移動的前提

if (m == 0 || isDead == false || PlayerIsDead == false) {

// 左箭頭被點的時候

if (joy.leftdown == true) {

this.f = true;

x -= SPEED;

// 碰撞檢測方法

if (mp.isHit(x – 7, y – 18) > 0

|| mp.isHit(x – 7, y – 26) > 0

|| mp.isHit(x – 7, y – 10) > 0) {

x = SPEED;

}

if (x – mc.cx < 0) {

x = SPEED;

}

}

// 右箭頭被點

if (joy.rightdown == true) {

this.f = false;

x = SPEED;

// 碰撞檢測方法

if (mp.isHit(x 7, y – 18) > 0

|| mp.isHit(x 7, y – 26) > 0

|| mp.isHit(x – 7, y – 10) > 0) {

x -= SPEED;

}

if (x – mc.cx > 250 && mc.cx – 480 < 4318) {

mc.cx = SPEED;

}

}

// 點擊退出的方法

// if(joy.quit_down==true)

// {

// // 關(guān)閉程序的方法,0是關(guān)閉

// System.exit(0);

// }

// 接收參數(shù)m的值判斷

if (m == 0) {

// 點擊上箭頭的方法

if (joy.up_down == true) {

m = 1;

vy = -18;

// 狀態(tài)為跳躍

changeFS(2);

// 此時加入點擊音效

MC.sp.play(MC.getSoundId_long(), 1f, 1f, 0, 0, 1);

// 判斷是否把位圖置反

if (f == false) {

vx = 3;

} else {

vx = -3;

}

}

}

if (x – mc.cx > 250) {

mc.cx = 3;

}

}

}

switch (m) {

case 0:

if (mp.isHit(x, y) <= 0 || mp.isHit(x 5, y) <= 0

|| mp.isHit(x – 5, y) <= 0) {

m = 1;

// 狀態(tài)為跳躍

this.changeFS(2);

vy = 0;

}

break;

case 1: // 跳躍 重力引擎

y = vy;

vy = 2;

if (vy >= 15) {

vy = 15;

}

if (isDead == false) {

if (y > 400) {

tm.create(1, x 25, 236, 30);

isDead = true;

vx = 0;

}

}

if (vy > 0) {

if (mp.isHit(x, y) > 0 || mp.isHit(x – 5, y) > 0

|| mp.isHit(x 5, y) > 0) {

m = 0;

vx = 0;

// 狀態(tài)為行走

this.changeFS(1);

y = ((int) y / mp.h) * mp.h 1;

}

} else {

// 與問號碰撞檢測的方法

if (mp.isHit(x, y – 37) > 0 || mp.isHit(x – 5, y – 37) > 0

|| mp.isHit(x 5, y – 37) > 0) {

if (mp.isHit(x, y – 37) == 2) {

mp.map[((int) y – 37) / mp.h][(int) x / mp.w] = 0;

tm.create(4, ((int) x / mp.w) * mp.w 8,

(((int) y – 37) / mp.h) * mp.h – 8, 6);// 生成金幣特效

tm.create(

3, // 在玩家頂?shù)降奈恢梅胖锰匦Тu

((int) x / mp.w) * mp.w 8,

(((int) y – 37) / mp.h) * mp.h 8, 5);

}

// 與磚塊碰撞檢測方法

if (mp.isHit(x, y – 37) == 3) {

mp.map[((int) y – 37) / mp.h][(int) x / mp.w] = 0;

tm.create(5, ((int) x / mp.w) * mp.w 8,

(((int) y – 37) / mp.h) * mp.h 8, 5);// 生成磚塊爆炸碎片

}

// 與有毒的蘑菇碰撞檢測方法

if (mp.isHit(x, y – 37) == 13) {

mp.map[((int) y – 37) / mp.h][(int) x / mp.w] = 0;

dm.create(1, ((int) x / mp.w) * mp.w 8,

(((int) y – 37) / mp.h) * mp.h – 16);// 生成毒蘑菇

tm.create(

3, // 在玩家頂?shù)降奈恢梅胖锰匦Тu

((int) x / mp.w) * mp.w 8,

(((int) y – 37) / mp.h) * mp.h 8, 5);

}

y -= vy;

y = (((int) y – 37) / 16) * 16 37;

vy = 0;

}

}

break;

case 3:

// 自由下落方法

y = vy;

vy = 2;

// 定義狀態(tài)為死亡

this.changeFS(3);

if (vy >= 0) {

vy = 0;

m = 4;

}

break;

case 4:

vy = 2;

y = vy;

// 判斷并狀態(tài)為死亡

this.changeFS(3);

if (y > 380) {

isDead = true;

vx = 0;

// 根據(jù)第幾關(guān)判斷死亡后該回到第幾關(guān)

if (MC.CanvasIndex == 40) {

MC.CanvasIndex = 35;

}

if (MC.CanvasIndex == 20) {

MC.CanvasIndex = 15;

}

}

break;

case 5:

break;

}

// 判斷是否過關(guān)

if (x mc.cx > 4800 && y > 320)

// if(x mc.cx>900)

{

nextLevel = true;

if (nextLevel == true) {

MC.CanvasIndex = 30;

}

}

}

// 碰撞的邏輯

public boolean isHit(float _x, float _y) {

if (Math.abs(x – _x) < 10 && Math.abs(y – _y) < 10) {

return true;

}

return false;

}

}

安卓源碼(帶報告)39

安卓源碼(帶報告) · 目錄

上一篇安卓APP源碼和設(shè)計報告——移動書籍交互系統(tǒng)下一篇安卓APP源碼和設(shè)計報告——體重檔案APP(含答辯PPT)

閱讀原文

版權(quán)聲明:本文內(nèi)容由互聯(lián)網(wǎng)用戶自發(fā)貢獻(xiàn),該文觀點僅代表作者本人。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如發(fā)現(xiàn)本站有涉嫌抄襲侵權(quán)/違法違規(guī)的內(nèi)容, 請發(fā)送郵件至 舉報,一經(jīng)查實,本站將立刻刪除。