




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
河南城建學(xué)院本科畢業(yè)設(shè)計(論文)AbstractA畢業(yè)設(shè)計[論文]題目:維京礦工手機游戲系統(tǒng)學(xué)院:計算機科學(xué)與工程專業(yè):計算機科學(xué)與技術(shù)姓名:學(xué)號:指導(dǎo)老師:"完成時間:2013年5月28號河南城建學(xué)院本科畢業(yè)設(shè)計(論文)摘要河南城建學(xué)院本科畢業(yè)設(shè)計(論文) 第三章河南城建學(xué)院本科畢業(yè)設(shè)計(論文) 參考文獻第3章維京礦工game中對象本章節(jié)主要是對項目中對象的分析。Java是面向?qū)ο蟮某绦蛟O(shè)計,具有繼承、封裝等特點。為提高代碼的復(fù)用性,此處將繩子,鉤子,寶石等進行單獨的封裝。通過本章節(jié)的分析我們可以系統(tǒng)進一步了解代碼的性與復(fù)用性。3.1對繩子的定義及分析Java是面向?qū)ο蟮脑O(shè)計語言。在進行編程時,需要對相同功能進行盡可能的抽取與封裝,從而提高代碼的復(fù)用性。因此對于該軟件,分為幾個對象進行如下封裝。publicclassBlast{定義繩子的橫縱坐標 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對鉤子的定義及分析對鉤子類進行定義:鉤子可以進行不動,向外,向里走,旋轉(zhuǎn)角度進行定義。同時對繩子的移動速度進行控制,當繩子速度達到一定速度時,會變成紅色的。此處變量均使用final關(guān)鍵字進行修飾,定義后不再被改變。定義hook方法,加載圖片xiaogozi.png。 publicHook(){ imgHook=ImageManager.getBitmap("images/xiaogouzi.png"); x=(ImageManager.STANDARD_WIDTH-imgHook.getWidth())>>1; y=80+r; }此處ImageManager為AndroidGameEngine中的。該游戲中代碼大量復(fù)用。因此將其單獨封裝進一個工程中。AndroidGameEngine是為了將游戲中的各種文字,圖片,寫入到手機中。其中,定義了手機屏幕的大小,以方便于進行適配。定義基本功能和速度,設(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;對于移動的繩子,根據(jù)坐標來判斷其移動的位置。 //橫向偏移量 //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è)置半徑大小,用來判斷鉤子是否夠到寶石,方便進行撈取。 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); } }當半徑小于上面的值的時候,則判斷為發(fā)生了撞機事件,從而判斷其為抓起對象。 if(collide){ speed=startSpeed-tempMonster.getZhongliang()*2; if(r<25){//當半徑小于25的時候移除抓取對象 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);//點擊卡片發(fā)聲 } } removeTarget(); } } break; } } //鉤子上升時的量的變化 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); } } } }每一幅圖片,在運行時都將被畫到模擬器中,而繩子也是如此。因此我們定義了一個draw的方法。用來表示畫繩子。而為了表示加速與否,將繩子定義為黑紅二色。黑的為正常時候的顏色,紅色則為加速后的顏色: 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);對于鉤子,在存在時也應(yīng)畫出。其實PAINT為new的一個對象。此處將其變成這樣,主要是為了寫的時候簡便。 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)該在返回到一定時間程度后清除。此處定義tempMonster是Monster的一個對象。表示如果有tempMonster,則清除掉。 /***移除鉤子鉤中的物品*/ publicvoidremoveTarget(){ if(tempMonster!=null){ GameView.gameView.getActors().removeElement(tempMonster); tempMonster=null; } }}3.3對寶物的定義及分析對于寶物進行定義。寶物用于加分數(shù)。每種寶石都有一定的值。加到一定額時,判斷過關(guān)與否。為簡單起見,將停止與開始設(shè)為1,2兩個參數(shù)。而泛型Vector則是為了逐個遍歷參數(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其實是為了調(diào)節(jié)手機模擬器的大小。與當前手機相適應(yīng)。本處接受兩個參數(shù)。一個Canvas是指當前中用于游戲中的圖片。而Camera是對手機模擬器進行調(diào)節(jié)。 publicvoiddraw(Canvasg,Cameracamera){ //TODOAuto-generatedmethodstub super.draw(g,camera); }Override是將該方法打上標簽。當特殊情況時,不再提示。如,當其過時時,可以不再提示。Logic中當點擊屏幕時,將會設(shè)置掛鉤的位置為當前掛鉤所在位置。 @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對繩子的定義及分析作為操作者礦工,他的功能有很多,例如放鉤子,收鉤子,為方便起見,也將各種動作設(shè)置為0~5各種值。具體如下:publicclassPlayer{ publicstaticfinalbytedaiji=0; /***待機狀態(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é)主要是對該手機游戲系統(tǒng)中的對象,如繩子,鉤子,礦工,寶石有個初步的認識,明白要完成的功能,熟悉該軟件的框架結(jié)構(gòu)。本章節(jié)對game部分對象模塊進行詳述描述,本章節(jié)對技術(shù)性問題進行了初步分析。這些需求也是完成項目必不可少的部分。
第4章維京礦工主流程相關(guān)的類本章節(jié)主要是對項目的主流程進行描述。主要包括程序的返回主菜單,暫停,退出等功能。通過本章節(jié)的分析我們可以系統(tǒng)了解項目的基本流程,使我們更進一步了解與主流程相關(guān)的操作應(yīng)該如何設(shè)計與實現(xiàn)。4.1主頁面相關(guān)的類主頁面主要是指當游戲進行到一半時,暫停,返回主頁面,或者是退出游戲程序。這里的主要代碼如下:此處單例模式創(chuàng)建頁面。 publicvoidonCreate(BundlesavedInstanceState){ super.onCreate(savedInstanceState); }此處,當值為暫停時,畫面將會暫停。同時將會彈出對話框。而對于所有的點擊事件來說,都有按下與松開兩個事件。 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)聽窗口時間。在GUI編程中所有的事件都在監(jiān)聽后才能處理。否則,只能顯示,操作時不會有任何反應(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é)主要是對該手機游戲系統(tǒng)的主流程有個初步的認識,明白要完成的返回,暫停等功能,熟悉該軟件的主要流程。本章節(jié)對主流程部分模塊進行詳述描述。本章節(jié)對技術(shù)性問題進行了進一步的分析。這些需求也是完成項目必不可少的部分。
第5章維京礦工與框架相關(guān)的類本章節(jié)主要是對項目中與框架有關(guān)的類的設(shè)計與實現(xiàn)。通過本章節(jié)的分析我們可以系統(tǒng)了解項目中如何優(yōu)化存儲,進一步熟悉鏈表,泛型等基本方法,通過本章節(jié)的分析我們更加流利的制作。5.1框架中button的類作為Util框架中的組件,可以有如下功能:首先為Button。Java中,Button有點擊,松開的時間監(jiān)聽機制。作為觸摸屏的Android手機,可以將整個屏幕作為一個大的按鈕來看。按鈕則有點擊和松開兩種情況。代碼中都必須實現(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); 對于游戲來說,完全過關(guān)后,將進入循環(huán)狀態(tài),從頭開始。 publicvoidrecycle(){ if(bitmapClicked!=null){ bitmapClicked.recycle(); } if(bitmapNormal!=null){ bitmapNormal.recycle(); } }}5.2框架中控制分數(shù)的類對于游戲中所得的分數(shù)以及等級,也需要進行控制。這里我們設(shè)置一個類,用于對整個游戲過程中的得分進行控制。在對文件處理時,要拋出異常。此處將會對異常進行處理。 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)過時,被ArrayList所替代。是數(shù)組型的,可以存儲數(shù)據(jù)。此處將其存儲后并開始遍歷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框架中控制音效的類在整個游戲的過程中,我們都設(shè)置了音效,用于增加游戲的趣味性。這里,也應(yīng)該有一個類,用來控制音樂場景的播放。此處為單例模式,只有一個地方可以控制音樂的播放。getInstance()就是將對象new出來之后,外部不能再定義其他的對象。 publicstaticSoundManager1getInstance(){ if(record==null){ record=newSoundManager1(); } returnrecord; }該方法創(chuàng)建一個背景音樂。 publicvoidinitSounds(){ mediaPlayer=MediaPlayer.create(GoldActivity.ylAction,R.raw.background); if(mediaPlayer!=null){ mediaPlayer.setLooping(true); } } publicvoidloadSfx(intraw,intID){ //把資源中的音效加載到指定的ID(播放的時候就對應(yīng)到這個ID播放就行了) soundPoolMap.put(ID,soundPool.load(GoldActivity.ylAction,raw,ID)); } publicvoidplay(intsound,intuLoop){ //獲取系統(tǒng)當前單量 soundPool.play(soundPoolMap.get(sound),((GoldActivity)GoldActivity.ylAction).getStreamVolume(), ((GoldActivity)GoldActivity.ylAction).getStreamVolume(),1,uLoop,1f); }對音樂的幾種操作。 //播放背景音樂 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框架中寫文字圖片的類對帶文字的圖片寫入到該游戲中。此處都是對文件進行讀寫的操作。讀寫的操作都需要進行異常的處理: 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)用來實現(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)的類對視圖進行判斷并繪制: 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)建一個函數(shù)對觸屏事件進行監(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);//點擊卡片發(fā)聲} GameCanvas.gameCanvas.closeTopView(); } } }由于篇幅有限我們在此處不在做過多的分析。要完成本操作還需要幾個javabeen對象。我UserDao等類事使用了接口編程的思想,接口首先是一種規(guī)范,它只定義一些方法,并不實現(xiàn)。在內(nèi)存中沒有實力對象。再者,我認為接口和抽象類的另一個區(qū)別在于,抽象類和它的子類之間應(yīng)該是一般和特殊的關(guān)系,而接口僅僅是它的子類應(yīng)該實現(xiàn)的一組規(guī)則。(當然,有時也可能存在一般與特殊的關(guān)系,但我們使用接口的目的不在這里)如,交通工具定義成抽象類,汽車、飛機、輪船定義成子類,是可以接受的,因為汽車、飛機、輪船都是一種特殊的交通工具。再譬如Icomparable接口,它只是說,實現(xiàn)這個接口的類必須要可以進行比較,這是一條規(guī)則。如果Car這個類實現(xiàn)了Icomparable,只是說,我們的Car中有一個方法可以對兩個Car的實例進行比較,可能是比哪輛車更貴,也可能比哪輛車更大,這都無所謂,但我們不能說“汽車是一種特殊的可以比較”,這在文法上都不通?!懊嫦蚪涌诰幊獭敝械慕涌谑且环N思想層面的用于實現(xiàn)多態(tài)性、提高軟件靈活性和可維護性的架構(gòu)部件,而具體語言中的“接口”是將這種思想中的部件具體實施到代碼里的手段。5.6本章總結(jié)通過本章節(jié)的可以系統(tǒng)的了解該游戲軟件的部分的框架結(jié)構(gòu),以及部分功能的實現(xiàn)。在本系統(tǒng)還有很多不足之處。例如,作為游戲很多地方的代碼都是可以復(fù)用的。而作為Java來說,封裝性是很關(guān)鍵的。那么如何提高代碼的復(fù)用性是個很關(guān)鍵的問題。需要進一步改進。在做部分的時候主要是為了維京礦工游戲部分的實現(xiàn)。對于手機本身的設(shè)置則沒有詳細的說明。
第6章運行結(jié)果演示本章節(jié)主要是對項目的運行結(jié)果進行展示。通過展示,讓我們對游戲的流程有進一步的了解,各種使用,功能展示等詳細的描述。通過本章節(jié)的分析我們可以系統(tǒng)了解項目的基本流程,通過本章節(jié)的分析我們更加流利的制作。6.1結(jié)果視圖1、進入維京礦工的主菜單運行如下圖4-1頁面。圖4-1主菜單圖4-2幫助頁面2、當點擊幫助時,出現(xiàn)如上面圖4-2頁面。3、默認是有聲音的,如果不想讓其有聲音,那么點擊音樂圖標時,出現(xiàn)靜音模式。如下圖4-3所示。圖4-3靜止聲音圖4-4關(guān)于頁面4、為了將作者的信息顯示出來,我們單獨弄了一個頁面用來顯示,如上圖4-4所示。5、在主場流程中,如果出現(xiàn)退出的情況,則會出現(xiàn)如下4-5頁面。圖4-5提示是否退出游戲圖4-6下一個頁面6、對于游戲的開發(fā)的相關(guān)信息,有也小故事來說明。如上圖4-6示。7、當進入游戲時,會提示如果要過本關(guān)需要的分數(shù)。如下4-7為第一關(guān)的分數(shù)。圖4-7第一關(guān)起始頁面圖4-8第一關(guān)頁面8、第一關(guān)的頁面如圖4-8所示。9、當挑戰(zhàn)失敗時,會出現(xiàn)如下圖4-9提示。讓其知道游戲結(jié)束。圖4-9失敗頁面圖4-10成功后從商店購買道具頁面10、當?shù)谝魂P(guān)過來后,有足夠的金額,可以購買圖4-10中所示的道具。11、如下圖4-11為購買時間,進行時間恢復(fù)的圖片。圖4-11購買了時間的頁面圖4-12返回主菜單頁面12、當在游戲中時,可以推出進入主菜單,如圖4-12所示。6.2本章總結(jié)通過本章,可以更加清晰明確的看出該游戲的特點:絢麗的色彩,多種多樣的功能。簡單操作,趣味性強,簡單易懂。是個非常易于操作和娛樂的游戲項目。不論是在旅行,還是在工作閑暇之余,只需要一部手機,你就可以享受到非常好的游戲娛樂。
結(jié)論此設(shè)計是我在看視頻的過程中根據(jù)視頻做的一個項目,用時7天,由于時間有限,其中有許多不足。在編寫的過程中也遇到許多問題,例如亂碼問題把我困惑了兩天,由于要實現(xiàn)數(shù)據(jù)的存取,在不同的平臺中會出現(xiàn)亂碼,在上部分我以對亂碼問題做了簡述。要想做個項目,系統(tǒng)框架很重,Android有其自己的編程模型。對于Android的編寫有的類的方法需要傳遞許多參數(shù)。這不得不認真閱讀API。如何運用已經(jīng)有的代碼也是很重要的,有些方法網(wǎng)上已經(jīng)有了很好的是想方法這里我們就沒有必要自己去寫了,做個好的項目,學(xué)會用別人寫好的類方法是很重要的。Android的編寫過程中需要設(shè)計許多的內(nèi)部類,如何得到內(nèi)部類的對象,以及在內(nèi)部類如何調(diào)用外部類的屬性和方法也是很重要的。Android為什么會使用內(nèi)部類,個人理解是由于內(nèi)部類的hashcode碼很相似,眾所周知hashcode碼在一定程度上可以看變作類的物理地址,估計是由于這樣地址比較相近,可以快速的讀取數(shù)據(jù)。手機編程的問題,手機不是pc機可以大量的浪費內(nèi)存和電量,在手機的編程中內(nèi)存和耗電量是不得不考慮的問題??梢愿鶕?jù)實際情況使用一些輕量級的類以實現(xiàn)節(jié)省內(nèi)存的目的。手機的電量有限我們要達到相同的功能調(diào)用一些不怎么耗電的方法是很重要的。以下是本次設(shè)計總結(jié)的心得總結(jié):1自定義組件的顯示問題,在寫自定義View的時候經(jīng)常要對視圖的X、Y調(diào)整,以達到預(yù)期的理想位置。因此,通過使用AndroidGameEngine對代碼進行復(fù)用,大大提高了代碼復(fù)用性??梢灾v每個組件的X、Y坐標值畫到組件旁邊,這樣很直觀,一看就知道該怎樣調(diào)整。2使用Log來打印日志和進行調(diào)試。3使用LogCat視圖,在showView中有LogCat視圖,LogCat視圖會顯示一些Android仿真器打印出的堆棧信息,對應(yīng)用的調(diào)試非常有幫助,另外Log打印的日志也在這邊顯示。4使用EmulatorControl視圖,EmulatorControl可以完成一些簡單的設(shè)備操作,比如,模擬來電,短消息。5活用tools目錄下的工具,該目錄在AndroidSDK中都有提供,通過這些工具可以操作Android仿真器,比如,創(chuàng)建一個虛擬SD卡,將系統(tǒng)中的文件移動到虛擬SD中,Android都有提供相應(yīng)的工具,相關(guān)命令可以上網(wǎng)查閱。
參考文獻[1]李觀華,范輝.J2ME在移動通信程序中的應(yīng)用.計算機應(yīng)用,2003,[2]廖永剛,余冬梅,張秋余.J2ME架構(gòu)與安全機制的研究.計算機程序設(shè)計,2006,[3]張培仁,《基于C語言編程MCS-51單片機原理與應(yīng)用》,電子工業(yè)出版社[4]EdBurnette.Hello,Android:IntroducingGoogle’sMobileDevelopmentPlatform.PragmaticBookshelf,2008
[5]閻石編,《數(shù)字電子技術(shù)基礎(chǔ)》,
高等教育出版社,2003
[6]康光華,《模擬電子技術(shù)基礎(chǔ)》,高等教育出版社,2003
[7]王勤,《計算機控制技術(shù)》,機械工業(yè)出版社,2003
[8](美)普??说戎铉I等譯,《通信系統(tǒng)原理》(美),電子工業(yè)出版社,20
[9]劉令普,《數(shù)字信號處理》,哈爾濱工業(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ǔ)與實踐》,北京航空航天大學(xué),2007
[14]孫秋野
孫凱
馮健,《ARM嵌入式系統(tǒng)開發(fā)典型模塊》,人民郵電出版社,2007[15]肖峰陳愛國,無線數(shù)據(jù)采集模塊設(shè)計[J],現(xiàn)代電子技術(shù),2008
[16]謝述理,一種多通道聲波測井井下數(shù)據(jù)采集模塊[J],聲學(xué)與電子工程,2008
[17]張彪徐曉輝張紅濤,一種無線數(shù)據(jù)采集模塊的設(shè)計[J],應(yīng)用天地,2006
[18]湯凱為胡蓉,一種智能數(shù)據(jù)采集模塊的設(shè)計電腦知識與技術(shù)[J],2008,8
[19]張健浪,GoogleAndroid:開放平臺攻陷移動互聯(lián)網(wǎng),信息產(chǎn)業(yè)部電子第五十二研究所,2008,[20]陳星江蘭帆,基于GoogleAndroid平臺的移動開發(fā)研究.福建電腦,2008,[21]Android官方文檔。河南城建學(xué)院本科畢業(yè)設(shè)計(論文) 附錄附錄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等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 國際產(chǎn)品授權(quán)分銷合同
- 辦公家具采購合同一
- 商品買賣合同「樣本」
- 商業(yè)地產(chǎn)買賣合同模板范文
- 公司設(shè)立投資合作合同范本
- 礦山棄渣處理合同范本
- 消防及安全整改合同履行細則
- 校企合作合同新范本
- 土地使用權(quán)出讓合同及物業(yè)銷售細則
- 躉船結(jié)構(gòu)培訓(xùn)課件
- 2025年黑龍江民族職業(yè)學(xué)院單招職業(yè)技能測試題庫附答案
- 年產(chǎn)60萬噸摻混肥項目可行性研究報告申請立項
- 2025年2月《公共安全視頻圖像信息系統(tǒng)管理條例》學(xué)習(xí)解讀課件
- 2025年江蘇省中職《英語》學(xué)業(yè)水平考試高頻必練考試題庫400題(含答案)
- 2025年濟寧職業(yè)技術(shù)學(xué)院高職單招語文2018-2024歷年參考題庫頻考點含答案解析
- 高三一?!吧媾c強弱關(guān)系思辨”審題立意及范文
- 2025年湖南工程職業(yè)技術(shù)學(xué)院高職單招職業(yè)適應(yīng)性測試近5年常考版參考題庫含答案解析
- 2024年七臺河職業(yè)學(xué)院高職單招數(shù)學(xué)歷年參考題庫含答案解析
- 小學(xué)數(shù)學(xué)教學(xué)中小組合作學(xué)習(xí)課件
- 2024年晉中職業(yè)技術(shù)學(xué)院單招職業(yè)技能測試題庫附答案
- 2025年茂名市高三年級第一次綜合測試(一模)物理試卷(含答案)
評論
0/150
提交評論