維京礦工手機(jī)游戲系統(tǒng)_第1頁
維京礦工手機(jī)游戲系統(tǒng)_第2頁
維京礦工手機(jī)游戲系統(tǒng)_第3頁
維京礦工手機(jī)游戲系統(tǒng)_第4頁
維京礦工手機(jī)游戲系統(tǒng)_第5頁
已閱讀5頁,還剩52頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

河南城建學(xué)院本科畢業(yè)設(shè)計(jì)(論文)AbstractA畢業(yè)設(shè)計(jì)[論文]題目:維京礦工手機(jī)游戲系統(tǒng)學(xué)院:計(jì)算機(jī)科學(xué)與工程專業(yè):計(jì)算機(jī)科學(xué)與技術(shù)姓名:學(xué)號(hào):指導(dǎo)老師:"完成時(shí)間:2013年5月28號(hào)河南城建學(xué)院本科畢業(yè)設(shè)計(jì)(論文)摘要河南城建學(xué)院本科畢業(yè)設(shè)計(jì)(論文) 第三章河南城建學(xué)院本科畢業(yè)設(shè)計(jì)(論文) 參考文獻(xiàn)第3章維京礦工game中對(duì)象本章節(jié)主要是對(duì)項(xiàng)目中對(duì)象的分析。Java是面向?qū)ο蟮某绦蛟O(shè)計(jì),具有繼承、封裝等特點(diǎn)。為提高代碼的復(fù)用性,此處將繩子,鉤子,寶石等進(jìn)行單獨(dú)的封裝。通過本章節(jié)的分析我們可以系統(tǒng)進(jìn)一步了解代碼的性與復(fù)用性。3.1對(duì)繩子的定義及分析Java是面向?qū)ο蟮脑O(shè)計(jì)語言。在進(jìn)行編程時(shí),需要對(duì)相同功能進(jìn)行盡可能的抽取與封裝,從而提高代碼的復(fù)用性。因此對(duì)于該軟件,分為幾個(gè)對(duì)象進(jìn)行如下封裝。publicclassBlast{定義繩子的橫縱坐標(biāo) privateinty; privateintx; privateAnimationblast; publicBlast(intx,inty){ this.x=x; this.y=y; blast=Animation.getAnimation("blast_28"); }定義基本方法: publicvoidlogic(){ if(blast!=null){ blast.loopFrame(GameCanvas.timeCha); } if(blast.isLastFrame()){ blast=null; GameView.gameView.blastV.remove(this); } }定義draw方法 publicvoiddraw(Canvasg){ if(blast!=null){ blast.drawFrame(x,y,g); } }}3.2對(duì)鉤子的定義及分析對(duì)鉤子類進(jìn)行定義:鉤子可以進(jìn)行不動(dòng),向外,向里走,旋轉(zhuǎn)角度進(jìn)行定義。同時(shí)對(duì)繩子的移動(dòng)速度進(jìn)行控制,當(dāng)繩子速度達(dá)到一定速度時(shí),會(huì)變成紅色的。此處變量均使用final關(guān)鍵字進(jìn)行修飾,定義后不再被改變。定義hook方法,加載圖片xiaogozi.png。 publicHook(){ imgHook=ImageManager.getBitmap("images/xiaogouzi.png"); x=(ImageManager.STANDARD_WIDTH-imgHook.getWidth())>>1; y=80+r; }此處ImageManager為AndroidGameEngine中的。該游戲中代碼大量復(fù)用。因此將其單獨(dú)封裝進(jìn)一個(gè)工程中。AndroidGameEngine是為了將游戲中的各種文字,圖片,寫入到手機(jī)中。其中,定義了手機(jī)屏幕的大小,以方便于進(jìn)行適配。定義基本功能和速度,設(shè)置時(shí)間為1分鐘: publicvoidlogic(){ if(count==1){ speed=20; if(speedstartTime==0){ rota=5; speedstartTime=System.currentTimeMillis(); } longendTime=System.currentTimeMillis(); if((endTime-speedstartTime)%60>=1000){ rota=3; speed=12; } } switch(state){ caseSTAND: //System.out.println(rotate); GameView.gameView.buttons[3].is_clicked=false; if(count==0){ speed=12; }elseif(count==1){ speed=20; } rotate+=rota; r=20; y=80+r;對(duì)于移動(dòng)的繩子,根據(jù)坐標(biāo)來判斷其移動(dòng)的位置。 //橫向偏移量 //dx=-(int)(r*Math.sin(rotate*Math.PI/180)); //縱向偏移量 //dy=-(int)(r-r*Math.cos(rotate*Math.PI/180)); dx1=-(int)((r+imgHook.getHeight())*Math.sin(rotate*Math.PI /180)); dy1=-(int)((r+imgHook.getHeight())-(r+imgHook.getHeight()) *Math.cos(rotate*Math.PI/180)); System.out.println(dx1+"====="+dy1);設(shè)置半徑大小,用來判斷鉤子是否夠到寶石,方便進(jìn)行撈取。 if(rotate>=75){ rotate=75; rota=-rota; }elseif(rotate<=-75){ rotate=-75; rota=-rota; } //matrix.setRotate(rotate,ImageManager.STANDARD_WIDTH>>1,80); break; caseMOVE_OUT: //半徑增加 r+=speed; y=80+r; //dx=-(int)(r*Math.sin(rotate*Math.PI/180)); //dy=-(int)(r-r*Math.cos(rotate*Math.PI/180)); dx1=-(int)((r+imgHook.getHeight())*Math.sin(rotate*Math.PI /180)); dy1=-(int)((r+imgHook.getHeight())-(r+imgHook.getHeight()) *Math.cos(rotate*Math.PI/180)); if(r>=ImageManager.STANDARD_HEIGHT){ state=MOVE_IN; GameView.player.setState((byte)5); } collide(); break; caseMOVE_IN: in(); if(r<20){ r=20; y=80+r; //橫向偏移量 //dx=-(int)(r*Math.sin(rotate*Math.PI/180)); //縱向偏移量 //dy=-(int)(r-r*Math.cos(rotate*Math.PI/180)); dx1=-(int)((r+imgHook.getHeight())*Math.sin(rotate *Math.PI/180)); dy1=-(int)((r+imgHook.getHeight())-(r+imgHook .getHeight())*Math.cos(rotate*Math.PI/180)); state=STAND; if(GameView.player.state==5){ GameView.player.setState((byte)0); } }當(dāng)半徑小于上面的值的時(shí)候,則判斷為發(fā)生了撞機(jī)事件,從而判斷其為抓起對(duì)象。 if(collide){ speed=startSpeed-tempMonster.getZhongliang()*2; if(r<25){//當(dāng)半徑小于25的時(shí)候移除抓取對(duì)象 collide=false; System.out.println(tempMonster.getGroup()); if(tempMonster.getGroup().equals("qiandai")){ intr=(GameView.gameView.random.nextInt()>>>1)%10; System.out.println(""+r); if(r==0||r==1){ jiaBei=1; }elseif(r==2||r==3){ GameView.gameView.currentTime=60; }elseif(r==4||r==5){ GameView.gameView.daliCount=1; count=1; speedstartTime=0; }else{ if(tempMonster.getGroup().equals("hongzhu") ||tempMonster.getGroup().equals("jinbi") ||tempMonster.getGroup().equals("lvzhu") ||tempMonster.getGroup().equals("qiandai")){ GameView.gameView.currentMoney+=200; GameView.gameView.moreAddMoney=200; }else{ GameView.gameView.currentMoney+=tempMonster .getValue(); GameView.gameView.addMoney=tempMonster .getValue(); } } } if(jiaBei==0){ if(tempMonster.getGroup().equals("hongzhu") ||tempMonster.getGroup().equals("jinbi") ||tempMonster.getGroup().equals("lvzhu") ||tempMonster.getGroup().equals("qiandai")){ GameView.gameView.currentMoney+=200; GameView.gameView.moreAddMoney=200; }else{ GameView.gameView.currentMoney+=tempMonster .getValue(); GameView.gameView.addMoney=tempMonster.getValue(); } }else{ if(tempMonster.getGroup().equals("hongzhu") ||tempMonster.getGroup().equals("jinbi") ||tempMonster.getGroup().equals("lvzhu") ||tempMonster.getGroup().equals("qiandai")){ GameView.gameView.currentMoney+=400; GameView.gameView.moreAddMoney=400; }else{ GameView.gameView.currentMoney+=tempMonster .getValue(); GameView.gameView.addMoney=tempMonster.getValue(); } } if(tempMonster.getValue()<100){ if(SoundManager1.getInstance().soundOn){ SoundManager1.getInstance().play(4,0); } GameView.player.setState((byte)2); }elseif(tempMonster.getValue()>=300){ if(SoundManager1.getInstance().soundOn){ SoundManager1.getInstance().play(3,0); } GameView.player.setState((byte)3); }elseif(tempMonster.getValue()>=100 &&tempMonster.getValue()<300){ //加分音效 if(SoundManager1.getInstance().soundOn){ SoundManager1.getInstance().play(1,0);//點(diǎn)擊卡片發(fā)聲 } } removeTarget(); } } break; } } //鉤子上升時(shí)的量的變化 privatevoidin(){ //半徑減少 r-=speed; y=80+r; //橫向偏移量 //dx=-(int)(r*Math.sin(rotate*Math.PI/180)); //縱向偏移量 //dy=-(int)(r-r*Math.cos(rotate*Math.PI/180)); dx1=-(int)((r+imgHook.getHeight())*Math.sin(rotate*Math.PI /180)); dy1=-(int)((r+imgHook.getHeight())-(r+imgHook.getHeight()) *Math.cos(rotate*Math.PI/180)); } //判斷碰撞的方法 publicvoidcollide(){ VectorvMap=GameView.gameView.getActors(); for(inti=0;i<vMap.size();i++){ Actorent=(Actor)vMap.elementAt(i); if(entinstanceofMonster){ Monstermonster=(Monster)ent; if(collide==false &&monster.inRange( (x+(imgHook.getWidth()>>1)+dx1),y +imgHook.getHeight()+dy1)){ tempMonster=monster; collide=true; in(); monster.state=monster.move; state=MOVE_IN; GameView.player.setState((byte)5); } } } }每一幅圖片,在運(yùn)行時(shí)都將被畫到模擬器中,而繩子也是如此。因此我們定義了一個(gè)draw的方法。用來表示畫繩子。而為了表示加速與否,將繩子定義為黑紅二色。黑的為正常時(shí)候的顏色,紅色則為加速后的顏色: publicvoiddraw(Canvasg){ //畫黑色的繩子 if(count==0){ Graphics.PAINT.setColor(Color.BLACK); Graphics.PAINT.setStrokeWidth(2); //g.drawLine((ImageManager.STANDARD_WIDTH>>1),80, //x+(imgHook.getWidth()>>1)+(float)dx,y+(float)dy, //Graphics.PAINT); //畫紅色的繩子 }elseif(count==1){ Graphics.PAINT.setColor(Color.RED); Graphics.PAINT.setStrokeWidth(2); //g.drawLine((ImageManager.STANDARD_WIDTH>>1),80, //x+(imgHook.getWidth()>>1)+(float)dx,y+(float)dy, //Graphics.PAINT); } //g.setMatrix(matrix);對(duì)于鉤子,在存在時(shí)也應(yīng)畫出。其實(shí)PAINT為new的一個(gè)對(duì)象。此處將其變成這樣,主要是為了寫的時(shí)候簡便。 if(imgHook!=null){//勾子 intcx=ImageManager.STANDARD_WIDTH>>1; g.save(); g.rotate(rotate,cx,80); g.drawLine(cx,80,cx,y+2,Graphics.PAINT); g.drawBitmap(imgHook,x,y,Graphics.PAINT); g.restore(); } //g.setMatrix(null); }鉤子有停止,鉤起,伸出狀態(tài)。每次鉤起物品后,應(yīng)該在返回到一定時(shí)間程度后清除。此處定義tempMonster是Monster的一個(gè)對(duì)象。表示如果有tempMonster,則清除掉。 /***移除鉤子鉤中的物品*/ publicvoidremoveTarget(){ if(tempMonster!=null){ GameView.gameView.getActors().removeElement(tempMonster); tempMonster=null; } }}3.3對(duì)寶物的定義及分析對(duì)于寶物進(jìn)行定義。寶物用于加分?jǐn)?shù)。每種寶石都有一定的值。加到一定額時(shí),判斷過關(guān)與否。為簡單起見,將停止與開始設(shè)為1,2兩個(gè)參數(shù)。而泛型Vector則是為了逐個(gè)遍歷參數(shù)。 publicMonster(intx,inty,Stringgroup,Vector<String>params){ this.group=group; directionAnimations[0]=Animation.getAnimation(group+"_0"); animationCurrent=directionAnimations[0]; value=Integer.parseInt(params.elementAt(0)); zhongliang=Integer.parseInt(params.elementAt(1)); this.x=x; this.y=y; }下面的Camera其實(shí)是為了調(diào)節(jié)手機(jī)模擬器的大小。與當(dāng)前手機(jī)相適應(yīng)。本處接受兩個(gè)參數(shù)。一個(gè)Canvas是指當(dāng)前中用于游戲中的圖片。而Camera是對(duì)手機(jī)模擬器進(jìn)行調(diào)節(jié)。 publicvoiddraw(Canvasg,Cameracamera){ //TODOAuto-generatedmethodstub super.draw(g,camera); }Override是將該方法打上標(biāo)簽。當(dāng)特殊情況時(shí),不再提示。如,當(dāng)其過時(shí)時(shí),可以不再提示。Logic中當(dāng)點(diǎn)擊屏幕時(shí),將會(huì)設(shè)置掛鉤的位置為當(dāng)前掛鉤所在位置。 @Override publicvoidlogic(){ //TODOAuto-generatedmethodstub super.logic(); switch(state){ casemove: setPosition( (int)(GameView.hook.getX() +(GameView.hook.imgHook.getWidth()>>1)+GameView.hook.dx1), (int)(GameView.hook.getY() +GameView.hook.imgHook.getHeight()+GameView.hook.dy1)); break; default: break; } }3.4對(duì)繩子的定義及分析作為操作者礦工,他的功能有很多,例如放鉤子,收鉤子,為方便起見,也將各種動(dòng)作設(shè)置為0~5各種值。具體如下:publicclassPlayer{ publicstaticfinalbytedaiji=0; /***待機(jī)狀態(tài)*/ publicstaticfinalbytezhayan=1; /***眨眼狀態(tài)*/ publicstaticfinalbytejusang=2;/***沮喪*/publicstaticfinalbytehappy=3;/***高興*/ publicstaticfinalbytefanggouzi=4;/***放鉤子*/ publicstaticfinalbyteshougouzi=5;/***收鉤子*/ protectedbytestate=daiji;/**Actor狀態(tài)*/ protectedAnimation[]anis=newAnimation[3]; privateAnimationtempAni; privateintx,y; privateinttime;3.5本章節(jié)總結(jié)本章節(jié)主要是對(duì)該手機(jī)游戲系統(tǒng)中的對(duì)象,如繩子,鉤子,礦工,寶石有個(gè)初步的認(rèn)識(shí),明白要完成的功能,熟悉該軟件的框架結(jié)構(gòu)。本章節(jié)對(duì)game部分對(duì)象模塊進(jìn)行詳述描述,本章節(jié)對(duì)技術(shù)性問題進(jìn)行了初步分析。這些需求也是完成項(xiàng)目必不可少的部分。

