基于J2ME的推箱子游戲畢業(yè)論文_任務書_第1頁
基于J2ME的推箱子游戲畢業(yè)論文_任務書_第2頁
基于J2ME的推箱子游戲畢業(yè)論文_任務書_第3頁
基于J2ME的推箱子游戲畢業(yè)論文_任務書_第4頁
基于J2ME的推箱子游戲畢業(yè)論文_任務書_第5頁
已閱讀5頁,還剩34頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、 . . . 科技信息職業(yè)學院畢業(yè)設計(論文)任務書專 業(yè): 軟件開發(fā)(游戲方向) 設計(論文)題目:基于J2ME的推箱子游戲 基于J2ME的推箱子游戲摘要:手機是人們?nèi)粘I钪兴玫姆浅nl繁的通信工具。隨著JAVA技術(shù)的不斷更新提高,J2ME技術(shù)的出現(xiàn),使得手機游戲越來越成為我們關(guān)注的焦點。J2ME技術(shù)目前最流行的就是在制作手機游戲方面,JAVA手機的出現(xiàn)使得這一技術(shù)更有它的用武之地,發(fā)揮著他靈活、輕便、快捷的作用。J2ME平臺被是最杰出的手機游戲手機游戲平臺,它一些非常重要的特征對開發(fā)者都有很大益處。因為J2ME應用在不同設備上都是便攜式的,他們常常可以在網(wǎng)絡上下載和執(zhí)行。本設計通過Map

2、List和 SpriteThread等類進行推箱子游戲設計,最后編程實現(xiàn)了全過程。關(guān)鍵詞:J2ME MapList SpriteThread 推箱子目錄一、 設計過程 3(1)游戲策劃 3(2)游戲的準備工作 3(3)設計背景. 6(4)游戲框架設計 7 (5)設計細節(jié) 7二、 歡迎界面設計 8(1)PushBoxActivity類框架的搭建 8(2)歡迎界面WelcomeView類的實現(xiàn) 13(3)刷幀線程WelcomeViewDrawThread類的實現(xiàn) 16(4)動畫線程WelcomeViewGoThread類的實現(xiàn) 17三、 游戲界面設計 19四、 游戲界面框架設計 23(1)Game

3、View框架的實現(xiàn).24(2)地圖類MapList的實現(xiàn)29(3)角色類MySprite的實現(xiàn).31(4)onDraw方法的實現(xiàn) 36五、 設計總結(jié) 38參考文獻 38 正文一 設計過程(1) 游戲策劃游戲策劃主要包括游戲的情節(jié)、目標受眾、運行的目標平臺、采用的呈現(xiàn)技術(shù)、操作方式等幾個方面。游戲情節(jié):本游戲為輕量級的益智游戲,因此不存在很復雜的情節(jié)。這方面朱燾做的就是為設計游戲各管倉庫的形狀、大小、可通過區(qū)域,以與各關(guān)中箱子的初始位置和目的地。目標受眾:本游戲受眾方面比較廣,應該是老少皆宜的。運行的目標平臺:本游戲的目標平臺為Android2.1。才有的呈現(xiàn)技術(shù):本游戲采用2D的呈現(xiàn)技術(shù)。操作

4、方法:本游戲擬采用手機鍵盤進行操作,對于沒有鍵盤的型號也可以考慮采用虛擬鍵盤。(2)游戲的準備工作根據(jù)游戲的策劃來制作和搜集游戲要用到的圖片、聲音等。本游戲有道的圖片如下 圖片清單圖片大?。↘B)像素(wrh)用途3.550*63角色向下走圖片2.850*63角色向左走圖片6.648*48游戲圖標5.9250*63正常的箱子3.3550*63角色向上走圖片3.3550*63角色向右走圖片9.5200*80菜單退出按鈕2.585*45游戲界面的退出14.3300*250恭喜過關(guān)圖片9.6200*80游戲說明菜單41.2300*475圖片的鐵門圖片4.4200*80聲音開按鈕5.1200*80菜單

