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

正文內(nèi)容

基于java的魔塔游戲的設(shè)計與實現(xiàn)論文-資料下載頁

2024-11-07 21:59本頁面

【導(dǎo)讀】1.了解和運用Java面向?qū)ο蟮奶匦裕?.熟練掌握模塊化設(shè)計的思想,鍛煉使用java語言的能力;3.深入分析魔塔游戲的關(guān)鍵技術(shù)與編寫語言;4.深入了解魔塔游戲各個模塊的具體功能;5.設(shè)計魔塔游戲的各個功能模塊以及模塊之間的關(guān)系;7.訓(xùn)練檢索文獻資料和利用文獻資料的能力;8.訓(xùn)練撰寫技術(shù)文檔與學(xué)位論文的能力。1.綜述魔塔游戲的項目背景及功能;8.對測試結(jié)果進行分析,并對相關(guān)部分代碼進行修改;9.對完整的基于java的魔塔游戲的運行結(jié)果記錄。1.內(nèi)容完整、層次清晰、敘述流暢、排版規(guī)范的畢業(yè)設(shè)計論文;[7]林建素,孟康健.《Eclipse開發(fā)學(xué)習(xí)筆記》(第1版).北京.電子工業(yè)出版社,計算機技術(shù)的高速發(fā)展,極大程度上影響著我們的日常生活。戲也越來越普遍。并不代表操作的繁瑣,游戲過程中,玩家只需簡單操作鼠標和鍵盤即可。中穿插了雙緩沖技術(shù)和JavaApplet技術(shù)。用封裝、繼承、多態(tài)的特性,將這一經(jīng)典游戲呈現(xiàn)。

  