第4章維京礦工主流程相關(guān)的類本章節(jié)主要是對(duì)項(xiàng)目的主流程進(jìn)行描述。主要包括程序的返回主菜單,暫停,退出等功能。通過本章節(jié)的分析我們可以系統(tǒng)了解項(xiàng)目的基本流程,使我們更進(jìn)一步了解與主流程相關(guān)的操作應(yīng)該如何設(shè)計(jì)與實(shí)現(xiàn)。4.1主頁面相關(guān)的類主頁面主要是指當(dāng)游戲進(jìn)行到一半時(shí),暫停,返回主頁面,或者是退出游戲程序。這里的主要代碼如下:此處單例模式創(chuàng)建頁面。 publicvoidonCreate(BundlesavedInstanceState){ super.onCreate(savedInstanceState); }此處,當(dāng)值為暫停時(shí),畫面將會(huì)暫停。同時(shí)將會(huì)彈出對(duì)話框。而對(duì)于所有的點(diǎn)擊事件來說,都有按下與松開兩個(gè)事件。 publicbooleanonKeyDown(intkeyCode,KeyEventevent){ if(keyCode==KeyEvent.KEYCODE_BACK){ if(GameView.gameView!=null){ GameView.gameView.pause=true; } showDialog(0); }elseif(keyCode==KeyEvent.KEYCODE_VOLUME_UP){ returnfalse; }elseif(keyCode==KeyEvent.KEYCODE_VOLUME_DOWN){ returnfalse; } returntrue; }暫停后,這被protect修飾,外部訪問需要有足夠的權(quán)限才可以。 protectedvoidonPause(){ super.onPause(); if(GameCanvas.gameCanvas!=null){ if(WelcomeView.index==1){ SoundManager1.getInstance().pauseBackGround(); } if(count==0){ count=1; //GameCanvas.gameCanvas.appendView(newPauseView()); } } System.out.println(""); }監(jiān)聽窗口時(shí)間。在GUI編程中所有的事件都在監(jiān)聽后才能處理。否則,只能顯示,操作時(shí)不會(huì)有任何反應(yīng)。 @Override publicvoidonWindowFocusChanged(booleanhasFocus){ if(hasFocus){ if(WelcomeView.index==1){ count=0; SoundManager1.getInstance().playBackGround(); } if(GameView.gameView!=null){ if(GameView.index==0){ GameView.gameView.pause=false; } } } } publicintgetStreamVolume(){ AudioManagermAudioManager=(AudioManager)getSystemService(Context.AUDIO_SERVICE); returnmAudioManager.getStreamVolume(AudioManager.STREAM_MUSIC); } publicvoidonAdClick(){ //Toast.makeText(this,"onLeaveApplicationcalled!",Toast.LENGTH_LONG) //.show(); } privateAlertDialogdialog; privateAlertDialog.Builderbuilder; protectedDialogonCreateDialog(intid){ builder=newAlertDialog.Builder(this); if(id==0){ dialog=builder .setTitle("提示") .setMessage("是否退出游戲?") .setCancelable(false) .setPositiveButton("是", newDialogInterface.OnClickListener(){ publicvoidonClick(DialogInterfacedialog, intwhich){ newThread(){ publicvoidrun(){ GoldActivity.ylAction.finish(); System.exit(0);//退出游戲 } }.start(); } }) .setNegativeButton("否", newDialogInterface.OnClickListener(){ publicvoidonClick(DialogInterfacedialog, intwhich){ if(GameView.gameView!=null){ GameView.gameView.pause=false; } } }).create(); }elseif(id==1){ dialog=builder .setTitle("提示") .setMessage("是否返回主菜單?") .setCancelable(false) .setPositiveButton("是", newDialogInterface.OnClickListener(){ publicvoidonClick(DialogInterfacedialog, intwhich){ newThread(){ publicvoidrun(){ GameCanvas.gameCanvas .setView(newWelcomeView()); } }.start(); } }) .setNegativeButton("否", newDialogInterface.OnClickListener(){ publicvoidonClick(DialogInterfacedialog, intwhich){ if(GameView.gameView!=null){ GameView.index=0; GameView.gameView.pause=false; } } }).create(); } returndialog; }}4.2本章節(jié)總結(jié)本章節(jié)主要是對(duì)該手機(jī)游戲系統(tǒng)的主流程有個(gè)初步的認(rèn)識(shí),明白要完成的返回,暫停等功能,熟悉該軟件的主要流程。本章節(jié)對(duì)主流程部分模塊進(jìn)行詳述描述。本章節(jié)對(duì)技術(shù)性問題進(jìn)行了進(jìn)一步的分析。這些需求也是完成項(xiàng)目必不可少的部分。

第5章維京礦工與框架相關(guān)的類本章節(jié)主要是對(duì)項(xiàng)目中與框架有關(guān)的類的設(shè)計(jì)與實(shí)現(xiàn)。通過本章節(jié)的分析我們可以系統(tǒng)了解項(xiàng)目中如何優(yōu)化存儲(chǔ),進(jìn)一步熟悉鏈表,泛型等基本方法,通過本章節(jié)的分析我們更加流利的制作。5.1框架中button的類作為Util框架中的組件,可以有如下功能:首先為Button。Java中,Button有點(diǎn)擊,松開的時(shí)間監(jiān)聽機(jī)制。作為觸摸屏的Android手機(jī),可以將整個(gè)屏幕作為一個(gè)大的按鈕來看。按鈕則有點(diǎn)擊和松開兩種情況。代碼中都必須實(shí)現(xiàn)。 rect_btn=newRect(_x,_y,_x+_bitmapNormal.getWidth(),_y+_bitmapNormal.getHeight()); bitmapNormal=_bitmapNormal; bitmapClicked=_bitmapClicked; btn_paint.setStyle(Style.STROKE); btn_paint.setColor(0xffff0000); 對(duì)于游戲來說,完全過關(guān)后,將進(jìn)入循環(huán)狀態(tài),從頭開始。 publicvoidrecycle(){ if(bitmapClicked!=null){ bitmapClicked.recycle(); } if(bitmapNormal!=null){ bitmapNormal.recycle(); } }}5.2框架中控制分?jǐn)?shù)的類對(duì)于游戲中所得的分?jǐn)?shù)以及等級(jí),也需要進(jìn)行控制。這里我們?cè)O(shè)置一個(gè)類,用于對(duì)整個(gè)游戲過程中的得分進(jìn)行控制。在對(duì)文件處理時(shí),要拋出異常。此處將會(huì)對(duì)異常進(jìn)行處理。 publicstaticbooleandeleteRMS(Stringname){ try{SharedPreferencesspf=GoldActivity.ylAction.getSharedPreferences( name,GoldActivity.MODE_PRIVATE); Editoredit=spf.edit(); edit.clear(); mit(); returntrue; }catch(Exceptione){ //TODOAuto-generatedcatchblock e.printStackTrace(); } returnfalse; }Vector為底層數(shù)據(jù)結(jié)構(gòu),已經(jīng)過時(shí),被ArrayList所替代。是數(shù)組型的,可以存儲(chǔ)數(shù)據(jù)。此處將其存儲(chǔ)后并開始遍歷vector。 publicstaticVector<String>getSkillLevel(Stringname){ Stringstr=null; Vector<String>vector=newVector<String>(); try{ SharedPreferencesspf=GoldActivity.ylAction.getSharedPreferences( name,GoldActivity.MODE_PRIVATE); if(spf.getAll().size()==0){ returnnull; } intl=spf.getAll().size(); for(inti=0;i<l;i++){ str=spf.getString(String.valueOf(i),""); if(!vector.contains(str)){ vector.add(str); } } returnvector; }catch(Exceptione){ } returnvector; }5.3框架中控制音效的類在整個(gè)游戲的過程中,我們都設(shè)置了音效,用于增加游戲的趣味性。這里,也應(yīng)該有一個(gè)類,用來控制音樂場景的播放。此處為單例模式,只有一個(gè)地方可以控制音樂的播放。getInstance()就是將對(duì)象new出來之后,外部不能再定義其他的對(duì)象。 publicstaticSoundManager1getInstance(){ if(record==null){ record=newSoundManager1(); } returnrecord; }該方法創(chuàng)建一個(gè)背景音樂。 publicvoidinitSounds(){ mediaPlayer=MediaPlayer.create(GoldActivity.ylAction,R.raw.background); if(mediaPlayer!=null){ mediaPlayer.setLooping(true); } } publicvoidloadSfx(intraw,intID){ //把資源中的音效加載到指定的ID(播放的時(shí)候就對(duì)應(yīng)到這個(gè)ID播放就行了) soundPoolMap.put(ID,soundPool.load(GoldActivity.ylAction,raw,ID)); } publicvoidplay(intsound,intuLoop){ //獲取系統(tǒng)當(dāng)前單量 soundPool.play(soundPoolMap.get(sound),((GoldActivity)GoldActivity.ylAction).getStreamVolume(), ((GoldActivity)GoldActivity.ylAction).getStreamVolume(),1,uLoop,1f); }對(duì)音樂的幾種操作。 //播放背景音樂 publicvoidplayBackGround(){ if(soundOn){ if(mediaPlayer!=null){ mediaPlayer.start(); } } } //關(guān)閉背景音樂 publicvoidstopBackGround(){ if(soundOn==false){ if(mediaPlayer!=null){ mediaPlayer.stop(); } } } //暫停背景音樂 publicvoidpauseBackGround(){ if(soundOn){ if(mediaPlayer!=null){ mediaPlayer.pause(); } } }}5.4框架中寫文字圖片的類對(duì)帶文字的圖片寫入到該游戲中。此處都是對(duì)文件進(jìn)行讀寫的操作。讀寫的操作都需要進(jìn)行異常的處理: publicstaticInputStreamgetResources(Stringpath,Stringdata){ InputStreamis=null; try{ is=GoldActivity.ylAction.getAssets().open(path+data); }catch(IOExceptione){ e.printStackTrace(); } returnis; } publicstaticInputStreamgetResourceAsStream(Stringpath)throwsIOException{ if(path.startsWith("/")){ path=path.substring(1); } returnGoldActivity.ylAction.getAssets().open(path); }寫文件開始通過調(diào)用來實(shí)現(xiàn)圖片的繪制。 publicstaticBitmapcreateImage(byte[]imageButton,intimageOffset,intimageLength){ returnBitmapFactory.decodeByteArray(imageButton,imageOffset,imageLength); } publicstaticvoiddrawRegion(Canvasg,Bitmap[]imgNums,intnum,intx,inty,Paintpaint){ if(imgNums==null){ return; } intindex=0; StringsNum=String.valueOf(num); for(inti=0;i<sNum.length();i++){ charvalue=sNum.charAt(i); index=value-48; g.drawBitmap(imgNums[index],x,y,paint); x+=25; }5.5與視圖相關(guān)的類對(duì)視圖進(jìn)行判斷并繪制: publicvoiddraw(Canvasg){ if(aboutWord!=null){ g.drawBitmap(aboutWord,(ImageManager.STANDARD_WIDTH-aboutWord.getWidth())>>1,((ImageManager.STANDARD_HEIGHT-aboutWord.getHeight())>>1),null); } if(button!=null){ button.draw(g); } } @Override protectedvoidinit(){ Log.d("======","ninininini"); aboutWord=ImageManager.getBitmap("images/guanyuneirong.png"); tuichuImg=ImageManager.getBitmap("images/smalltuichu.png"); button=newButton(tuichuImg,tuichuImg,aboutWord.getWidth()-tuichuImg.getWidth()+((ImageManager.STANDARD_WIDTH-aboutWord.getWidth())>>1)-20,30+(ImageManager.STANDARD_HEIGHT-aboutWord.getHeight())>>1); }創(chuàng)建一個(gè)函數(shù)對(duì)觸屏事件進(jìn)行監(jiān)聽: publicvoidonTouchDownEvent(MotionEventevent,floatxF,floatyF,intx, inty){ if(button!=null){ if(button.isClicked(x,y)){ //加分音效 if(SoundManager1.getInstance().soundOn){ SoundManager1.getInstance().play(5,0);//點(diǎn)擊卡片發(fā)聲} GameCanvas.gameCanvas.closeTopView(); } } }由于篇幅有限我們?cè)诖颂幉辉谧鲞^多的分析。要完成本操作還需要幾個(gè)javabeen對(duì)象。我UserDao等類事使用了接口編程的思想,接口首先是一種規(guī)范,它只定義一些方法,并不實(shí)現(xiàn)。在內(nèi)存中沒有實(shí)力對(duì)象。再者,我認(rèn)為接口和抽象類的另一個(gè)區(qū)別在于,抽象類和它的子類之間應(yīng)該是一般和特殊的關(guān)系,而接口僅僅是它的子類應(yīng)該實(shí)現(xiàn)的一組規(guī)則。(當(dāng)然,有時(shí)也可能存在一般與特殊的關(guān)系,但我們使用接口的目的不在這里)如,交通工具定義成抽象類,汽車、飛機(jī)、輪船定義成子類,是可以接受的,因?yàn)槠嚒w機(jī)、輪船都是一種特殊的交通工具。再譬如Icomparable接口,它只是說,實(shí)現(xiàn)這個(gè)接口的類必須要可以進(jìn)行比較,這是一條規(guī)則。如果Car這個(gè)類實(shí)現(xiàn)了Icomparable,只是說,我們的Car中有一個(gè)方法可以對(duì)兩個(gè)Car的實(shí)例進(jìn)行比較,可能是比哪輛車更貴,也可能比哪輛車更大,這都無所謂,但我們不能說“汽車是一種特殊的可以比較”,這在文法上都不通。“面向接口編程”中的接口是一種思想層面的用于實(shí)現(xiàn)多態(tài)性、提高軟件靈活性和可維護(hù)性的架構(gòu)部件,而具體語言中的“接口”是將這種思想中的部件具體實(shí)施到代碼里的手段。5.6本章總結(jié)通過本章節(jié)的可以系統(tǒng)的了解該游戲軟件的部分的框架結(jié)構(gòu),以及部分功能的實(shí)現(xiàn)。在本系統(tǒng)還有很多不足之處。例如,作為游戲很多地方的代碼都是可以復(fù)用的。而作為Java來說,封裝性是很關(guān)鍵的。那么如何提高代碼的復(fù)用性是個(gè)很關(guān)鍵的問題。需要進(jìn)一步改進(jìn)。在做部分的時(shí)候主要是為了維京礦工游戲部分的實(shí)現(xiàn)。對(duì)于手機(jī)本身的設(shè)置則沒有詳細(xì)的說明。

第6章運(yùn)行結(jié)果演示本章節(jié)主要是對(duì)項(xiàng)目的運(yùn)行結(jié)果進(jìn)行展示。通過展示,讓我們對(duì)游戲的流程有進(jìn)一步的了解,各種使用,功能展示等詳細(xì)的描述。通過本章節(jié)的分析我們可以系統(tǒng)了解項(xiàng)目的基本流程,通過本章節(jié)的分析我們更加流利的制作。6.1結(jié)果視圖1、進(jìn)入維京礦工的主菜單運(yùn)行如下圖4-1頁面。圖4-1主菜單圖4-2幫助頁面2、當(dāng)點(diǎn)擊幫助時(shí),出現(xiàn)如上面圖4-2頁面。3、默認(rèn)是有聲音的,如果不想讓其有聲音,那么點(diǎn)擊音樂圖標(biāo)時(shí),出現(xiàn)靜音模式。如下圖4-3所示。圖4-3靜止聲音圖4-4關(guān)于頁面4、為了將作者的信息顯示出來,我們單獨(dú)弄了一個(gè)頁面用來顯示,如上圖4-4所示。5、在主場流程中,如果出現(xiàn)退出的情況,則會(huì)出現(xiàn)如下4-5頁面。圖4-5提示是否退出游戲圖4-6下一個(gè)頁面6、對(duì)于游戲的開發(fā)的相關(guān)信息,有也小故事來說明。如上圖4-6示。7、當(dāng)進(jìn)入游戲時(shí),會(huì)提示如果要過本關(guān)需要的分?jǐn)?shù)。如下4-7為第一關(guān)的分?jǐn)?shù)。圖4-7第一關(guān)起始頁面圖4-8第一關(guān)頁面8、第一關(guān)的頁面如圖4-8所示。9、當(dāng)挑戰(zhàn)失敗時(shí),會(huì)出現(xiàn)如下圖4-9提示。讓其知道游戲結(jié)束。圖4-9失敗頁面圖4-10成功后從商店購買道具頁面10、當(dāng)?shù)谝魂P(guān)過來后,有足夠的金額,可以購買圖4-10中所示的道具。11、如下圖4-11為購買時(shí)間,進(jìn)行時(shí)間恢復(fù)的圖片。圖4-11購買了時(shí)間的頁面圖4-12返回主菜單頁面12、當(dāng)在游戲中時(shí),可以推出進(jìn)入主菜單,如圖4-12所示。6.2本章總結(jié)通過本章,可以更加清晰明確的看出該游戲的特點(diǎn):絢麗的色彩,多種多樣的功能。簡單操作,趣味性強(qiáng),簡單易懂。是個(gè)非常易于操作和娛樂的游戲項(xiàng)目。不論是在旅行,還是在工作閑暇之余,只需要一部手機(jī),你就可以享受到非常好的游戲娛樂。

