98013073 Bao Cao Do an Mon Hoc Chuyen Nganh

Embed Size (px)

Citation preview

  • 7/31/2019 98013073 Bao Cao Do an Mon Hoc Chuyen Nganh

    1/35

    TRNG I HC CNG NGH THNG TIN

    KHOA CNG NGH PHN MM

    BO CO CUI K

    Mn N MN HCCHUYN NGNH

    ti : Lp trnh ng dng game trn Android

    Ging vin :ThS. Nguyn Trc Thc

    Sinh vin:Nguyn Cng Huy 08520148

    V Trng Thi 08520375

    TP.HCM, ngy 01 thng 06 nm 2012

  • 7/31/2019 98013073 Bao Cao Do an Mon Hoc Chuyen Nganh

    2/35

    LI MU

    Ngy nay, in thoi di ng l mt vt dng khng th thiu c trong cuc sng. Nkhng ch c chc nng nghe gi, m cn c th thc hin c hu ht nhng cng vic

    m my tnh c th lm, phc v cho nhu cu vn phng, gii tr v cng vic.c bit trong ngnh phn mm, game l mt lnh vc c bit, ang c bc pht trinmnh m, khi m nhu cu gii tr trn cc thit bdi ng ca ngi s dng ngy mttng cao. Do , lp trnh game trn cc thit bdi ng ang l mt xu hng tt yu cacc nh lm phn mm.

    in thoi Android vi slng ngi dng ng o, cng vi sa dng v cu hnh,a dng v chng loi, ang l mnh t mu mcho cc nh pht trin game. Do ,google cng h trAndroid rt nhiu nhng th vin lp trnh game hiu qu, trong

    c th kn OpenGL, mt th vin ha rt mnh m.

    Vi s pht trin mnh mnh vy ca Android, v lp trnh game trn Android, c hicho lp trnh vin l rt ln. V vy, nhm chn ti Lp trnh ng dng game trnAndroid. Trong ti ny, nhm s trnh by ci nhn c bn v lp trnh game trnAndroid v demo mt ng dng game trong .

    Cm n thy Nguyn Trc Thc tn tnh hng dn chng em hon thnh n ny.

  • 7/31/2019 98013073 Bao Cao Do an Mon Hoc Chuyen Nganh

    3/35

    Mc lc1. Tm hiu v Android. .................................................................................................... 1

    1.1. Gii thiu ............................................................................................................... 11.2. Cu trc h thng ................................................................................................... 11.3. Cc thnh phn c bn ca mt ng dng Android. .............................................. 4

    2. K thut lp trnh game trn Android. ........................................................................ 112.1. Th vin ha OpenGL .................................................................................... 112.2. Th vin m thanh OpenAL ................................................................................ 132.3. NDK ..................................................................................................................... 152.4. Lu tr thng tin. ................................................................................................. 182.5. Cc th vin khc. ................................................................................................ 222.6. Vng i ca mt game. ...................................................................................... 22

    3. Nhng khc bit so gia lp trnh game trn thit bdi ng v trn my tnh. ........ 244. Nhng khc bit so gia lp trnh game trn Android v cc nn tng di ng khc.

    265. Gii thiu game Kim cng ....................................................................................... 27

    5.1. Gii thiu c bn .................................................................................................. 275.2. Giao din ngi dng........................................................................................... 275.3. Cch chi. ............................................................................................................ 295.4. Tnh nng mrng (item, mission) ..................................................................... 305.5. Nhng im hp dn trong game. ........................................................................ 30

  • 7/31/2019 98013073 Bao Cao Do an Mon Hoc Chuyen Nganh

    4/35

    Bo co mn n mn hc chuyn ngnh Trang 1

    1. Tm hiu v Android.1.1. Gii thiu

    Android l mt hiu hnh dnh cho cc thit bdi ng, c pht trinbi Open Handset Alliance, dn u bi Google.

    Android c pht trin bi Google, da trn nn tng Linux v cc phnmm ngun m. Ban u n c pht trin bi Android Inc (sau cGoogle mua li) v gn y n trthnh mt trong nhng phn mm ngu ca lin minh OHA (Open Handset Alliance - vi khong 78 thnhvin bao gm c nh sn xut, nh pht trin ng dng... cho thit b didng m dn u l Google).

    Androidc pht trin nhm cnh tranh vi cc hiu hnh di ngkhc nh iOS (Apple), BlackBerry OS, Windows Mobile (Microsoft),Symbian (Nokia), Samsung (Bada), WebOS (Palm)... Theo thng k trongqu II nm 2010 ti M, hiu hnh Android chim th phn 33% (caonht) trong tng s cc hiu hnh di ng c bn ra, th 2 lBlackBerry OS 28% v iOS (Apple) xp th 3 vi 22%.

    1.2. Cu trc h thngAndroid gm cc tng thnh phn nh sau : Application, Application

    Framework, Libraries, Linux Kernel.

  • 7/31/2019 98013073 Bao Cao Do an Mon Hoc Chuyen Nganh

    5/35

    Bo co mn n mn hc chuyn ngnh Trang 2

    Cc tng c bn ca nn tng Android

    1.2.1. ApplicationsAndroid cung cp mt b cc ng dng tin ch nh email client, SMS,lch, bn , trnh duyt Tt cu c vit bng ngn ng Java.

    1.2.2.

    Application Framework.Cung cp mt nn tng mcho cc lp trnh vin, gip h lp trnh ranhng phn mm vi nhiu tnh nng th v. tng ny, Android cungcp khnng truy cp ti phn cng h thng, cng nh cc dch v hiu hnh cung cp nh thng tin v tr, truy cp mng, thng bo

    Tng ny bao gm cc thnh phn sau :

    - Mt bcc i tng View xy dng nn cc ng dng bao gmlist, grid, textboxes, buttons, v trnh duyt nhng.

    - Content Providers cung cp khnng truy cp ti cc d liu ca ccng dng khc.

    - Resource Manager cung cp khnng truy cp ti cc resourcekhng phi dng code, nh chui, ha v layout.

  • 7/31/2019 98013073 Bao Cao Do an Mon Hoc Chuyen Nganh

    6/35

    Bo co mn n mn hc chuyn ngnh Trang 3

    - Notification Manager gip hin cc alert ln status bar.- Activity Manager cung cp khnng qun l vng i ca ng

    dng.

    1.2.3. Libraries.Android bao gm mt bcc th vin C/C++ s dng bi cc thnhphn khc nhau. Mt sth vin Android c s dng nh :

    - System C library : Th vin chun C.- Th vin a phng tin : da trn PacketVideo's OpenCORE, th

    vin h trchi cc nh dng m thanh v video ph bin nhMPEG4, H.264, MP3, AAC, JPG, PNG

    - Qun l surface : Qun l vic truy cp cc h thng hin th bndi, cc lp ha 2D, 3D.

    - LibWebCore : Mt engine trnh duyt hin i, c s dng trongc trnh duyt Android v WebView control.

    - SGL : C sca ha 2D- 3D libraries : th vin ha 3D OpenGL, s dng tng tc ha

    nu phn cng cho php.

    - FreeType : th vin render vector v bitmap font.- SQLite : Engine h qun trc sd liu mnh m v nh.

    1.2.4. Android RuntimesMi ng dng Android chy trn mt tin trnh ring, vi mt my oDalvik. My o ny thc thi file .dex, mt dng file c ti u cho bnhnh.

    1.2.5. Nhn linuxAndroid da trn nhn linux 2.6 cho nhng dch v h thng nh bomt, qun l b nh, network stack v driver model. Nhn cng ccoi nh l mt lp o trung gian gia phn cng v phn mm.

  • 7/31/2019 98013073 Bao Cao Do an Mon Hoc Chuyen Nganh

    7/35

    Bo co mn n mn hc chuyn ngnh Trang 4

    1.3. Cc thnh phn c bn ca mtng dng Android.Mt ng dng Android c to bi mt hay nhiu thnh phn c bn diy:

    1.3.1. ActivityActivity l thnh phn c nhim v hin th ra giao din ca ng dng.Mt ng dng c th bao gm nhiu Activity. Chng tn ti c lp vinhau, nhng cng c th gi ln nhau. Mt ng dng cng c th gi tiActivity ca mt ng dng khc (nu c ng dng kia cho php).

    Vng i ca ActivityActitvity l thnh phn quan trng nht v ng vai tr chnh trong xy

    dng ng dng Android.

    Hiu hnh Android qun l Activity theo dng stack: khi mtActivity mi c khi to, n sc xp ln u ca stack v trthnh running activity, cc Activity trc s b tm dng v ch hotng trli khi Activity mi c gii phng.

    Cc trng thi trong Activity:

  • 7/31/2019 98013073 Bao Cao Do an Mon Hoc Chuyen Nganh

    8/35

    Bo co mn n mn hc chuyn ngnh Trang 5

    Running:Activity ang hin th trn mn hnh (foreground).Paused: Activity vn hin th(visible) nhng khng thtng tc (lostfocus)Stop: Activity b thay th hon ton bi Activity mi s tin n trngthi stop

  • 7/31/2019 98013073 Bao Cao Do an Mon Hoc Chuyen Nganh

    9/35

  • 7/31/2019 98013073 Bao Cao Do an Mon Hoc Chuyen Nganh

    10/35

    Bo co mn n mn hc chuyn ngnh Trang 7

    V d activity A yu cu mt activity lm gip vic chp nh, activity Bp ng c vic ny, sau khi user chp nh xong s tr li file nhcho activity A.

    Nh th stn nhiu cng sc lm mt vic m ngi khc lmri.

    1.3.2. ServicesService l mt thnh phn chy nn, thc thi trong mt thi gian di.Mt service khng cung cp giao din ngi dng, m chy pha di,khng cn tng tc vi ngi dng. Mt activity c th khi chy mtdch vv tng tc vi chng.

    Mt Service c thc s dng theo 2 cch:

    - N c thc bt u v c cho php hot ng cho n khi mtngi no dng n li hoc n t ngt. chny, n c btu bng cch gi Context.startService() v dng bng lnhContext.stopService(). N c th t ngt bng lnh Service.stopSelf()hoc Service.stopSelfResult(). Ch cn mt lnh stopService() ngngService li cho d lnh startService() c gi ra bao nhiu ln.

    - Service c thc vn hnh theo nh c lp trnh vic s dngmt Interface m n nh ngha. Cc ngi dng thit lp mt ngtruyn ti i tng Service v s dng ng kt ni thm nhpvo Service. Kt ni ny c thit lp bng cch gi lnhContext.bindService() v c ng li bng cch gi lnhContext.unbindService(). Nhiu ngi dng c th kt ni ti cng mtthit b. Nu Service vn cha c khi chy, lnh bindService() cth ty khi chy n. Hai ch ny th khng tch bit ton b. Bn

    c th kt ni vi mt Service m n c bt u vi lnhstartService(). V d, mt Service nghe nhc ch nn c thcbt u bng cch gi lnh startService() cng vi mt i tng Intentm nh dng c m nhc chi. Chsau , c thl khi ngi sdng mun kim sot trnh chi nhc hoc bit thm thng tin v bi hthin ti ang chi, th s c mt Activity to lp mt ng truyn tiService bng cch gi bindService(). Trong trng hp nh th ny,

  • 7/31/2019 98013073 Bao Cao Do an Mon Hoc Chuyen Nganh

    11/35

    Bo co mn n mn hc chuyn ngnh Trang 8

    stopService() s khng thc s ngng Service cho n khi lin kt cuicng c ng li.

    Ging nh mt Activity, mt Service cng c cc phng thc chu k

    thi gian m bn c thci t kim sot nhng sthay i trongtrng thi ca n. Nhng nhng phng thc ca Service th t hn lca Activitych c 3- v chng th c s dng rng ri, khng cbo v.void onCreate()

    void onStart(Intent intent)

    void onDestroy()

    Bng vic thc hin nhng phng thc ny, bn c th gim st 2 vnglp ca chu k thi gian ca mi Service.

    Entire lifetime ca mt Service din ra gia thi gian onCreate() cgi ra v thi gian m onDestroy() tr li. Ging nh mt Activity, mtService li tit hnh ci t ban u onCreate(), v gii phng tt ccc ti nguyn cn li onDestroy() .

    V d, mt Service pht li nhc c th to ra mt lung v bt u chinhc onCreate(),v sau lung chi nhc s dng li onCreate(),Active lifetime ca mt Service bt u bng mt lnh ti onStart().yl phng thc c chuyn giao i tng Intent m c

    thng qua ti startService() Service m nhc s mi tng Intent quyt nh xem schi loi nhc no v bt u pht nhc.Khng c callback tng ng no cho thi im Service ngng likhng c phng thc onStop() .

    Cc phng thc onCreate() v onDestroy() c gi cho tt c ccService d chng c c bt u bng Context.startService() hocContext.bindService() hay khng. Tuy nhin th, onStart() chc gira i vi cc Service bt u bng startService().

    Nu mt Service cho php nhng Service khc kt ni vi n th s cthm cc phng thc callback dnh cho Service thc hin

    IBinder onBind(Intent intent)

    boolean onUnbind(Intent intent)

    void onRebind(Intent intent)

  • 7/31/2019 98013073 Bao Cao Do an Mon Hoc Chuyen Nganh

    12/35

  • 7/31/2019 98013073 Bao Cao Do an Mon Hoc Chuyen Nganh

    13/35

    Bo co mn n mn hc chuyn ngnh Trang 10

    Service LifeCycle

    1.3.3. Content ProviderContent Provider qun l vic chia s d liu. D liu c lu trtrong c sd liu, th nh, trn Web. Thng qua content provider,nhng ng dng khc c th truy cp c nhng d liu ny.

    1.3.4. Broadcast ReceiverBoardcast Receiver l thnh phn p ng li nhng thng bo t phah thng. V dnh nhng thng bo tt mn hnh, pin yu, Mt ngdng cng c th to ra Broadcast Receiver, v dnh thng bo download xong mt file no . Tm li, Broadcast Receiver l thnh

  • 7/31/2019 98013073 Bao Cao Do an Mon Hoc Chuyen Nganh

    14/35

    Bo co mn n mn hc chuyn ngnh Trang 11

    phn gip pht ra mt s kin no ti ton b h thng, v mt ngdng no c th nhn s kin ny v xl tng ng.

    2. K thut lp trnh game trn Android.Lp trnh game vlogic th cng ging nh lp trnh game trn cc thit b khc.Vn y l thit bdi ng Android c cu hnh kh thp so vi my tnh,mn hnh nhiu kch ckhc nhau, vic nhp liu cng khng linh hot bng. Vvy lp trnh game trn Android cng i hi x l nhiu vn pht sinh. Diy l mt s k thut v lp trnh game trn Android.

    2.1. Th vin ha OpenGL

    Nh ni trn, th vin ha OpenGL l mt th vin ha 3D, htrtng tc trc tip vi phn cng, nht l vi btng tc ha. Sdng th vin ha ny, ngi dng c th to ra nhng game c nhng

    hiu ng phc tp, cht lng hnh nh cao, m vn gic smt mcho game.

    OpengGL l mt giao din phn mm c lp vi phn cng (hardwareindependent software interface) h trcho lp trnh ha. lm ciu ny, OpenGL khng thc hin cc tc v thuc v hiu hnh cngnh khng nhn d liu nhp ca ngi dng (ngi dng giao tip viOpenGL thng qua OpenGL API). N l lp trung gian gia ngi dng vphn cng. Ngha l n giao tip trc tip vi driver ca thit b ha.

    Trong b NDK ca Android tch hp sn OpenGL ES, nn ta ch vicinclude khi cn dng n nhng API ca OpenGL.

    OpenGL vn l mt th vin ha 3D. Nhng ta cng c thdng n v hnh nh 2D.

    2.1.1. Khi to OpenGL

  • 7/31/2019 98013073 Bao Cao Do an Mon Hoc Chuyen Nganh

    15/35

    Bo co mn n mn hc chuyn ngnh Trang 12

    tng tc c vi OpenGL, trc tin ta phi khi to thit b sdng OpenGL. khi to, bn pha Java, ta to ra mt lpGL2JNIView tha k t lp GLSurfaceView. GLSurfaceView l mtlp c tha k t lp View, c tc dng hin th hnh nh c v t

    OpenGL.Trong hm khi to Activity, ta set view cho Activity l i tngGL2JNIView.

    mView = new GL2JNIView(getApplication(), 320, 480);

    setContentView(mView);

    Tip theo, ta gi mt shm ci t php chiu ca OpenGL, chuyntmi trng 2D sang 3D. to c hnh nh 2D, ta s dng phpchiu song song. Trong hnh bn di, bn tri l php chiu phi cnh,

    s cho ta hnh nh 3D, vi cm gic xa gn. Cn hnh bn phi l phpchiu song song, s loi b cm gic xa gn, cho ta hnh nh 2D.

    to c hnh nh ny, ta dng hm

    glOrthof(0.0f, width, height, 0.f, -100.0f, 100.0f);

    Tip theo, ta s cu hnh mt s thuc tnh, enable mt s chc nngnh VertexArray (buffer cha cc nh), TexureCoordinateArray (mngcha ta texture), chc nng v vi knh trong sut alpha (Blend).

    Ngoi ra ta cng disable mt s chc nng khng cn thit trong v hnh2D nh CullFace (loi b hnh nh da vo chiu ca cc vertex,thng s dng trong 3D).

  • 7/31/2019 98013073 Bao Cao Do an Mon Hoc Chuyen Nganh

    16/35

    Bo co mn n mn hc chuyn ngnh Trang 13

    2.1.2. TextureTexture l lp vt liu ph ln b mt 3D. Nhng y khi ta vhnh nh 2D, th texture chnh l nhng hnh nh cn v. load ctexture, chng ta cn phi c mt ImageData, l mt mng byte mu.

    Mng ny c c ra t file nh, trong trng hp ny l file PNG.

    Sau khi khi to texture, ta sa mng byte ny gn vi texture .

    2.1.3. V texture vc texture ln, ta cn ph texture ny ln mt mng nh. Mng

    nh ny to ra mt hnh c dng hnh ch nht, vi kch thc bngkch thc ta mun v ln mn hnh. Sau , khi mun v phn no catexture ln mn hnh, ta gn totng ng cho hnh v.

    2.2. Th vin m thanh OpenAL

    Th vin m thanh OpenAL gip cho vic chi m thanh hiu quhn.Th vin ny gip tng tc trc tip vi phn cng m thanh, c bit ckhnng to ra m thanh vm, lm cho game trnn trung thc hn.

    (0.0f, 0.0f) (1.0f, 0.0f)

    (1.0f, 0.0f) (1.0f,1.0f)

  • 7/31/2019 98013073 Bao Cao Do an Mon Hoc Chuyen Nganh

    17/35

    Bo co mn n mn hc chuyn ngnh Trang 14

    Cc hm chc nng chnh ca OpenAL c ng gi trong source object,audio buffer v single listener. Source object cha con tr ti buffer, vntc, vtr v hng ca m thanh. Listener object cng tng t sourceobject, nhng l i tng ngi nghe. Buffer cha d liu m thanh, nh

    dng PCM. Renderring engine cn thit cho vic tnh ton khong cch, tohiu ng Doppler

    Trong NDK tch hp cc file header v th vin OpenAL.

    2.2.1. Khi to OpenAL khi to OpenAL, ta cn khi to context cho device .

    _mContext = alcCreateContext(_mDevice, contextAttribs);alcMakeContextCurrent(_mContext);

    Hm alcCreateContext s to ra context cho thit b, trong _mDevicel id ca thit bm thanh. Thng thng in thoi Android ch c mtchip xl m thanh. Do ta gn _mDevice = 0.

    Hm alcMakeContextCurrent s gn context va to thnh context hinti.

    2.2.2. To i tng Audio to c i tng Audio, ta cn c audio data. Audio data sc

    load t file

    Trc tin ta load d liu vo buffer:

    alGenBuffers(1, &bufferID);alBufferData(bufferID, format, auData, auDataSize,

    samplesPerSec);

    Sau ta to ra mt source v gn buffer va to vo source ny.

    alGenSources(1, &sourceID);alSourcei(sourceID, AL_BUFFER, bufferID);

    2.2.3. Chi m thanh.Trc khi chi m thanh, ta phi ch ra rng ta ang s dng source .Sau gi hm chi m thanh.

    if (isLoop) {alSourcei(sourceID, AL_LOOPING, AL_TRUE);

  • 7/31/2019 98013073 Bao Cao Do an Mon Hoc Chuyen Nganh

    18/35

    Bo co mn n mn hc chuyn ngnh Trang 15

    } else {alSourcei(sourceID, AL_LOOPING, AL_FALSE);

    }alSourcePlay(sourceID);

    Tng t cho l cc hm tm dng v dng m thanh.

    2.3. NDKNDK l mt tp hp cc cng c cho php nhng code C/C++ vo ngdng Android. Code C/C++ sc bin dch ra thnh nhng th vinLinux. Nhng on code vit bng C/C++ sc chy trc tip khng quamy o Dalvik, do lm tng tc thc thi ca chng trnh. Bn cnh, c nhiu th vin c vit bng C/C++, do c th s dng cnhng th vin ny ngay trn Android.

    NDK cung cp mt s h trsau:

    o Mt tp hp cc Toos v files build dng to ra cc th vin m tsources C v C++.

    o Cch nhng cc th vin m vo mt file (.apk) gi ng dng m chngta c th chy c trn cc thit b android.

    o Ti liu, v d v mt shng dn.o Mt bcc th vin C/C++ c h trtrong tt c cc phin bn sau ny

    ca hiu hnh Android, bt u t Android 1.5. T phin bn 2.3 tri,hiu hnh android cn h trthem cch vit Activity bng C/C++.

    Khi no th dng native code?

    Khng phi khi no NDK cng u c li vi tt c cc ng dng. V vychng ta cn cn bng li ch vi nhc im ca n. c bit trong trnghp s dng native code khng lm tng hiu sut thc thi m lm tng sphc tp ca ng dng. Ni chung ch nn s dng native lp trnh nu n lcn thit i vi ng dng ca mnh khng nn v chng ta thch chng trnhtrong C/C++.

    - Framework Android cung cp 2 cch dng native code : Dng Androidframework vit ng dng ca mnh v dng JNI truy cp API c cungcp bi Android NDK. K thut ny cho php chng ta tn dng cc tin chca Android Framework, nhng vn cho php chng ta vit native code khicn thit. Chng ta c th ci ng dng s dng Native code thng qua JNItrn thit b chy android 1.5 hoc mi hn.

  • 7/31/2019 98013073 Bao Cao Do an Mon Hoc Chuyen Nganh

    19/35

    Bo co mn n mn hc chuyn ngnh Trang 16

    - Vit mt native activity, cho php chng ta thc hin ci t vng i cang dng android trn native code. Android SDK cung cp lp NativeActivitycho php chng ta ci t vng i thng qua cc hm sau (onCreate(),onResume(), ..).

    - Development tool NDK gm mt b cng c(compilers, linkers, ...) dng to ra m nh phn cho b vi x l ARM trn hiu hnh Linux, OS X, vWindows(vi Cygwin). Cung cp mt b headers ca h thng cho cc APInative chun m c m bo c h trtrong tt c cc phin bn sau nyca nn tng:

    OpenGL ES 1.1 v OpenGL ES 2.0(th vin graphics library) headers. Libjnigraphics (Pixel buffer access) header(for Android 2.2. tr ln). Th vin OpenSL ES native audio. API cho ng dng android.

    NDK cng cung cp mt h thng bin dch gip chng ta lm vic hiu qu vim ngun ca mnh m khng cn iu khin chi tit cc cng c/ nn tng/ CPU/ABI. Ngi dng ch cn to cc file bin dch n gin m t m ngun camnh m trong ng dng Android s dng. V h thng bin dch s s dng ccfile ny bin dch, v to ra mt th vin ng b trc tip vo trong d n camnh.

    H thng v phn mm yu cu:

    - Hon tt ci t mt Android SDK (bao gm tt c cc ph thuc).

    - Phin bn SDK Android 1.5 tri.

    - Hiu hnh h tr: Window XP (32-bit) hoc vista (32- hoc 64 -bit), Mac Osx10.4.8 hoc hn (i vi X86), Linux (32 hoc 64 bit, th nghim trn LinuxUbuntu Dapper Drake).

    - Cc cng c Cn Thit:

    + i vi tt c cc nn tng, bt buc GNU Make 3.81 trln.+ i vi Window, bt buc Cygwin 1.7 trln. NDK khng lm vic viCygwin 1.5.

    - Nn tng Android tng thch.

  • 7/31/2019 98013073 Bao Cao Do an Mon Hoc Chuyen Nganh

    20/35

    Bo co mn n mn hc chuyn ngnh Trang 17

    Cc th vin native c to ra bi Android NDK ch c th s dng trn cc thitb Android phin bn 1.5 tri. iu ny l do B cng cv ABI lin quan nnhng thay i lm cho cc th vin native khng tng thch vi hnh nh hthng 1.0 v 1.1. V l do ny nn chng ta nn s dng th vin native c to ra

    vi NDK trong ng dng m c trin khai trn cc thit b chy trn nn tngandroid 1.5 tri.

    m bo tnh tng thch, mt ng dng dng th vin native to ra vi NDKphi khai bo phn t trong file mainfese ca n, vi mt gi tr thuctnh ca android:minSdkVersion 3 hoc ln hn.

    V d:

    ...

    - Hot ng ca JNI v quy trnh bin dch nh chng ta u bit, ng dngandroid chy trn nn chnh l Java. Mun chy C/C++ ta c hai gii php:

    + S dng JNI: t android 1.5 tr v sau.

    + S dng Native Activity: t android 2.3 tr v sau. Native Activity l phng nla chn tt hn, bi v chng trnh s khng tn chi ph giao dch gia my o

    Java v C/C++. Tuy nhin, ti thi im hin ti, s lng cc thit b h trAndroid 2.3 tng i him nn chng ta s s dng gii php JNI.

    - Hot ng ca JNI c m t nh sau:

    + Cc phng thc JNI c nh du bng t kha native.

    + Cc phng thc ny c vit bng C++ v bin dch ra th vin lin kt ng.so.

    + Th vin lin kt ng c Load ln trong chng trnh Java bng li giSystem.loadLibrary(...);

    + Khi trong chng trnh Java c li gi ti hm native, my o Java s tm kimtrong th vin ng xem hm ny c ci t cha, sau cc i tng Javas c chuyn thnh C++ thc hin li gi ti C++.

  • 7/31/2019 98013073 Bao Cao Do an Mon Hoc Chuyen Nganh

    21/35

    Bo co mn n mn hc chuyn ngnh Trang 18

    + Trong C++ cng cung cp cc th vin cho php giao tip ti my o v chngtrnh Java.

    - Khai bo phng thc native trong lp Java.

    - Khai bo v ci t phng thc ny trong C. (Nu C++ th phi s dng externC trnh sa tn trong C++). Quy tc t tn hm nh sau:

    Sau dng NDK bin dch m ngun C thnh th vin lin kt ng v thvin ny c t ng b vo th mc lib ca d n android. Vit chng trnh

    java gi cc hm native ny. Dng b SDK bin dch thnh ng dng apk.

    - Do cc bc s dng NDK bin dch c thc hin trn du nhc lnh, do chngta s to tp tin lnh thc hin iu ny.

    2.4. Lu tr thng tin.

    Thng tin trong game trn Android c thc lu tr trn SQLite hoc trnth nh. Lu tr trn database s c tnh bo mt cao hn, cht chhn. Cn lutr trn th nhs dbackup hn, d chuyn sang cc thit bkhc hn.

    Ngoi hai cch lu trthng tin nh trn, Android cn cung cp cch lu trthng tin thng qua i tng SharedReference. Thng tin lu qua i tng nysc lu ti th mc ca ng dng, nm trong b nhtrong ca my.

    *L dliu bng SQLite:Trong Android , c sd liu m bn to cho 1 ng dng th chng dng cquyn truy cp v s dng, cc ng dng khc th khng. Khi c to, c sd liu SQLite c cha trong th mc /data/data//databases.

  • 7/31/2019 98013073 Bao Cao Do an Mon Hoc Chuyen Nganh

    22/35

    Bo co mn n mn hc chuyn ngnh Trang 19

    C bc thc hin vi CSDL:1. To 1 CSDL (thng thng ch cn lm 1 ln)2. MCSDL 3. Thm gi tr vo trong table

    4. Truy vn.5. ng CSDL

    1. To dliuu tin add 1 class DBAdapter x l tt ccc thao tc lin quan nCSDL.

    public static final String KEY_ID = "_id";

    public static final String KEY_NAME = "name";

    private DatabaseHelper mDbHelper;

    private SQLiteDatabase mDB;

    private static final String DATABASE_CREATE = "create table users (_id integerprimary key autoincrement, "

    + "name text not null);";

    private static final String DATABASE_NAME = "Database_Demo";

    private static final String DATABASE_TABLE = "users";

    private static final int DATABASE_VERSION = 2;

    private final Context mContext;

    To 1 lp bn trong DBAdapter c extend t lp SQLiteOpenHelper, override 2phng thc onCreate() v onUpgrade() qun l vic to CSDL v version ca

    CSDL .

    private static class DatabaseHelper extends SQLiteOpenHelper{

    public DatabaseHelper(Context context, String name,

    CursorFactory factory, int version) {

  • 7/31/2019 98013073 Bao Cao Do an Mon Hoc Chuyen Nganh

    23/35

    Bo co mn n mn hc chuyn ngnh Trang 20

    super(context, name, factory, version);

    // TODO Auto-generated constructor stub

    }

    @Override

    public void onCreate(SQLiteDatabase db) {

    // TODO Auto-generated method stub

    db.execSQL(DATABASE_CREATE);

    }

    @Override

    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {

    // TODO Auto-generated method stub

    Log.i(TAG, "Upgrading DB");

    db.execSQL("DROP TABLE IF EXISTS users");

    onCreate(db);

    }

    }

    2. MCSDL

    public DBAdapter open()

    {

    mDbHelper = new DatabaseHelper(mContext, DATABASE_NAME, null,DATABASE_VERSION);

    mDB = mDbHelper.getWritableDatabase();

    return this;

    }

    3. Thm gi tr vo CSDL

    public long createUser(String name){

  • 7/31/2019 98013073 Bao Cao Do an Mon Hoc Chuyen Nganh

    24/35

    Bo co mn n mn hc chuyn ngnh Trang 21

    ContentValues inititalValues = new ContentValues();

    inititalValues.put(KEY_NAME, name);

    return mDB.insert(DATABASE_TABLE, null, inititalValues);

    }

    4. Truy vnTa c th get ton b data hoc c th get data theo ID ( tin cho vic chnh sahay cp nht thng tin ca tng bn ghi).

    public Cursor getAllUsers(){

    return mDB.query(DATABASE_TABLE, new String[] {KEY_ID, KEY_NAME}, null,null, null, null, null);

    }

    Cn rt nhiu cc thao tc nh sa, xa, update.... bn ghi, tt c cc chc nng u c cung cp bi lp SQLiteDatabase, ta ch cn c th ha bng cc cutruy vn l c.

    5. CSDL

    public void close(){

    mDbHelper.close();

    }

    6. Sdng CSDL

    test CSDL m bn va to, ta c ththm 1 vi dng code thm 1 user vhin th CSDL ln mn hnh thng qua lp Activity ban u:

    V dy ta to mi 1 user thng qua cu lnh mDB.createUser("Username");sau

    public void onCreate(Bundle savedInstanceState) {

    super.onCreate(savedInstanceState);

  • 7/31/2019 98013073 Bao Cao Do an Mon Hoc Chuyen Nganh

    25/35

    Bo co mn n mn hc chuyn ngnh Trang 22

    setContentView(R.layout.main);

    mDB = new DBAdapter(this);

    mDB.open();

    mDB.createUser("Do Minh Thong");

    getData();

    }

    private void getData(){

    mCursor = mDB.getAllUsers();

    startManagingCursor(mCursor);

    String[] from = new String[]{DBAdapter.KEY_NAME};

    int[] to = new int[] {R.id.text1};

    SimpleCursorAdapter users = new SimpleCursorAdapter(this,R.layout.users_row, mCursor, from, to);

    setListAdapter(users);

    }

    2.5. Cc th vin khc.- libzip : c file zip, gip c d liu t file apk.- libpng : c file png thnh d liu th ca hnh nh.

    2.6. Vng i ca mt game.Nh chng ta bit, game l mt chu trnh khp kn, lp i lp li. Banu l nhn s kin input. Sau xl tng ng trong hm Update(), cuicng l v n ln mn hnh thng qua hm Render().Game trn Android cng c cu trc tng t.N cng bao gm nhnghm xl input, update, render, nhng c gi tng.

  • 7/31/2019 98013073 Bao Cao Do an Mon Hoc Chuyen Nganh

    26/35

    Bo co mn n mn hc chuyn ngnh Trang 23

    Hm x l s kin:

    @Overridepublicboolean onTouchEvent(MotionEvent event) {

    switch (event.getAction() & MotionEvent.ACTION_MASK) {case MotionEvent.ACTION_DOWN:

    NativeLib.touchdown((short)event.getX(),(short)event.getY());

    break;case MotionEvent.ACTION_UP:

    NativeLib.touchup((short)event.getX(),(short)event.getY());

    break;case MotionEvent.ACTION_MOVE:NativeLib.touchmove((short)event.getX(),

    (short)event.getY());break;

    }returntrue;

    }

    Hm update v render:

    publicvoidonDrawFrame(GL10 gl) {if(KimCuongActivity.isFirstInitApp == false){

    if(KimCuongActivity.isNeedReloadResource ==true){

    NativeLib.reloadTexture();KimCuongActivity.isNeedReloadResource =

    false;}

    }else {

    KimCuongActivity.isFirstInitApp = false;

  • 7/31/2019 98013073 Bao Cao Do an Mon Hoc Chuyen Nganh

    27/35

    Bo co mn n mn hc chuyn ngnh Trang 24

    }

    NativeLib.update();NativeLib.render();

    }

    3. Nhng khc bit so gia lp trnh game trn thit bdi ng v trnmy tnh.

    Mc d nhng nm gn y, in thoi thng minh ang ngy cng gn vi mytnh hn vi mn hnh rng hn, CPU mnh hn, RAM nhiu hn, nhng inthoi vn c nhng hn ch nht nh. iu ny cng nh hng khng nhn

    cng vic lp trnh phn mm trn Android.

    Windows Di ngKhnng Khnng chy c cc ng

    dng ln, do CPU mnh,RAM cao, ha mnh, tcn phi ch n vic tiu.

    ng dng phi c ti unhiu hn, thch ng viCPU, RAM v GPU hn ch.Cc thit b thng thnghin nay c CPU khong 1 -1.5GHz, Ram 1GB. Do khi lp trnh game cng philu n vn ny, c bitl game 3D.

    Nhp xut Thng nhp liu bng chutv bn phm. Vic nhp liurt d dng. Mn hnh hinth ln.

    S dng mn hnh cm ng thao tc, mn hnh nh. Vvy cn phi lu khi thitk c c mt giao din

  • 7/31/2019 98013073 Bao Cao Do an Mon Hoc Chuyen Nganh

    28/35

    Bo co mn n mn hc chuyn ngnh Trang 25

    d nhp xut thng tin. Tuyvy, vic s dng mn hnhcm ng cng c nhng imc li. V dnh thao tc aim gip ta to ra nhiu

    cch x l c o hn.Mn hnh Mn hnh rng, phn gii

    cao, d dng thit k giaodin. Cc ca scng c thfix kch thc ddng hn.

    Mn hnh nh, phn giicao thp ty phn khc inthoi, phi ch nhiu khithit k giao din. V dnhnt phi lm to hn, b trgiao din hp l hn.

    Ngun in Dng in li hoc laptopth pin c dung lng cao (dokch thc ln), phn mm

    chy c lu hn.

    Cng ngh CPU, GPU phttrin rt nhanh, nhng cngngh pin hu nh khng pht

    trin thm. Do pin dunglng thp so vi nhu cuthc t, tiu tn nhiu pin khiCPU x l nng, s dngWifi, 3G. Cn gim vic sdng cc ti nguyn ny timc thp nht

    nh v Thng khng c kh nngnh v (nu mun c th phign ngoi).

    C kh nng nh v GPS.Tn dng c khnng nyca in thoi s to ra c

    nhiu ng dng hu ch nhnh v, dn ng, tm aim

    Tnh nng cain thoi

    Khng c cc tnh nng cain thoi nh nghe, gi,nhn tin.

    Cc ng dng qun l danhb, cuc gi, tin nhn rtnhiu. Tuy nhin, bn cnh cng cn lu n vicx l interrupt khi c cucgi n, hay tin nhn ti.

  • 7/31/2019 98013073 Bao Cao Do an Mon Hoc Chuyen Nganh

    29/35

    Bo co mn n mn hc chuyn ngnh Trang 26

    4. Nhng khc bit so gia lp trnh game trn Android v cc nntng di ng khc.

    Hin nay c rt nhiu hiu hnh di ng vn ang c pht trin v s dng.Tuy vy, hin nay ba hiu hnh c nh gi cao nht v khnng pht trintrong tng lai l Android, iOS v Windows Phone. Do nhng skhc nhau cbn v nhn, mc tiu hng n, dng in thoi h tr, nn vic lp trnh ng

    dng gia nhng hiu hnh ny cng c nhng khc nhau c bn.

    Android iOS Windows PhoneCu hnh in thoi Android

    c loi cu hnht thp n cao, vinhng s khc nhaugia CPU, GPU,mn hnh, , khilp trnh phi lu

    n vic h trnhng cu hnh no.

    Cu hnh kh cao, crt t dng in thoi,nn khng b phnmnh, d dng cholp trnh vin.

    C quy nh cuhnh ti thiu.Cu hnh kh caov u nhau, nnkhi lp trnhkhng cn nhiuphin bn. Tuy

    nhin, sau ny ckh nng phnmnh do chnhsch mi caMicrosoft.

    Mn hnh H tr nhiu loimn hnh, khcnhau v phngii, a im, gykh khn trong vic

    thit k, c bit llp trnh game.

    Mn hnh kch thckh u nhau, ddng trong thit kphn mm.

    C quy nh khnng ti thiu camn hnh v phn gii, aim d dng

    trong thit kphn mm. Tuynhin sau nycng c th s bphn mnh.

    Ngn nglp trnh

    Java, C, C++ Objective C C# (bn Tango htrthm C++).

    a nhim H tr a nhim, Ch mt s phin bn H tr a nhim

  • 7/31/2019 98013073 Bao Cao Do an Mon Hoc Chuyen Nganh

    30/35

    Bo co mn n mn hc chuyn ngnh Trang 27

    chy nhiu ngdng cng lc.

    v sau mi h tranhim

    tt.

    Nhn Linux Lai gia (monolithicv microkernel).

    Windows CE.

    Cng c

    pht trin

    Eclipse, Netbean

    Android SDK,NDK SDK.

    Mac OS, Xcode. Microsoft Visual

    Studio 2010,Windows Vistatr ln, WindowsPhone SDK.

    5. Gii thiu game Kim cng5.1. Gii thiu c bn

    Game kim cng l mt game rt ph bin trong th gii game hin nay.Ngi chi sc rn luyn s nhanh tay, nhanh mt bng cch tm ranhng v tr c thn c, nhm t c im s cao nht.

    Phin bn game Kim cng ny vi nhiu ci tin vcch chi, giao dinphong ph, mi l, nhiu loi Kim cng c bit, sgip ngi chikhng b nhm chn.

    5.2. Giao din ngi dng.

  • 7/31/2019 98013073 Bao Cao Do an Mon Hoc Chuyen Nganh

    31/35

    Bo co mn n mn hc chuyn ngnh Trang 28

    Giao din mu v menu chnh

  • 7/31/2019 98013073 Bao Cao Do an Mon Hoc Chuyen Nganh

    32/35

    Bo co mn n mn hc chuyn ngnh Trang 29

    Giao din chn mn, sau khi chn o, ngi chi tip tc chn Level

    Mn hnh khi ang chi v menu khi nhn nt Ty chn

    5.3. Cch chi.Ngi chi di chuyn nhng vin kim cngsao cho to ra ba thng hng trln. Lcny nhng vin kim cng s bn.

    Bn di ca nhng vin kim cng cnhng c kha. Kha l nhng c muxanh dng, vi m nht khc nhau,tng ng vi mc kha khc nhau. Khi

    ngi chi n nhng vin kim cng, kha nhng bn di sc ph. Khi ph thnhcng nhng vin kim cng ny th qua mn.

    Mt trong nhng im kh ca tr chi, lnhng . Nhng ny khng cha ckim cng m cho php kim cng i qua. N c tc dng cn trkh

  • 7/31/2019 98013073 Bao Cao Do an Mon Hoc Chuyen Nganh

    33/35

    Bo co mn n mn hc chuyn ngnh Trang 30

    nng n kim cng ca ngi chi, lm tng kh ca tr chi ln ngk.

    5.4. Tnh nng m rng (item, mission)Khi ngi chi n c bn vin kim cng thng hng trln, s c mt

    vin kim cng c bit xut hin. Hin titrong phin bn ny c hai loi kim cngc bit l:

    - Kim cng n : Khi n c bn vin kimcng thng hng, s xut hin vin kimcng n. Khi ngi chi n vin kimcng ny, tm vin kim cng xungquanh n s b n theo.

    - Kim cng st : Khi n c 5 vin kimcng thng hng, vin kim cng st sxut hin. Khi ngi chi n vin kimcng st ny, hai tia st ngang, dc s xut hin, ph i nhng vinkim cng theo hai hng ngang dc.

    Ngoi ra, ngi chi cn c th gii nhng mission t c im caohn. Pha trn ca game c lit k ra mt lot nhng loi kim cng mngi chi phi n c theo ng th t. Nu gii c mission, ngi

    chi st c mc im cao v c th thch vi mission kh hn.

    5.5. Nhng im hp dn trong game.

    - Cch chi mi l, so vi nhng game kim cng cin.Ngi chikhng ch c nhim vn m phi tnh ton sao cho ph c nhiulock, gii c nhiu nhim vv t c nhiu im

    - B resource vi nhiu loi khc nhau nh tri cy, bnh ko, Ngoira sau ny cn c thc b xung thm.

    - Nhiu mn chi vi kh tng dn. Game hin ti c tt csu o,mi o gm chn mn chi. Cc o s c nhng b Resource khcnhau, v cc level cng c cc bn lock khc nhau.

  • 7/31/2019 98013073 Bao Cao Do an Mon Hoc Chuyen Nganh

    34/35

    Bo co mn n mn hc chuyn ngnh Trang 31

    - Chy ua vi thi gian ph kha, qua mn.Ngi chi s c mtkhong thi gian nht nh ph kha. Nu ph kha thnh cng squa mn k tip. Nu tht bi s phi chi mn .

  • 7/31/2019 98013073 Bao Cao Do an Mon Hoc Chuyen Nganh

    35/35

    TNG KT

    y l mt th loi game ph bin, v vy thu ht ngi chi, ta cn phi lm thmnhiu tnh nng mi l. Game trn y tuy c nhiu tnh nng so vi game kim cng

    cn bn, tuy nhin vn cn rt nhiu tnh nng c th pht trin sau ny. Sau ny, ta cth thm vo game nhiu cch chi khc nhau, nhiu nhim v khc nhau, yu cu ngichi phi t duy nhiu hn, b thi gian nhiu hn.

    Qua vic lm game, nhm cng tm hiu c nhiu iu b ch v k thut lp trnhgame trn Android, lm tin cho vic lp trnh game trn Android sau ny. Nhng kthut nhm tm hiu c kh mi m, v rt hu ch. Nhng kin thc khng ch pdng cho mn hc ny m cn c s dng trong thi gian sp ti.