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

正文內(nèi)容

java俄羅斯方塊畢業(yè)論文正文-在線瀏覽

2024-08-08 08:18本頁面
  

【正文】 所以在本程序分析時將獨(dú)立性高的模塊作為一個對象,以提高程序的可擴(kuò)展性和可維護(hù)性。游戲客戶端控制器上集合了游戲的各種事件處理,包括游戲定時控制,鍵盤控制,道具控制,音樂播放,選擇網(wǎng)絡(luò)對戰(zhàn)等各種控制命令。1 客戶端接口的結(jié)構(gòu),:可插入的外觀感覺在AWI組件中,猶豫控制組件外形惡對等類與具體平臺相關(guān),使得AWI組件總是只有與本機(jī)相關(guān)的單一的Lamp。swing對PLamp。F。F,呈現(xiàn)不同個性化界面。設(shè)置邊框可以使用相應(yīng)的方法為swing組件設(shè)置一個或多個邊框。充分利用邊框設(shè)計,可以協(xié)助布局管理器對組件進(jìn)行合理的布局。使用圖標(biāo)此特性使得swing組件較之AWI組件具有更強(qiáng)的外觀感受?;趕wing組件的優(yōu)點(diǎn),結(jié)合本程序的設(shè)計目標(biāo),程序的界面將使用swing組件實(shí)現(xiàn)。本模塊其實(shí)可以分開為方塊和地圖兩個模塊,但考慮到二者聯(lián)系緊密,需要共享數(shù)據(jù)結(jié)構(gòu),屬于公共耦合,耦合性過高,將二者分開也有悖于作者設(shè)計的游戲算法,增加了程序的編寫難度,故把它們并作了一個對象。數(shù)組的第三維和第四維代表某一種形態(tài)的方塊的某一狀態(tài)。當(dāng)方塊翻轉(zhuǎn)時,只需改變第二維的下標(biāo)即可,即,block[0][0][i][j]變?yōu)閎lock[0][1][i][j]。 2.地圖數(shù)據(jù)本游戲的游戲地圖為25x15格,故應(yīng)當(dāng)用一個25行15列的二維數(shù)組存儲游戲地圖數(shù)據(jù),但是考慮到本游戲嵌入了方塊越界自動糾正功能,而方塊越界,實(shí)際上就是游戲地圖數(shù)組越界。3.建立游戲的坐標(biāo)系統(tǒng)俄羅斯方塊,最終是要將方塊繪到游戲地圖中,如何確定方塊在地圖上的位置,就需要一個方塊數(shù)組與游戲地圖數(shù)組的映射關(guān)系。結(jié)合JAVA的坐標(biāo)系統(tǒng),綜合游戲設(shè)計上的考慮,本程序最終確定了將游戲地圖的左上角坐標(biāo)表示為(0,0),同樣,方塊在游戲地圖中表示為記錄方塊左上角在游戲地圖中的坐標(biāo)。對方塊的操作包括方塊的左移、右移、下移等,當(dāng)方塊左移時,只需將方塊數(shù)組左上角的坐標(biāo)往左方向移動一個單位即可,同理,方塊右移、下移時,只需將坐標(biāo)往右、往下移動一個單位。5.游戲繪圖俄羅斯方塊具有七種不同形態(tài)的方塊,而方塊又分別有正在下落和已經(jīng)落下固定兩種不同狀態(tài),如何在游戲地圖中實(shí)現(xiàn)靜態(tài)和動態(tài)地繪制出七種不同形態(tài)的方塊,具有一定的挑戰(zhàn)性。for(int i=0。i++) for(int j=0。j++) if(Block[blocktype][turnstate][i][j]==1)((y+j)*width,(x+i)*width,width,width,raised)。這里面,某一種形態(tài)的方塊是由方塊數(shù)組中的參數(shù)i和j決定的,具體是哪種形態(tài)的方塊,方塊的哪一種翻轉(zhuǎn)狀態(tài),是由參數(shù)blocktype和turnstate決定的。首先,可用一個數(shù)值代表游戲地圖數(shù)組的某一個區(qū)域是否有方塊填充,假定這個數(shù)值是2,即如果地圖數(shù)組中某一個元素的值為2,則表示這個元素所代表的地圖區(qū)域存在方塊。開始結(jié)束否地圖數(shù)組某一行是否全為2是消去這一行 消行流程圖音頻文件的播放涉及到IO操作,不管是何種系統(tǒng),對于IO操作,都是比較慢的,如果當(dāng)程序運(yùn)行到需要播放音效時,再從文件中取得音頻數(shù)據(jù),然后播放,很可能會造成一種“卡”的感覺,影響用戶體驗(yàn)。JAVA語言中的剪輯Clip,是一種在播放之前就提前加載于內(nèi)存中的特殊的音頻數(shù)據(jù)流,當(dāng)需要用時,只需直接從內(nèi)存中調(diào)出即可,省去了IO讀取所需的大量時間,而且剪輯播放完畢后,仍舊存儲在內(nèi)存中,對于游戲的背景音樂及音效這類需要反復(fù)多次播放的音頻,這種方式是非常有用的。1.音效播放在游戲開始、暫停,方塊落下及消行時添加相應(yīng)的音效既可以提醒用戶發(fā)生某種變化,又能增強(qiáng)程序的表現(xiàn)效果。根據(jù)多線程及剪輯的思想,首先在程序初始化時應(yīng)該把音效載入內(nèi)存,游戲開始后開啟一個線程,當(dāng)滿足音效播放的條件時,即播放音效,音效播放完畢后,應(yīng)當(dāng)將相應(yīng)的音頻文件的剪輯位置重新置為開始處。因?yàn)楸尘耙魳凡捎脝为?dú)線程播放,這里面會出現(xiàn)一個問題,當(dāng)用戶選擇暫停背景音樂播放時,背景音樂播放線程是進(jìn)入wait狀態(tài)還是以另一種方式實(shí)現(xiàn)暫停?如果背景音樂進(jìn)入wait狀態(tài),則當(dāng)用戶取消暫停播放時,必須再創(chuàng)建一個線程去喚醒它,新建一個線程只是控制背景音樂播放,不免浪費(fèi)資源,而且也增加程序編寫難度。目前已經(jīng)存在的俄羅斯方塊游戲鮮有能夠使用道具的,開發(fā)一款能夠使用道具功能的俄羅斯方塊游戲具有一定挑戰(zhàn)度,因?yàn)榈谰叩拈_發(fā)不僅涉及到游戲策劃等創(chuàng)意性的內(nèi)容,也與圖形圖像處理等美工技術(shù)息息相關(guān),而作者對美工卻是不擅長的,基于此,本游戲最初版本的道具可能只有一個,但是為了將來版本提升的方便,本程序另外預(yù)留了三種道具的使用接口。1.旋轉(zhuǎn)方塊旋轉(zhuǎn)方塊是一種增加游戲難度的道具,它本身其實(shí)就是方塊,和正常的方塊的不同之處就在于,正常方塊在下落時,如果沒有接受到用戶的控制命令是不會旋轉(zhuǎn)的,而旋轉(zhuǎn)方塊則會不斷地旋轉(zhuǎn)下降。對于旋轉(zhuǎn)方塊的定時下落,可以借用方塊控制線程,但是旋轉(zhuǎn)方塊的定時旋轉(zhuǎn),則只能依靠另一個線程實(shí)現(xiàn)。炸彈的視圖模型以現(xiàn)成的方塊模型為依據(jù),即除了添加的“炸彈”標(biāo)記,它和七種方塊在外形上是沒有任何區(qū)別的。對于炸彈的殺傷力,有一個規(guī)則,如果炸彈能夠沒入已經(jīng)墜下的方塊中,則可以將這個“炸彈”所占的行數(shù)全部炸毀,并增加相應(yīng)的積分,如果本身已經(jīng)能夠消行,則額外再獎勵一倍的積分。目前的俄羅斯方塊游戲中,也鮮有具備網(wǎng)絡(luò)對戰(zhàn)功能的,這是因?yàn)榇祟愋∮螒虿痪邆湓诰W(wǎng)絡(luò)對戰(zhàn)方面的可玩性,當(dāng)然,如果能夠利用道具進(jìn)行網(wǎng)絡(luò)對攻,那就另當(dāng)別論了。所以,本游戲要求將游戲地圖中方塊的實(shí)時信息遠(yuǎn)程傳輸?shù)搅硪环酵婕业娘@示平臺。進(jìn)行網(wǎng)絡(luò)傳輸,首先應(yīng)當(dāng)選定一種網(wǎng)絡(luò)傳輸協(xié)議。對于游戲的網(wǎng)絡(luò)對戰(zhàn)來說,對網(wǎng)絡(luò)傳輸?shù)膶?shí)時性要求比較高,一方玩家必須能夠看到另一方玩家游戲狀況的實(shí)時信息,這就要求圖像的傳輸速率必須要快,同樣因?yàn)樗膶?shí)時性,即使某一次傳輸錯誤,后面一幀圖像也會馬上覆蓋前面的圖像,人的肉眼基本上不能辨別出這種錯誤,基于此,本游戲的網(wǎng)絡(luò)對戰(zhàn)傳輸方式應(yīng)該采用基于UDP的用戶數(shù)據(jù)報協(xié)議。 概要設(shè)計評審經(jīng)過反復(fù)論證,上面提出的設(shè)計方案,尤其是游戲設(shè)計的各個功能模塊間的算法確實(shí)可行,因此,本游戲可進(jìn)入詳細(xì)設(shè)計階段。:游戲客戶端網(wǎng)絡(luò)對戰(zhàn)開 關(guān)背景音樂開 關(guān)游戲控制器游戲開 關(guān)道具控制器游戲定時控 制鍵盤控 制音效控制器 客戶端的組織架構(gòu)圖游戲客戶端采用swing組件開發(fā),并且向其注冊監(jiān)聽器,以實(shí)現(xiàn)各種控制功能,綜合游戲前面的設(shè)計,客戶端上至少要注冊三個監(jiān)聽器,分別是窗口監(jiān)聽器(WindowListener)、動作監(jiān)聽器(ActionListener)、鍵盤監(jiān)聽器(KeyListener)、選項(xiàng)監(jiān)聽器(ItemListener)。JFrame用以創(chuàng)建窗體,考慮到本游戲具備單機(jī)和網(wǎng)絡(luò)對戰(zhàn),JFrame對象的大小并不是不變的,在單機(jī)游戲和網(wǎng)絡(luò)對戰(zhàn)時,JFrame對象分別會呈現(xiàn)出不同大小,以適應(yīng)不同的游戲環(huán)境需求。第一個JPanel對象是用來繪制方塊的游戲地圖,第二個JPanel對象是用來排列其它各種組件的容器組件,做游戲信息顯示面板,可以放在游戲地圖的左邊,第三個JPanel對象是用來顯示NEXT方塊的,應(yīng)該畫在第二個JPanel對象上,第三個JPanel對象是當(dāng)網(wǎng)絡(luò)對戰(zhàn)時,用來繪制另一方玩家游戲地圖的繪圖面板,放在游戲信息顯示面板的右邊。至于四個道具按鈕,可以放在信息顯示面板的中部位置。JTextArea應(yīng)該放在游戲信息面板的底部。本游戲主界面上的JLabel對象至少應(yīng)該有四個。綜合以上信息,可以大概確定本游戲的主界面,: 游戲界面圖本游戲的音效播放采用剪輯及多線程的方式實(shí)現(xiàn)。首先,利用AudioSystem這個音頻工廠的getAudioInputstream()方法從音頻文件中取得一個音頻輸入流,其次,從這個音頻輸入流創(chuàng)建一個Clip,然后打開這個Clip。:開始滿足音效播放條件Notify音效播放線程,游戲線程進(jìn)入wait狀態(tài)播放音效Notify游戲線程,音效播放線程進(jìn)入wait狀態(tài)結(jié)束 音效播放流程圖同音效的播放,背景音樂的播放也應(yīng)當(dāng)采用剪輯的形式,以方便音樂的循環(huán)多次播放,同樣,背景音樂播放也要單獨(dú)的線程進(jìn)行控制。因?yàn)楸尘耙魳凡捎脝为?dú)線程播放,當(dāng)用戶選擇暫停背景音樂播放時,背景音樂播放線程如果以進(jìn)入wait狀態(tài)來暫停的話,則當(dāng)用戶取消暫停時必須還需要一個線程來喚醒它,額外增加一個線程的話,不免浪費(fèi)系統(tǒng)資源,而且也會增加編寫的難度。:開始否背景音樂播放控制線程是否接受到恢復(fù)信息是否處在暫停狀態(tài)是否是播放背景音樂接受到暫停信息暫停播放結(jié)束 背景音樂播放控制流程圖,可以在菜單欄中“游戲”菜單項(xiàng)中添加一個“網(wǎng)絡(luò)對戰(zhàn)”菜單選項(xiàng),當(dāng)用戶單擊“網(wǎng)絡(luò)對戰(zhàn)”菜單選項(xiàng)后,彈出一個對話框,提示用戶輸入要連接的主機(jī)的IP地址,用戶輸入IP地址后,程序會記錄下這個IP地址,當(dāng)用戶開啟游戲后,數(shù)據(jù)傳輸線程會將數(shù)據(jù)發(fā)送到這個IP地址的指定端口號上。首先從AWT包中的Robot創(chuàng)建一個實(shí)例,這個類的實(shí)例是有關(guān)本機(jī)屏幕資源的信息,它有一個createScreenCapture()方法,可以用它來創(chuàng)建屏幕上指定坐標(biāo)位置,指定大小的一副圖像。Component類中提供了一個獲取組件屏幕坐標(biāo)的方法getLocationOnScreen(),我們可以利用這個方法獲取組件在屏幕上的坐標(biāo),然后把這個坐標(biāo)賦給一個Point對象,再從Rectangle類中創(chuàng)建一個指定屏幕坐標(biāo)位置,指定寬和高的矩形,然后就可以用createScreenCapture()創(chuàng)建一副包含游戲地圖區(qū)域的圖像了。im, Stringoutput)方法將圖像文件寫入到一個輸出流中,然后可以用toByteArray()從輸出流中取得數(shù)據(jù),最后就是將數(shù)據(jù)打包發(fā)送了。:開始開始確定游戲地圖在屏幕上的坐標(biāo)構(gòu)造一個指定坐標(biāo)大小的Rectangle對象從指定的端口號接收數(shù)據(jù)包將Rectangle對象指定的屏幕區(qū)域轉(zhuǎn)化為圖像資源從數(shù)據(jù)包中取得字節(jié)數(shù)據(jù)將此圖像資源以某種格式寫入輸出流以此字節(jié)數(shù)據(jù)創(chuàng)建一副圖像從輸出流獲取字節(jié)數(shù)據(jù)將圖像繪制到游戲畫布中將字節(jié)數(shù)據(jù)打包發(fā)送結(jié)束結(jié)束(a) 圖像發(fā)送流程 (b) 圖像接收流程 圖像發(fā)送和接收流程圖旋轉(zhuǎn)方塊的出現(xiàn)是隨機(jī)的,而隨著游戲級別的提升,每一關(guān)出現(xiàn)的旋轉(zhuǎn)方塊的數(shù)量也會不同,對于七種方塊來說,它們在任何一段時間內(nèi)出現(xiàn)的概率都是一致的,再者,旋轉(zhuǎn)方塊需要兩個定時器,定時下落和定時旋轉(zhuǎn)。確定了兩個線程共同控制旋轉(zhuǎn)方塊,就會出現(xiàn)一個線程協(xié)調(diào)工作的問題。因?yàn)閮蓚€線程需要共同控制旋轉(zhuǎn)方塊,所以不能用wait()和notify()這兩個方法去協(xié)調(diào)線程,而應(yīng)當(dāng)利用其它條件去協(xié)調(diào)兩個線程。休眠時間結(jié)束后,循環(huán)檢測正常方塊是否已經(jīng)落下,當(dāng)檢測到方塊落下后,馬上得到一個新方塊,然后開啟一個循環(huán),在方塊沒有落下之前讓它按一定的時間頻率旋轉(zhuǎn),成為一個旋轉(zhuǎn)方塊。:休眠時間結(jié)束隨機(jī)休眠一定時間檢測現(xiàn)有方塊是否已經(jīng)落下是否能夠消行方塊是否已經(jīng)落下是否能夠消行休眠一定時間否是得到新方塊休眠一定時間旋轉(zhuǎn)方塊否是游戲是否結(jié)束是否能夠消行是否開始結(jié)束 旋轉(zhuǎn)方塊控制線程工作圖休眠一定時間,讓旋轉(zhuǎn)方塊控制線程有得到方塊的機(jī)會檢測方塊是否已經(jīng)落下是否能夠消行是休眠時間結(jié)束旋轉(zhuǎn)方塊控制線程是否得到新方塊是否能夠消行是否否得到新方塊方塊下落開始結(jié)束 方塊控制線程對旋轉(zhuǎn)方塊的控制示意圖道具的出現(xiàn)是隨機(jī)的。對于炸彈的控制,可以添加到道具(旋轉(zhuǎn)方塊)控制線程中。這些操作就構(gòu)成了游戲中最基本也是最主要的功能,如得到方塊、方塊的翻轉(zhuǎn)移動、滿行消除等等。例如,定義一個四維數(shù)組,int block[blocktype][turnstate][i][j],這就是七種方塊、四種狀態(tài),一共二十八個方塊的模型。如何將方塊繪制到地圖中去,可以說是游戲主模塊中最大的難題,有了良好的方塊數(shù)據(jù)結(jié)構(gòu)和地圖數(shù)據(jù)結(jié)構(gòu),這個難題也就變得簡單了。良好的數(shù)據(jù)結(jié)構(gòu)讓方塊的移動,滿行消除等操作變得簡單。方塊滿行消除,需要遍歷游戲地圖數(shù)組,發(fā)現(xiàn)某一行數(shù)值全為2,即認(rèn)為這一行被方塊填滿,應(yīng)該消去,行消去之后,應(yīng)該把這行以上的數(shù)據(jù)全部向下移動一行,然后再繼續(xù)往下檢測,有滿行就消行,再把上面的數(shù)據(jù)整體往下移動一行,如此重復(fù),直到將所墜下方塊占據(jù)的行數(shù)檢測完為止。:否是是是否移動方塊游戲是否結(jié)束方塊是否能夠移動游戲開始初始化屏幕移動后是否越界否是方塊是否已落下否是否是否能夠消行是是
點(diǎn)擊復(fù)制文檔內(nèi)容
規(guī)章制度相關(guān)推薦
文庫吧 www.dybbs8.com
備案圖鄂ICP備17016276號-1