結(jié)論此設(shè)計(jì)是我在看視頻的過程中根據(jù)視頻做的一個(gè)項(xiàng)目,用時(shí)7天,由于時(shí)間有限,其中有許多不足。在編寫的過程中也遇到許多問題,例如亂碼問題把我困惑了兩天,由于要實(shí)現(xiàn)數(shù)據(jù)的存取,在不同的平臺(tái)中會(huì)出現(xiàn)亂碼,在上部分我以對(duì)亂碼問題做了簡述。要想做個(gè)項(xiàng)目,系統(tǒng)框架很重,Android有其自己的編程模型。對(duì)于Android的編寫有的類的方法需要傳遞許多參數(shù)。這不得不認(rèn)真閱讀API。如何運(yùn)用已經(jīng)有的代碼也是很重要的,有些方法網(wǎng)上已經(jīng)有了很好的是想方法這里我們就沒有必要自己去寫了,做個(gè)好的項(xiàng)目,學(xué)會(huì)用別人寫好的類方法是很重要的。Android的編寫過程中需要設(shè)計(jì)許多的內(nèi)部類,如何得到內(nèi)部類的對(duì)象,以及在內(nèi)部類如何調(diào)用外部類的屬性和方法也是很重要的。Android為什么會(huì)使用內(nèi)部類,個(gè)人理解是由于內(nèi)部類的hashcode碼很相似,眾所周知hashcode碼在一定程度上可以看變作類的物理地址,估計(jì)是由于這樣地址比較相近,可以快速的讀取數(shù)據(jù)。手機(jī)編程的問題,手機(jī)不是pc機(jī)可以大量的浪費(fèi)內(nèi)存和電量,在手機(jī)的編程中內(nèi)存和耗電量是不得不考慮的問題。可以根據(jù)實(shí)際情況使用一些輕量級(jí)的類以實(shí)現(xiàn)節(jié)省內(nèi)存的目的。手機(jī)的電量有限我們要達(dá)到相同的功能調(diào)用一些不怎么耗電的方法是很重要的。以下是本次設(shè)計(jì)總結(jié)的心得總結(jié):1自定義組件的顯示問題,在寫自定義View的時(shí)候經(jīng)常要對(duì)視圖的X、Y調(diào)整,以達(dá)到預(yù)期的理想位置。因此,通過使用AndroidGameEngine對(duì)代碼進(jìn)行復(fù)用,大大提高了代碼復(fù)用性。可以講每個(gè)組件的X、Y坐標(biāo)值畫到組件旁邊,這樣很直觀,一看就知道該怎樣調(diào)整。2使用Log來打印日志和進(jìn)行調(diào)試。3使用LogCat視圖,在showView中有LogCat視圖,LogCat視圖會(huì)顯示一些Android仿真器打印出的堆棧信息,對(duì)應(yīng)用的調(diào)試非常有幫助,另外Log打印的日志也在這邊顯示。4使用EmulatorControl視圖,EmulatorControl可以完成一些簡單的設(shè)備操作,比如,模擬來電,短消息。5活用tools目錄下的工具,該目錄在AndroidSDK中都有提供,通過這些工具可以操作Android仿真器,比如,創(chuàng)建一個(gè)虛擬SD卡,將系統(tǒng)中的文件移動(dòng)到虛擬SD中,Android都有提供相應(yīng)的工具,相關(guān)命令可以上網(wǎng)查閱。