【正文】 。 雙緩沖 技術(shù) 當(dāng)調(diào)用 repaint()方法會出現(xiàn)動畫的閃爍,給 玩家 帶來不流暢的視覺感,那么如何來處理掉這種閃爍的效果呢?就是利用 java 的雙緩沖技術(shù) 。 雙緩沖技術(shù)的工作原理:先在內(nèi)存中分配一個圖片和設(shè)置它的大小和游戲窗口一樣(在內(nèi)存中的 空間我 們 是看不到的),然后利用 getGraphics()方法去獲得給空間并將它全部一次性的顯示到 我們 的屏幕上 。 這樣在我 們 的動畫窗口上面是顯示出來 就非常的流暢了 。 避免了上面的閃爍效果 。 雙緩沖技術(shù)示意圖如 圖 53 所 示 : 圖 53 雙緩沖 技術(shù)示意圖 雙緩沖 技術(shù)相關(guān)代碼: public void update(Graphics g) { if (offScreenImage == null) { offScreenImage = (, )。 } 16 Graphics goff = ()。 paint(goff)。 (offScreenImage, 0, 0, null)。 } 鎖機制 在 Java 編寫 的程序中, 有時 會出現(xiàn)多個線程并發(fā)訪問 同一 數(shù)據(jù)的情況,進而造成數(shù)據(jù)的不一致性 , 并 對程序的最終 結(jié)果 造成影響。 所以 Java 語言提出 了一個全新的概念 ——鎖。 鎖機制 的 出現(xiàn)可以很方便的實現(xiàn)原子性 。將 所有的公有屬性 (即 會被多個線程共同訪問的 代碼 ) 放在 一個有 ―鎖 ‖的 代碼塊中,這個代碼塊被稱為同步代碼塊。 同步 代碼塊有兩部分組成:一部分是 公共 資源,放在大括號中 , 稱之為公共資源 ;一部分是標識此為同步代碼塊的標 志 符 (synchronized 關(guān)鍵字 )。 synchronized { //代碼塊 } 每個 Java 對象都可以用做一個實現(xiàn)同步的鎖,這些鎖被 稱 為內(nèi)置鎖( Intrinsic Lock)或監(jiān)視鎖( Monitor Lock), 當(dāng)線程 即將運行 有 synchronized 關(guān)鍵字 標識的代碼塊 時 ,會自動獲取到該公有資源的鎖。 當(dāng)程序 在退出 代碼 塊時 將會 釋放 這個 鎖 資源( 無論是通過正常路徑退出 代碼塊,還 是通過拋異常退出 ) 。 一個 線程想要獲取到這個內(nèi)置鎖, 首先要 保證這個鎖資源沒有被其他線程獲取,其次該線程必須要執(zhí)行被這個鎖資源 “鎖 住的 ”代碼塊 。 內(nèi)置鎖為 互斥鎖, 即 線程 A 獲取到 鎖后,其他的所有線程如果還想獲取到該鎖,只有等線程 A 釋放鎖 資源, 在 該階段 這些 線程都將會進入到鎖池等待的狀態(tài) , 只有獲得鎖資源,該線程才會重新進入 可執(zhí)行 狀態(tài),等待 CPU 的 調(diào)用 。 故同步 代碼塊 中 的操作 可以 保證原子性。 當(dāng)某個線程請求一個 被 其它線程持有的內(nèi)置鎖時,發(fā)出請求的線程就會 進入鎖池等待狀態(tài), 直到 該 鎖資源被釋放。 只有 線程獲取到這個鎖資源,該線程才能重新進入到可執(zhí)行狀態(tài),等待被 cpu 調(diào)度 。否則 , 它將會一直處于阻塞狀態(tài)。 17 Java Applet Java Applet 是使用 Java 編程 語言編寫 應(yīng)用 在 頁面 的一種小的 程序 。 它 可以產(chǎn)生豐富的 、 特殊的效果,能夠使我們的頁面看起來不再單一無趣,而是豐富多彩的。 而 包含Java Applet 應(yīng)用 程序的 網(wǎng)頁 被稱之為 JavaPowered 頁 。 用戶訪問 到 JavaPowered 頁時 , Java Applet 將會 被下載到 用戶 的計算機上并執(zhí)行,但是前提是 用戶 使用的瀏覽器必須支持 Java 語言。 Java Applet 還有一個優(yōu)點,就是它是在 用戶 計算機上執(zhí)行的, 因此 它的執(zhí)行速度不會受到網(wǎng)絡(luò) 寬帶、 用戶并發(fā)訪問量的影響, 讓用戶 能夠更好、更快、更流暢的欣賞 嵌入 網(wǎng)頁 的 多媒體 資源。 也 正是因為這個特點, 使得 Java Applet 技術(shù)曾被廣泛的應(yīng)用在網(wǎng)頁技術(shù)。 在 Java Applet 中,可以實現(xiàn)圖形繪制、 字體 和顏色控制、動畫和聲音的插入、人機交互及網(wǎng)絡(luò)交流等功能 .Applet 還提供各種名為抽象窗口 工具箱 (Abstract Window Toolkit,AWT)的窗口環(huán)境開發(fā)工具 ,但 AWT的設(shè)計是存在缺陷的 ,取而代之的 Swing技術(shù)為 Java GUI 組建的輕量組建 .它們利用用戶計算機的 GUI 元素 ,可以建立標準的 圖形用戶界面 ,如窗口、按鈕、滾動條等。目前, 在網(wǎng)絡(luò) 上有非常多的地方應(yīng)用到了 Applet 技術(shù) ,使得我們的網(wǎng)絡(luò)生活更加豐富 多彩 。 事件處理 技術(shù) 編寫 基于 Swing 的游戲應(yīng)用程序必然 會使 用到事件處理技術(shù) ,根據(jù) 玩家 的 操作做出相應(yīng)的事件處理。在 Java 應(yīng)用程序中事件處理有很多種,在本游戲中主要用到鼠標事件、鍵盤事件。 現(xiàn) 就這兩種最為常用的 事件 處理技術(shù)做如下簡短性的介紹: 一、 鼠標 事件 在游戲中 ,玩家會必不可少的 會 使用鼠標進行操作 , 所以 , 鼠標 操作 事件 將是 不可或缺的。 在 Java Swing 中的諸多組件上都可以添加鼠標事件的監(jiān)聽 。實現(xiàn) MouseListener接口 , 可以通過重 寫 不同的方法,對 發(fā)生 在事件源上的 點擊 、釋放鼠標、 鼠標 移入 /移除 事件源、鼠標左鍵 /右鍵 點擊等事件的發(fā)生做出不同的邏輯處理 。實現(xiàn)MouseMotionListener 接口 可以處理拖動 鼠標 和移動鼠標的 事件 。 實現(xiàn) 這兩個接口就可以完成游戲所需的所有的鼠標操作的事件處理。 具體 會對接口中的mouseClicked(MouseEvent e)、 mouseEntered(MouseEvent e)、 mousePressed(MouseEvent e)18 三個 方法進行重 寫 ,實現(xiàn)相應(yīng)的業(yè)務(wù)邏輯。 二 、 鍵盤事件 為了更加的方便玩家操作,還會 設(shè)有一些的鍵盤事件。當(dāng)玩家按下、釋放或敲擊鍵盤上一個鍵時就觸發(fā)了鍵盤事件,必須要有觸發(fā)事件的事件源。當(dāng)一個組件處于激活狀態(tài)時,敲擊鍵盤上一個鍵就導(dǎo)致這個組件觸發(fā)了鍵盤事件。事件源使用 addKeyListener方法獲得監(jiān)視器。監(jiān)視器是一個對象,創(chuàng)建該對象的類必須實現(xiàn)接口 KeyListener。用KeyEvent 類的 public int getKeyCode()方法,可以判斷哪個鍵被按下、敲擊或釋放,getKeyCode()返回一個鍵碼值。也可以用 KeyEvent 類的 public char getKeyChar()判斷哪個鍵被按下、敲擊或釋放, getKeyChar()返回鍵上的字符。 根據(jù) 返回的字符,程序員可以編寫不同的邏輯來處理,從而達到按下不同的鍵, 執(zhí)行 不同的 業(yè)務(wù)邏輯 。 鍵盤 事件主要是對如下幾個方法進行重寫: keyPressed(KeyEvent e)、 keyReleased(KeyEvent e)。 線程 說到 線程,我們就不得不 先 介紹一下進程的概念。進程 是計算機 進行資源 分配 的基本 單位 ??梢哉f 一個 程序的運行就是一個進程的執(zhí)行。但是 由于 計算機的發(fā)展以及復(fù)雜功能 的需求,進程已經(jīng)滿足不了現(xiàn)今社會的一些要求,所以才提出了比進程還要小的線程。 線程 是 程序 運行過程中最小的執(zhí)行單位。 線程 有三個要素: cpu、 代碼 、數(shù)據(jù)。 在Java 語言中 線程 的實現(xiàn)方式主要有兩種:一是 直接 繼承 Thread 類, 二是實現(xiàn) Runnable接口 。 有關(guān)于線程有 兩個最主要的方法: run()方法、 start()方法 。 run()方法規(guī)定 了線程所要 執(zhí)行的 程序 流程。 start()方法是 用來啟動 線程的,相當(dāng)于 向 cpu 發(fā)出執(zhí)行信號,等待 cpu 的調(diào)用。 線程 的狀態(tài)初步分為五種: 初始 狀態(tài): 剛剛 申請了 內(nèi)存空間來 存儲 線程對象, 即剛使用 new 關(guān)鍵字創(chuàng)建 好的線程就會處于該狀態(tài)。 就緒 狀態(tài): 剛剛 創(chuàng)建好的線程調(diào)用了 start()方法 后 所 處的狀態(tài),等待 cpu 的調(diào)度。進入 該狀態(tài)的 線程 就脫離了程序 員 的 控制 。 運行 狀態(tài): 處于 就緒狀態(tài)的線程 獲取到 cpu 的資源 進入 該狀態(tài),該狀態(tài)的線程會去19 執(zhí)行 run()方法 中的代碼 。 阻塞 狀態(tài): 線程 會由于缺少某一資源而無法進入就緒狀態(tài)。 阻塞 狀態(tài)又分為掛起狀態(tài)、 鎖池 等待、等待池等待幾種。掛起狀態(tài) 是由于線程 遇到 sleep()方法或 join()方法 ,放棄了 cpu 的 使用權(quán); 鎖池等待 是 線程 在 執(zhí)行的 過程 中 遇見了 synchronized 關(guān)鍵字申請對象的鎖 資源 ,且 該資源 正被 其他線程使用,故而進入鎖池等待;等待池等待 是 正在運行的線程遇見 wait 操作之后,進入到阻塞狀態(tài),直到收到 notify 或者 notifyAll 所下達的通知, 則 線程會退 出阻塞狀態(tài), 進入鎖 池等待。 死亡 狀態(tài): 一個正在運行 的線程 , 倘若它的 run()方法執(zhí)行結(jié)束 ,則該線程將會進入死亡狀態(tài)。 一個 死亡狀態(tài)的線程 將不能再 轉(zhuǎn)換為其他的 狀態(tài), 同樣死亡狀態(tài)的線程 也不能 再被 cpu 所調(diào) 用 了。 類 加載機制 類 加載 是 執(zhí)行 Java 程序的第一步。研究 類 加載機制 可以讓程序員自己 動態(tài)的控制類的加載 , 從而達到某種特定的要求。同時 , 研究類的加載機制有助于 我們 更好的理解JVM 的 執(zhí)行 過程, 指導(dǎo)程序開發(fā)人員 更有效的 采取相應(yīng)的措施配合程序的執(zhí)行 。 本課題 設(shè)計中,欲設(shè)計一個工具類,通過類加載機制創(chuàng)建出 Image 對象 。 程序員 只需要提供 圖片的存放路徑即可。具體 代碼 如下: public static Image getImage(String path){ BufferedImage image=null。 try { URL u = ().getResource(path)。 image = (u)。 } catch (IOException e) { ()。 } return image。 } 流程 設(shè)計 20 游戲 整體流程 在此 對游戲的整個流程做如下的介紹 。 游戲伊始 ,“勇士” 會被賦予初始屬性值,游戲過程中,將會遇到 四 種情況: ; ; ; 4 怪物 。 獲取 物品,可以提高玩家的屬性值或是獲取道具; 遇到 商店,玩家可以根據(jù)自己的情況,對 “勇士”屬性進行提升 或是 買賣 鑰匙; 遇到 NPC, 諸如 “前輩” 、 “小偷” 、 “ 仙子 ” 、“公主” 等 , 這些 人物 的設(shè)定主要是情節(jié)所需,值得注意的是 “公主” ,當(dāng)玩家遇到她 時 , 意味 著游戲即將結(jié)束,當(dāng)我們完成 “公主”最后 的命令 ——殺死 “魔王”,“勇士”成功, 游戲結(jié)束;遇到 怪物,無非兩種結(jié)局 : 成功 , 游戲繼續(xù);失敗, “勇士”戰(zhàn)死 ,游戲結(jié)束。流程圖如 圖 54 所示 : 游戲開始物品 商店 N P C 怪物獲得物品/屬性提升情景所需N P C公主擊敗魔王戰(zhàn)斗游戲結(jié)束( 失敗 )游戲結(jié)束( 成功 )玩家屬性提高是失敗否否勝利 圖 54 程序 流程圖 物品 獲得流程 游戲 進行的過程中, “勇士”會通過 獲得一些寶物 來 擁有一些特殊技能。 同時 ,也會通過獲得某些物品來促進游戲的進展 。如“ 十字架 ” 、“鐮刀”等 。 圖 55 是 根據(jù)樓 層數(shù)獲 取功能 的 順序 圖: 21 游戲開始 獲得怪物手冊 查看怪物 信息 獲得十字架 提升勇士 屬性 獲得風(fēng)之羅盤 能夠樓層 跳轉(zhuǎn) 獲得鐮刀 鋪設(shè) 18 層道路 游戲結(jié)束 圖 55 功能 獲取 順序 圖 詳細 設(shè)計 勇士 移動 在本次 設(shè)計中,考慮 到人物 的行走動作是多個分解動作的集合,所以設(shè)計借助線程在一個極短的時間內(nèi) 對 多個動作 拼接, 實現(xiàn)勇士的移動效果。 當(dāng) 鍵盤的上、下、左 、 右 鍵 被 按下后,觸發(fā)相應(yīng)的 事件 ,借助線程 通過 對多 個 圖片的 paint(),由于 時間極短,給人視覺上的誤差,讓玩家感覺 勇士 有走動的感覺。具體 實現(xiàn) 代碼如下: class HeroShake extends Shake { public synchronized void run() { while (true) { = 。 try { (25L)。 } catch (Exception localException) { } += 1。 if ( = 5){ return。 } ()。 } } 門 打開效果 22 游戲中 在一些道路上會設(shè)有不同顏色的門,阻礙 勇士前進 的道路 , 勇士需要持有與門 相同顏色的鑰匙才能打開。為了 顯示 出與開門動作相似的效果 。 我采用 了 線程的技術(shù),與實現(xiàn) 人物行走 效果相類似,此處也是在較短時間內(nèi)繪制不同時間段的圖片。詳細 代碼如下: public synchronized void run() { while (true) { = 。
點擊復(fù)制文檔內(nèi)容
環(huán)評公示相關(guān)推薦
文庫吧 www.dybbs8.com
備案圖鄂ICP備17016276號-1