5、開始游戲33.5160*450左半部分墻45640*480游戲背景圖片2.850*63角色向下推箱子3.550*30角色向左推箱子3.550*63角色向上推箱子3.350*63角色向右推箱子7.850*63綠色的箱子53.7160*450右側(cè)的木門53.7160*450左側(cè)的木門82.9278*420菜單界面按鈕背景18.4640*480菜單界面的背景22.3480*200歡迎界面背景4.4200*80聲音關(guān)按鈕4.750*63游戲中的墻27.5160*450右半部分墻聲音清單聲音文件名大?。╧b)格式用途Sound122Mp3游戲背景音樂Sound27Mp3推箱子的聲音Sound3215Mp

6、3歡迎界面背景音樂Winsound8Mp3游戲勝利的聲音(3)設計背景 游戲中,首先必須要有個主應用程序類,其次,為了把程序的畫面呈現(xiàn)出來,就是要有畫布;為了比較容易管理地圖、增加或修改地圖比較方便,應該把地圖和畫布分開;然后最主要的是要有個來推箱子的人;當然箱子也是需要管理的。這其中需要先了解游戲中應用到的類。歡迎界面類WelcomeView:主要負責歡迎界面的繪制工作。歡迎界面的繪制線程類WelcomeViewDrawThread:負責的工作是定時重繪歡迎界面。歡迎界面的動畫實現(xiàn)類WelcomeViewGoThread:是通過改變WelcomeView中所用到的圖片坐標實現(xiàn)的。菜單界面類M

7、enuView:只負責繪制工作菜單界面的繪制線程類MenuViewDrawThread:負責的工作是定時重繪菜單界面。菜單界面的動畫實現(xiàn)類MenuViewGoThread:用來生成菜單界面中背景的滾動效果。游戲主界面類GameView:負責繪制游戲過程中所有的信息,如地圖、玩家角色、所推的箱子、恭喜過關(guān)圖片等。游戲主界面的繪制線程類GameViewDrawThread:通過對調(diào)節(jié)線程中的睡眠時間便可調(diào)整游戲的FPS的高低,改善用戶的體驗。地圖信息類MapList:包含著地圖的相關(guān)信息,這里的一個地圖是用三維函數(shù)族中的二維矩陣表示的,關(guān)于該類的使用方法將在后面進行介紹。角色封裝類MySprite

8、:包含了所有與角色有關(guān)的信息。角色移動線程類SpriteMoveThread:負責角色的無級移動,運用時只需給出起始點和目標點的坐標,同時該類還承擔起屏幕的滾動工作。角色換幀線程類SpriteThread:負責根據(jù)角色的信息時時改變角色的圖片。箱子移動類BoxThread:負責子昂子的無級移動。(4) 游戲框架設計游戲基本框架類圖:圖一 游戲基本框架類圖(5) 設計細節(jié)要做的游戲是讓一個小人推箱子,操作方法就是通過四個方向鍵對小人進行上,下,左,右移動。當箱子移動到指定位置時,游戲就會產(chǎn)生過關(guān)事件。下面是游戲流程圖:開始判斷用戶是否按鍵讀取按鍵信息輸出新地圖判斷箱子是否在目標上結(jié)束過關(guān)否是否是

9、圖二 程序流程圖二 歡迎界面設計(1) PushBoxActivity類框架的搭建代碼如下:package wyf.ytl;import android.app.Activity;import android.media.MediaPlayer;import android.os.Bundle;import android.os.Handler;import android.os.Message;import android.view.KeyEvent;import android.view.Window;import android.view.WindowManager;public cla

10、ss PushBoxActivity extends ActivityWelcomeView welcomeView = null;/歡迎界面WelcomeViewGoThread welcomeViewGoThread = null;/歡迎界面中的移動線程MenuView menuView = null;MenuViewGoThread menuViewGoThread = null;/菜單界面中的移動線程GameView gameView = null;boolean isSound = true;/是否播放聲音MediaPlayer pushBoxSound;/推箱子聲音MediaPla