參考文獻(xiàn)[1]李觀華,范輝.J2ME在移動(dòng)通信程序中的應(yīng)用.計(jì)算機(jī)應(yīng)用,2003,[2]廖永剛,余冬梅,張秋余.J2ME架構(gòu)與安全機(jī)制的研究.計(jì)算機(jī)程序設(shè)計(jì),2006,[3]張培仁,《基于C語言編程MCS-51單片機(jī)原理與應(yīng)用》,電子工業(yè)出版社[4]EdBurnette.Hello,Android:IntroducingGoogle’sMobileDevelopmentPlatform.PragmaticBookshelf,2008

[5]閻石編,《數(shù)字電子技術(shù)基礎(chǔ)》,

高等教育出版社,2003

[6]康光華,《模擬電子技術(shù)基礎(chǔ)》,高等教育出版社,2003

[7]王勤,《計(jì)算機(jī)控制技術(shù)》,機(jī)械工業(yè)出版社,2003

[8](美)普埃克等著,李鏘等譯,《通信系統(tǒng)原理》(美),電子工業(yè)出版社,20

[9]劉令普,《數(shù)字信號(hào)處理》,哈爾濱工業(yè)大學(xué)出版社,2002

[10]夏靖波,《嵌入式系統(tǒng)原理與開發(fā)》,西安電子科技大學(xué)出版社,2007

