freepeople性欧美熟妇, 色戒完整版无删减158分钟hd, 无码精品国产vα在线观看DVD, 丰满少妇伦精品无码专区在线观看,艾栗栗与纹身男宾馆3p50分钟,国产AV片在线观看,黑人与美女高潮,18岁女RAPPERDISSSUBS,国产手机在机看影片

正文內(nèi)容

基于java的超級(jí)瑪麗游戲的設(shè)計(jì)與實(shí)現(xiàn)論文(已改無錯(cuò)字)

2022-12-23 03:41:28 本頁面
  

【正文】 類中還應(yīng)當(dāng)繪制馬里奧類,這是游戲中必不可少的。當(dāng)然在繪制場(chǎng)景類的時(shí)候因?yàn)椴恢粋€(gè)場(chǎng)景,所以可以使用循環(huán),將所有的場(chǎng)景全部繪制。然后在將所需要的所有監(jiān)視設(shè)置好以后就可以開啟該類的線程了。 //使用循環(huán)創(chuàng)建全部場(chǎng)景 for(int i=1。i=7。i++){ (new BackGround(i, i==7?true:false))。 } //將第一個(gè)場(chǎng)景設(shè)置為當(dāng)前場(chǎng)景 = (0)。 碼農(nóng)畢業(yè)設(shè)計(jì)下載網(wǎng): 第 22 頁 //初始化瑪麗奧 = new Mario(0, 480)。 //將瑪麗奧放入場(chǎng)景中 (nowBG)。 ()。 (this)。 = new Thread(this)。 ()。 //使窗口在關(guān)閉的時(shí)候,程序也同時(shí)停止。 ()。 (true)。 } 在這些最基本的東西設(shè)置完以后,還需要一個(gè)方法來解決游戲中經(jīng)常會(huì)出現(xiàn)的閃屏問題。這個(gè)方法就是雙緩存方法,現(xiàn)在類中定義一個(gè) BufferedImage 的圖片,然后從該圖片中獲取到圖片的 Graphics g2,然后利用畫筆 g2 將所要繪制的東西繪制到這個(gè)空的圖片中,然后在利用窗體類中的 paint 方法中的畫筆 g 將這個(gè)已經(jīng)繪制好的圖片繪制到窗體類中,這樣利用空白圖片作為程序運(yùn)行中的中轉(zhuǎn),就可以很好的解決游戲運(yùn)行過程中出現(xiàn)的閃屏問題。 public void paint(Graphics g) { //先定義一個(gè)圖片,然后利用雙緩存解決閃屏問題 BufferedImage image = new BufferedImage(900, 600, )。 Graphics g2 = ()。 //利用上面圖片中得到的畫筆 g2,將所需繪制到圖片中 if(){ //繪制背景 ((), 0, 0, this)。 //繪制生命 (生命 : +(), 800, 50)。 //繪制怪物敵人 碼農(nóng)畢業(yè)設(shè)計(jì)下載網(wǎng): 第 23 頁 IteratorEnemy iterEnemy = ().iterator()。 while(()){ Enemy e = ()。 ((), (), (), this)。 } //把緩存圖片繪制進(jìn)去 (image, 0, 0, this)。 } 當(dāng)然游戲的宗旨是讓玩家和電腦之間的互動(dòng),那么就又涉及到一個(gè)問題,就是玩家對(duì)游戲中的馬里奧的控制。我們前面已經(jīng)說過了該類中必須要實(shí)現(xiàn)KeyListener 接口,這個(gè)接口的作用就是使該類中實(shí)現(xiàn)一些方法,以便于達(dá)到玩家在游戲進(jìn)行時(shí)可以對(duì)游戲中的馬里奧進(jìn)行控制。我們這里擬定對(duì)于馬里奧的控制可以使用我們常見的四個(gè)方向鍵,即我們說 的上下左右。并且通過控制臺(tái)打印,可以知道上對(duì)應(yīng)的是 38,右對(duì)應(yīng)的是 39,左對(duì)應(yīng)的是 37。并且游戲的設(shè)定是開始后游戲不會(huì)直接運(yùn)行,而是要使用空格鍵以后游戲才會(huì)真正開始,所以還要加入當(dāng)按空格鍵的時(shí)候游戲正式開始,空格鍵對(duì)應(yīng)的是 32。 public void keyPressed(KeyEvent e) { if(){ //瑪麗奧的移動(dòng)控制 if(()==39){ ()。 } if(()==37){ ()。 } //跳躍控制 if(()==38){ ()。 } }else if(()==32){ 碼農(nóng)畢業(yè)設(shè)計(jì)下載網(wǎng): 第 24 頁 = true。 } } 對(duì)于按鍵,那么相對(duì)應(yīng)的就是當(dāng)抬起建的時(shí)候。因?yàn)槟阆蛴乙苿?dòng)的時(shí)候,如果這時(shí)候突然停止,那么很可能馬里奧會(huì)保持一個(gè)運(yùn)動(dòng)的狀態(tài)停下來,那么就必須在瑪麗奧停 止的時(shí)候給他一個(gè)指令,讓他的移動(dòng)圖片變?yōu)殪o止。相對(duì)于運(yùn)動(dòng)的時(shí)候是類似的,這里不做累述。 public void keyReleased(KeyEvent e) { if(){ //控制瑪麗奧的停止 if(()==39){ ()。 } if(()==37){ ()。 } } 當(dāng)這一切都做好以后 ,那么最后就應(yīng)該在類中重寫一下 run 方法了,在這個(gè)方法中應(yīng)當(dāng)提一下游戲的通關(guān)和死亡后的狀態(tài)。即游戲通關(guān),或者馬里奧死亡時(shí)應(yīng)當(dāng)彈出一個(gè)窗口,說明游戲通關(guān)或者馬里奧死亡,并且點(diǎn)擊了這個(gè)窗口以后,游戲應(yīng)當(dāng)結(jié)束,而且整個(gè)游戲也應(yīng)當(dāng)關(guān)閉。 if(()){ (this, 游戲結(jié)束 )。 (0)。 } if(()){ (this, 恭喜游戲通關(guān)! )。 (0)。 } 碼農(nóng)畢業(yè)設(shè)計(jì)下載網(wǎng): 第 25 頁 初始化類 用于存放游戲所需要的所有靜態(tài)文件,在游戲開始的時(shí)候?qū)⑺形募?dǎo)入,提高游戲的運(yùn)行速度。并且在該類中將所有需要用到的圖片進(jìn)行分類,分為障礙物類,馬里奧類,敵人類以及背景圖片。當(dāng)游戲運(yùn)行時(shí)可以直接調(diào)用這些集合中的圖片進(jìn)行遍歷,在調(diào)用的時(shí)候更加方便,而且可以使馬里奧或者敵人在移動(dòng)的時(shí)候產(chǎn)生動(dòng)態(tài)效果。 首先在類中應(yīng)當(dāng)定義一個(gè)靜態(tài)的 List,泛型為 BufferedImage,屬性名字為allMarioImage,這個(gè)屬性的作用在于存放所有的馬里奧圖片,里面包括了馬里奧的移動(dòng)圖片,站立圖片以及馬里奧跳躍的圖片。這樣在程序運(yùn)行的時(shí)候就可以從該類中的這個(gè)屬性里面將所需要的馬里奧圖片直接調(diào)用出來,并且還可以在馬里奧移動(dòng)時(shí)不斷遍歷里面的圖片,這樣就可以使馬里奧產(chǎn)生移動(dòng)的動(dòng)態(tài)效果。接下來要在該類中定義開始圖片,結(jié)束圖片以及背景圖片,默認(rèn)的初始值都為 null。注意這些所有的屬性都是靜態(tài)的,包括下面要提到的所有的屬性,這樣做的目的是為了在程序運(yùn)行時(shí)先加載這些圖片。然后應(yīng)當(dāng)定義存放食人花的 List 集合allFlowerImage,這個(gè)集合將食人花的不同形態(tài),張嘴、閉嘴圖片存放進(jìn)去,這樣在運(yùn)行的時(shí)候進(jìn)行遍歷就可以打到動(dòng)態(tài)效果。同理存放蘑菇怪的集合allTrangleImage,以及存放所有障礙物的集合 allObstructionImage。 public class StaticValue { public static ListBufferedImage allMarioImage = new ArrayListBufferedImage()。 public static BufferedImage startImage = null。 public static BufferedImage endImage = null。 public static BufferedImage bgImage = null。 public static ListBufferedImage allFlowerImage = new ArrayListBufferedImage()。 public static ListBufferedImage allTriangleImage = new ArrayListBufferedImage()。 public static ListBufferedImage allObstructionImage = new 碼農(nóng)畢業(yè)設(shè)計(jì)下載網(wǎng): 第 26 頁 ArrayListBufferedImage()。 定義完這些屬性之后,剩下的就是初始化了,在該類中定義一個(gè) init()方法,這個(gè)方法在執(zhí)行的時(shí)候會(huì)將所需的所有圖片放入到之前定義好的各個(gè)集合中。因?yàn)閳D片存放的路徑都是一樣的,所以為了減少代碼量會(huì)定義一個(gè)公共路徑ImagePath。然后就可以利用循環(huán),將存放的圖片全部導(dǎo)入進(jìn)去。 //介紹代碼量,定義公共路徑 public static String ImagePath = ()+/bin/。 //定義方法 init(),將圖片初始化 public static void init(){ //利用循環(huán)將瑪麗奧圖片初始化 for(int i=1。i=10。i++){ try { ((new File(ImagePath+i+.png)))。 } catch (IOException e) { // TODO Autogenerated catch block ()。 } } //導(dǎo)入背景圖片 try { startImage = (new File(ImagePath+))。 bgImage = (new File(ImagePath+))。 endImage = (new File(ImagePath+))。 } catch (IOException e) { // TODO Autogenerated catch block ()。 } //導(dǎo)入瑪麗奧死亡圖片 try { 碼農(nóng)畢業(yè)設(shè)計(jì)下載網(wǎng): 第 27 頁 mariDeadImage = (new File(ImagePath+))。 } catch (IOException e) { // TODO Autogenerated catch block ()。 } } } 背景類 該類表示馬里奧及障礙物和敵人所處的場(chǎng)景,并且將障礙物和敵人繪制到場(chǎng)景中。在該類中包括用于存放敵人和障礙物的 list 集合,以及當(dāng)敵人或者障礙物被消滅后用于存放已經(jīng)消失的敵人和障礙物的集合,這樣做是為了在馬里奧死亡時(shí)重置場(chǎng)景所用的。其次在該類中還使用了控制敵人移動(dòng)的方法,是為了在程序之初控制敵人靜止,然后在玩家點(diǎn)擊空格以后在使得敵人開始移動(dòng)。并且在第六個(gè)關(guān)卡處設(shè)置了一個(gè)隱形通關(guān)要點(diǎn),只有當(dāng)馬里奧頂?shù)竭@個(gè)隱形磚塊時(shí)才會(huì)出現(xiàn),馬里奧就可以借助這個(gè)磚塊通過關(guān)卡。 首先背景類中肯定要有一個(gè)標(biāo)記來表示現(xiàn)在是第幾個(gè)場(chǎng)景,因?yàn)椴煌谋尘爸兴L制的場(chǎng)景,障礙物等也不同,所以該類中要有一個(gè) int 類型的場(chǎng)景順序 sort。并且在游戲的設(shè) 定中,如果玩家玩到最有一關(guān)的時(shí)候馬里奧會(huì)失去玩家的控制,自己走向城堡。那么這里就要這幾一個(gè)標(biāo)記,是否為最后的場(chǎng)景,類型為 boolean類型。如果馬里奧失去所有生命值,或者游戲通關(guān)的話,那么游戲就會(huì)結(jié)束,這里還應(yīng)當(dāng)加一個(gè) boolean 的標(biāo)記 isOver 判斷游戲是否結(jié)束。 public class BackGround { //當(dāng)前場(chǎng)景圖片 private BufferedImage bgImage = null。 //場(chǎng)景順序 private int sort。 //是否為最后的場(chǎng)景 private boolean flag。 碼農(nóng)畢業(yè)設(shè)計(jì)下載網(wǎng): 第 28 頁 //游戲結(jié)束標(biāo)記 private boolean isOver = false。 在最后一個(gè)關(guān)卡中,馬里奧到達(dá)旗桿的位置后就會(huì)失去控制,同時(shí)旗子將會(huì)開始下降,只有等旗子下降完畢后,馬里奧才能開始移動(dòng),所以這里還要定義一個(gè)旗子是否下降完畢的 boolean 類型的屬性 isDown,用于判斷馬里奧什么時(shí)候移動(dòng)。 //定義降旗結(jié)束 private boolean isDown = false。 當(dāng)馬里奧失去生命的時(shí)候,但是并沒有失去所有的生命,那么這個(gè)時(shí)候應(yīng)當(dāng)重 置這個(gè)場(chǎng)景,將所有消滅掉的障礙物和敵人全部還原。因此除了在該類中除了要定義存放敵人和障礙物的 List 集合以外,還應(yīng)當(dāng)有存放被消滅的敵人或者障礙物的 List,當(dāng)敵人或者障礙物被消滅的時(shí)候先放入到這個(gè) List 中,這樣在充值的時(shí)候就可以直接將這個(gè)集合中的數(shù)據(jù)在還原到原先的集合里面。 //用集合保存敵人 private ListEnemy allEnemy = new ArrayListEnemy()。 //用集合保存障礙物 private ListObstruction allObstruction = new ArrayListObstruction()。 //被消滅的敵人 private ListEnemy removeEnemy = new ArrayListEnemy()。 //被消滅的障礙物 private ListObstruction removeObstruction = new ArrayListObstruction()。 在游戲的設(shè)定中,應(yīng)當(dāng)是游戲開始的時(shí)候,所有的敵人其實(shí)是靜止的,而且玩家也不能控制馬里奧,必須要等到玩家按空格鍵開始以后 游戲才會(huì)進(jìn)行,那么這里就應(yīng)當(dāng)在定義一個(gè)方法,即當(dāng)玩家空格鍵的時(shí)候會(huì)調(diào)用這個(gè)方法,同時(shí)游戲中的敵人開始移動(dòng),游戲正式開始。這個(gè)方法也就是相當(dāng)于控制敵人開始移動(dòng)的方法,所以命名為 enemyStartMove()方法。 //敵人開始移動(dòng) public void enemyStartMove(){
點(diǎn)擊復(fù)制文檔內(nèi)容
環(huán)評(píng)公示相關(guān)推薦
文庫(kù)吧 www.dybbs8.com
備案圖片鄂ICP備17016276號(hào)-1