11、yer backSound;/背景音樂MediaPlayer winSound;/勝利的音樂MediaPlayer startSound;/開始和菜單時的音樂int map1;int map2;/當前游戲的地圖int selectMap = 0;/選中的地圖MySprite mySprite;/精靈KeyThread kt;/鍵盤監(jiān)聽線程int action = 0;/鍵盤的狀態(tài),二進制表示 從左往右表示上下左右Handler myHandler = new Handler()/用來更新UI線程中的控件 public void handleMessage(Message msg) if(msg

12、.what = 1)/收到WelcomeViewGoThread/Welcome發(fā)來的消息 welcomeViewGoThread.setFlag(false); if(welcomeView != null) welcomeView = null; initAndToMenuView(); else if(msg.what = 2)/收到MenuView發(fā)來的消息 if(menuView != null) menuView = null; initAndToGameView(); else if(msg.what = 3) if(gameView != null) gameView = nu

13、ll; initAndToMenuView(); else if(msg.what = 4)/收到GameView來的消息,進入下一關(guān) if(selectMap+1<MapList.map1.length) selectMap = selectMap+1; initAndToGameView(); else selectMap = 0; initAndToGameView(); ; public void onCreate(Bundle savedInstanceState) super.onCreate(savedInstanceState);/全屏requestWindowFeatu

14、re(Window.FEATURE_NO_TITLE);getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN , WindowManager.LayoutParams.FLAG_FULLSCREEN); pushBoxSound = MediaPlayer.create(this, R.raw.sound2);/推箱子的聲音 winSound = MediaPlayer.create(this, R.raw.winsound);/勝利的聲音 backSound = MediaPlayer.create(this, R.r

15、aw.sound1);/背景音樂 backSound.setLooping(true); /設置循環(huán) startSound = MediaPlayer.create(this, R.raw.sound3); startSound.setLooping(true);initAndToWelcomeView(); public void initAndToWelcomeView() welcomeView = new WelcomeView(this); if(isSound) startSound.start(); this.setContentView(welcomeView); welcom

16、eViewGoThread = new WelcomeViewGoThread(this); welcomeViewGoThread.start(); public void initAndToMenuView() menuView = new MenuView(this); this.setContentView(menuView); menuViewGoThread = new MenuViewGoThread(this); menuViewGoThread.start(); public void initAndToGameView()map1 = new intMapList.map1

17、selectMap.lengthMapList.map1selectMap0.length;for(int i=0; i<MapList.map1selectMap.length; i+)for(int j=0; j<MapList.map1selectMapi.length; j+)map1ij = MapList.map1selectMapij;/初始化第一層map2 = new intMapList.map2selectMap.lengthMapList.map2selectMap0.length;for(int i=0; i<MapList.map2selectMap

18、.length; i+)for(int j=0; j<MapList.map2selectMapi.length; j+)map2ij = MapList.map2selectMapij;/初始化第二層 gameView = new GameView(this); mySprite = new MySprite(this); kt = new KeyThread(this);/添加鍵盤監(jiān)聽 kt.start();if(isSound)backSound.start();/播放聲音 this.setContentView(gameView); public boolean onKeyUp(

19、int keyCode, KeyEvent event) /鍵盤抬起 if(keyCode = 19)/上 action = action & 0x37; if(keyCode = 20)/下 action = action & 0x3B; if(keyCode = 21)/左 action = action & 0x3D; if(keyCode = 22)/右 action = action & 0x3E; return false; public boolean onKeyDown(int keyCode, KeyEvent event)/鍵盤按下監(jiān)聽 if

20、(keyCode = 19)/上 action = action | 0x08; if(keyCode = 20)/下 action = action | 0x04; if(keyCode = 21)/左 action = action | 0x02; if(keyCode = 22)/右 action = action | 0x01; return false; (2) 歡迎界面WelcomeView類的實現(xiàn)代碼如下:package wyf.ytl;import android.graphics.Bitmap;import android.graphics.BitmapFactory;imp