[11]龐特,《C語言嵌入式系統(tǒng)開發(fā)》,中國電力出版社,2006

[12]Saint-Andre,P.StreamingXMLwithJabber/XMPP[J].InInternetcomputing,IEEE,2005

[13]胡偉,《ARM嵌入式系統(tǒng)基礎(chǔ)與實(shí)踐》,北京航空航天大學(xué),2007

[14]孫秋野

孫凱

馮健,《ARM嵌入式系統(tǒng)開發(fā)典型模塊》,人民郵電出版社,2007[15]肖峰陳愛國,無線數(shù)據(jù)采集模塊設(shè)計(jì)[J],現(xiàn)代電子技術(shù),2008

[16]謝述理,一種多通道聲波測井井下數(shù)據(jù)采集模塊[J],聲學(xué)與電子工程,2008

[17]張彪徐曉輝張紅濤,一種無線數(shù)據(jù)采集模塊的設(shè)計(jì)[J],應(yīng)用天地,2006

[18]湯凱為胡蓉,一種智能數(shù)據(jù)采集模塊的設(shè)計(jì)電腦知識(shí)與技術(shù)[J],2008,8

[19]張健浪,GoogleAndroid:開放平臺(tái)攻陷移動(dòng)互聯(lián)網(wǎng),信息產(chǎn)業(yè)部電子第五十二研究所,2008,[20]陳星江蘭帆,基于GoogleAndroid平臺(tái)的移動(dòng)開發(fā)研究.福建電腦,2008,[21]Android官方文檔。河南城建學(xué)院本科畢業(yè)設(shè)計(jì)(論文) 附錄附錄packagecom.lyl;importandroid.app.Activity;importandroid.app.AlarmManager;importandroid.app.AlertDialog;importandroid.app.Dialog;importandroid.app.PendingIntent;importandroid.content.BroadcastReceiver;importandroid.content.Context;importandroid.content.DialogInterface;importandroid.content.Intent;importandroid.content.IntentFilter;importandroid.media.AudioManager;importandroid.os.Bundle;importandroid.view.KeyEvent;importcom.javenwong.android.engine.GameActivity;importcom.javenwong.android.engine.GameCanvas;importcom.lyl.wjkg1.R;importcom.util.RecordManager;importcom.util.SoundManager1;importcom.view.GameView;importcom.view.WelcomeView;publicclassGoldActivityextendsGameActivity{ publicstaticActivityylAction; privateintcount=0; //privateAdViewadView; privateStringMY_AD_UNIT_ID="a14f8faa197b13c"; privateBroadcastReceiverreceiver; publicvoidonCreate(BundlesavedInstanceState){ super.onCreate(savedInstanceState); ylAction=this; //ImageManager.STANDARD_HEIGHT=560; //gameCanvas=(GameCanvas)findViewById(R.id.game); //gameCanvas=newGameCanvas(this); gameCanvas.setView(newWelcomeView()); // setContentView(R.layout.main); } publicbooleanonKeyDown(intkeyCode,KeyEventevent){ if(keyCode==KeyEvent.KEYCODE_BACK){ if(GameView.gameView!=null){ GameView.gameView.pause=true; } showDialog(0); }elseif(keyCode==KeyEvent.KEYCODE_VOLUME_UP){ returnfalse; }elseif(keyCode==KeyEvent.KEYCODE_VOLUME_DOWN){ returnfalse; } returntrue; } protectedvoidonPause(){ super.onPause(); if(GameCanvas.gameCanvas!=null){ if(WelcomeView.index==1){ SoundManager1.getInstance().pauseBackGround(); } if(count==0){ count=1; //GameCanvas.gameCanvas.appendView(newPauseView()); } } System.out.println(""); } @Override publicvoidonWindowFocusChanged(booleanhasFocus){

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(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)論