21、ort android.graphics.Canvas;import android.graphics.Color;import android.graphics.Paint;import android.view.SurfaceHolder;import android.view.SurfaceView;import android.view.View;import android.view.View.OnClickListener;public class WelcomeView extends SurfaceView implements SurfaceHolder.Callback,

22、OnClickListenerPushBoxActivity pushBoxActivity;WelcomeViewDrawThread welcomeViewDrawThread = null;Bitmap bitmap;Bitmap wallLeft;/左面的墻Bitmap wallRight;/右面的墻Bitmap iron;/鐵門Bitmap woodLeft;/左面的木門Bitmap woodRight;/右面的木門Bitmap background;Bitmap mountain;/背景的山int wallLeftX = 15;/墻的坐標int wallLeftY = 10;int

23、 wallRightX = 150;int wallRightY = 10;int ironX = 15;/鐵門的坐標int ironY = 10;int woodLeftX = 15;/木門的坐標int woodLeftY = 10;int woodRightX = 150;int woodRightY = 10; public WelcomeView(PushBoxActivity pushBoxActivity) /構(gòu)造器super(pushBoxActivity);this.pushBoxActivity = pushBoxActivity;getHolder().addCallbac

24、k(this);welcomeViewDrawThread = new WelcomeViewDrawThread(this,getHolder();wallRight = BitmapFactory.decodeResource(getResources(), R.drawable.wallright);wallLeft = BitmapFactory.decodeResource(getResources(), R.drawable.wallleft); bitmap = BitmapFactory.decodeResource(getResources(), R.drawable.ima

25、ge4);iron = BitmapFactory.decodeResource(getResources(), R.drawable.image2);woodLeft = BitmapFactory.decodeResource(getResources(), R.drawable.image33);woodRight = BitmapFactory.decodeResource(getResources(), R.drawable.image3);background = BitmapFactory.decodeResource(getResources(), R.drawable.bac

26、kground);/背景的水mountain = BitmapFactory.decodeResource(getResources(), R.drawable.mountain2);protected void onDraw(Canvas canvas) canvas.drawColor(Color.WHITE);/背景白色canvas.drawBitmap(background, 0, 0, new Paint();/繪制背景canvas.drawBitmap(mountain, 0, 0, new Paint();/后面的山圖片canvas.drawBitmap(wallLeft, wa

27、llLeftX, wallLeftY,new Paint();/墻的左面canvas.drawBitmap(wallRight, wallRightX, wallRightY,new Paint();/墻的右面canvas.drawBitmap(iron, ironX, ironY,new Paint();/鐵門canvas.drawBitmap(woodLeft, woodLeftX, woodLeftY,new Paint();/木頭門左面canvas.drawBitmap(woodRight, woodRightX, woodRightY,new Paint();/木頭門右面canvas

28、.drawBitmap(bitmap, 0, 0, new Paint();this.setOnClickListener(this);public void surfaceChanged(SurfaceHolder holder, int format, int width,int height) public void surfaceCreated(SurfaceHolder holder) welcomeViewDrawThread.setFlag(true);welcomeViewDrawThread.start();/啟動刷幀線程public void surfaceDestroye

29、d(SurfaceHolder holder) boolean retry = true; welcomeViewDrawThread.setFlag(false);/停止刷幀線程 while (retry) try welcomeViewDrawThread.join();/等待刷幀線程結(jié)束 retry = false; catch (InterruptedException e) /不斷地循環(huán),直到等待的線程結(jié)束 public void onClick(View v) pushBoxActivity.myHandler.sendEmptyMessage(1);(3) 刷幀線程Welcome

30、ViewDrawThread的實現(xiàn)代碼如下:package wyf.ytl;public class WelcomeViewGoThread extends Threadint sleepSpan = 200;/睡眠的毫秒數(shù)private boolean flag = true;int status = 0;PushBoxActivity pushBoxActivity;/activity的引用public WelcomeViewGoThread(PushBoxActivity pushBoxActivity)this.pushBoxActivity = pushBoxActivity;pub

31、lic void setFlag(boolean flag)this.flag = flag;public void run() /重寫的run方法while(flag)switch(status)case 0:/木門運動pushBoxActivity.welcomeView.woodLeftX -= 2;pushBoxActivity.welcomeView.woodRightX += 2;if(pushBoxActivity.welcomeView.woodLeftX<-90)status = 1;break;case 1:/鐵門運動pushBoxActivity.welcomeVi

32、ew.ironY -= 8;if(pushBoxActivity.welcomeView.ironY<-380)status = 2;break;case 2:pushBoxActivity.welcomeView.wallLeftX -= 3;pushBoxActivity.welcomeView.wallRightX += 3;if(pushBoxActivity.welcomeView.wallLeftX<-90)status = 3;break;case 3:this.flag = false;pushBoxActivity.myHandler.sendEmptyMessa

33、ge(1);/向主activity發(fā)送Handler消息break;tryThread.sleep(sleepSpan);/睡眠catch(Exception e)e.printStackTrace();(4) 動畫線程WelcomeViewGoThread的實現(xiàn)代碼如下:package wyf.ytl;public class MenuViewGoThread extends Threadboolean flag = true;/循環(huán)標記位int sleepSpan = 300;/睡眠的毫秒數(shù)PushBoxActivity pushBoxActivity;public MenuViewGoT

34、hread(PushBoxActivity pushBoxActivity)this.pushBoxActivity = pushBoxActivity;public void run()while(flag)if(pushBoxActivity.menuView != null)if(pushBoxActivity.menuView.menubackgroudX < -320)/當移動過遠時將坐標重置到0pushBoxActivity.menuView.menubackgroudX = 0;pushBoxActivity.menuView.menubackgroudX -= 2;/每次

35、循環(huán)向左移兩個單位tryThread.sleep(sleepSpan);/睡眠catch(Exception e)e.printStackTrace();圖三 歡迎界面圖 圖四 菜單界面圖三 游戲界面設計在游戲界面設計中首先要使菜單界面MenuView類實現(xiàn)。代碼如下:package wyf.ytl;import android.graphics.Bitmap;import android.graphics.BitmapFactory;import android.graphics.Canvas;import android.graphics.Paint;import android.view

36、.MotionEvent;import android.view.SurfaceHolder;import android.view.SurfaceView;public class MenuView extends SurfaceView implements SurfaceHolder.CallbackPushBoxActivity pushBoxActivity;/主Activity的引用MenuViewDrawThread menuViewDrawThread;Paint paint;/畫筆Bitmap start1;/開始游戲圖片Bitmap sound1;/聲音圖片Bitmap s

37、ound2;Bitmap help1;/游戲說明圖片Bitmap exit1;/退出游戲圖片Bitmap menubackground;/大背景圖片Bitmap menubackground2;/小背景圖片int menubackgroudX = 0;/需要移動的背景的坐標public MenuView(PushBoxActivity pushBoxActivity) /構(gòu)造器super(pushBoxActivity);this.pushBoxActivity = pushBoxActivity;menuViewDrawThread = new MenuViewDrawThread(this

38、, getHolder();getHolder().addCallback(this);paint = new Paint() ;start1 = BitmapFactory.decodeResource(getResources(), R.drawable.start1);/初始化開始sound1 = BitmapFactory.decodeResource(getResources(), R.drawable.sound1);/初始化打開聲音sound2 = BitmapFactory.decodeResource(getResources(), R.drawable.sound2);/初

39、始化關(guān)閉聲音help1 = BitmapFactory.decodeResource(getResources(), R.drawable.help1);/初始化幫助exit1 = BitmapFactory.decodeResource(getResources(), R.drawable.exit1);/初始化退出menubackground = BitmapFactory.decodeResource(getResources(), R.drawable.menubackground);menubackground2 = BitmapFactory.decodeResource(getR

40、esources(), R.drawable.menubackground2);protected void onDraw(Canvas canvas) super.onDraw(canvas);canvas.drawBitmap(menubackground, menubackgroudX, 0, paint);/繪制大背景canvas.drawBitmap(menubackground2, 21, 20, paint);/繪制小背景canvas.drawBitmap(start1, 60, 60, paint);if(pushBoxActivity.isSound)/根據(jù)聲音的狀態(tài)繪制聲音

41、按鈕圖片canvas.drawBitmap(sound1, 60, 150, paint);elsecanvas.drawBitmap(sound2, 60, 150, paint);canvas.drawBitmap(help1, 60, 240, paint);/繪制幫助canvas.drawBitmap(exit1, 60, 330, paint);/繪制退出按鈕public boolean onTouchEvent(MotionEvent event) if(event.getX()>50 && event.getX()< 50+start1.getWidt

42、h()&& event.getY()>60 && event.getY()<60+start1.getHeight()/點擊了開始游戲菜單if(pushBoxActivity.startSound.isPlaying()pushBoxActivity.startSound.stop();pushBoxActivity.myHandler.sendEmptyMessage(2);/向Activity的Handler發(fā)送消息else if(event.getX()>50 && event.getX()<50+sound1.ge

43、tWidth()&& event.getY()>70+start1.getHeight() && event.getY()<70+start1.getHeight()+sound1.getHeight()/點擊了聲音菜單pushBoxActivity.isSound = !pushBoxActivity.isSound;/將聲音開關(guān)取反if(!pushBoxActivity.isSound)if(pushBoxActivity.startSound.isPlaying()pushBoxActivity.startSound.pause();/停止播放

44、聲音if(pushBoxActivity.backSound.isPlaying()pushBoxActivity.backSound.pause();/停止播放聲音elseif(!pushBoxActivity.startSound.isPlaying()pushBoxActivity.startSound.start();/開始播放聲音else if(event.getX()>50 && event.getX()<50+help1.getWidth()&& event.getY()>80+start1.getHeight()+sound1.

45、getHeight() && event.getY()<80+start1.getHeight()+help1.getHeight()+help1.getHeight()/點擊的是游戲說明菜單else if(event.getX()>50 && event.getX()<50+exit1.getWidth()&& event.getY()>90+start1.getHeight()+help1.getHeight()+help1.getHeight()&& event.getY()<90+start1

46、.getHeight()+help1.getHeight()+help1.getHeight()+exit1.getHeight()/點擊的是退出游戲菜單System.exit(0);/退出游戲return super.onTouchEvent(event);public void surfaceChanged(SurfaceHolder holder, int format, int width,int height) public void surfaceCreated(SurfaceHolder holder) menuViewDrawThread.setFlag(true);menuV

47、iewDrawThread.start();public void surfaceDestroyed(SurfaceHolder holder) boolean retry = true; menuViewDrawThread.setFlag(false);/停止刷幀線程 while (retry) try menuViewDrawThread.join();/等待刷幀線程結(jié)束 retry = false; catch (InterruptedException e) /不斷地循環(huán),直到等待的線程結(jié)束 基本界面搭建完成,然后繪制線程MenuViewDrawThread對菜單界面進行刷幀操作。M

48、enuViewDrawThread類的實現(xiàn)方法同WelcomeViewDrawThread的完全一樣。如果希望界面的背景滾動起來,則還需要開發(fā)MenuViewDrawThread線程類,在該線程類的run方法中循環(huán)改變MenuView中背景圖片的坐標即可。四 游戲界面框架設計游戲最主要的環(huán)節(jié)-游戲界面的開發(fā),下面是對游戲界面的整體框架進行簡單介紹。游戲界面設計基本框架圖:圖三 游戲界面設計基本框架圖(5) GameView框架的實現(xiàn)。代碼如下:package wyf.ytl;import android.graphics.Bitmap;import android.graphics.BitmapFactory;import android.graphics.Canvas;import android.graphics.Color;import android.graphics.Paint;import android.graphics.Path;import android.view.Motio

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 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. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論