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

正文內(nèi)容

桌面彈球(java開發(fā))分析及源碼-資料下載頁

2025-06-26 16:37本頁面
  

【正文】 ) )/ 2) { //使brick無效 ( true )。 return true。 } return false。}粗體代碼部分就是以(x1,y1),(x2,y2)兩個(gè)點(diǎn)的距離與n、r的和比較,如果這個(gè)距離小于和,就調(diào)用Brick對象的setDisable方法把Brick對象設(shè)置為無效,并返回true。我們將磚塊的二維數(shù)組“畫”到BallPanel中的時(shí)候(遍歷二維數(shù)組),得到每一個(gè)磚塊對象,都需判斷該對象的disable屬性,如果該屬性為true,則表示這塊磚塊仍然處在原來的位置,如果該屬性為false,則表示這塊磚塊已經(jīng)被小球碰撞,并出“跌落”了相應(yīng)的道具,在draw的時(shí)候,就需要將道具的圖片畫到界面中(BallPanel)。 小球與磚塊碰撞,當(dāng)小球與磚塊發(fā)生碰撞的時(shí)候,磚塊就會變成道具,并且該道具會進(jìn)行下落。道具的移動(dòng)、道具與擋板的碰撞我們將在下面的章節(jié)中描述。 小球、道具與擋板碰撞我們需要實(shí)現(xiàn)BallService的isHitStick方法,該方法判斷小球、道具與擋板是否發(fā)生了碰撞,只要它們發(fā)生了碰撞,該方法就需要返回true。isHitStick方法只要判斷是否發(fā)生了碰撞,至于發(fā)生碰撞后所需要處理的事情,并不由該方法進(jìn)行處理。在這里,由于擋板是長方形的,而且擋板的y坐標(biāo)是不變的,所以可以不使用上節(jié)判斷小球與磚塊碰撞的方法。假設(shè)擋板的坐標(biāo)是指這個(gè)長方形的左上角,用(x1,y1)表示,擋板的長度為n,那么,只要小球或者道具的x坐標(biāo)處于x1與x1+n之間(也就是處于擋板的范圍內(nèi)),y坐標(biāo)大于y1,那么就可以判斷它們在碰撞,見以下代碼。代碼清單:code\ball\src\org\crazyit\ball\public boolean isHitStick( BallComponent bc ) { //獲取圖片對象 Image tempImage = ()。 //如果與擋板有碰撞 if( () + (null) () amp。amp。 () () + () amp。amp。 () + (null) () ) { return true。 } return false。}這個(gè)方法中的參數(shù)bc代表的是小球或者道具,加粗代碼部分是判斷它們是否有碰撞,() + (null) ()amp。amp。 () () + ()是確認(rèn)bc的x坐標(biāo)是不是處于擋板的范圍內(nèi),() + (null) ()是確認(rèn)bc的y坐標(biāo)是否大于擋板的y坐標(biāo)。 道具的移動(dòng)當(dāng)小球與磚塊發(fā)生碰撞后,磚塊將會變成道具()。前面的章節(jié)中講到這個(gè)游戲有兩個(gè)道具,LongMagic與ShortMagic,作用分別是使擋板就長或者變短,而道具是保存在Brick對象中,所以我們需要遍歷bricks數(shù)組中的所有Brick對象,如果Brick對象的狀態(tài)是disable為true(也就是說磚塊被小球消掉),而且這個(gè)Brick對象中有Magic對象不為null,并且Magic對象的y坐標(biāo)小于小于畫板的高度height(這里意思是說這個(gè)道具還在畫板的范圍之內(nèi)),那么,()個(gè)y坐標(biāo)值,達(dá)到道具向下移動(dòng)的效果,見如下代碼。代碼清單:code\ball\src\org\crazyit\ball\public void setMagicPos() { for ( int i = 0 。 i 。 i++ ) { for ( int j = 0 。 j bricks[i].length 。 j++ ) { //獲取magic Magic magic = bricks[i][j].getMagic()。 if( magic != null ) { //如果這個(gè)brick的狀態(tài)是無效的 if( bricks[i][j].isDisable() amp。amp。 () height ) { //設(shè)置magic的y坐標(biāo)向下增加 ( () + () )。 //設(shè)置擋板的寬度 setStickWidth( magic )。 } } } }}以上的代碼實(shí)現(xiàn)了setMagicPos方法,該方法每執(zhí)行一次,都會改變道具的位置,因此,我們可以在BallService的run方法調(diào)用setMagicPos方法(run方法每100毫秒執(zhí)行一次),如果磚塊被消除的話,界面中就會出現(xiàn)下落的道具。 道具的下落 改變擋板的長度(道具的作用)、磚塊是否發(fā)生碰撞的方法,因此在這里改變擋板長度,實(shí)現(xiàn)起來將會十分簡單,只要判斷道具與擋板是否有碰撞(調(diào)用isHitStick方法),如果擋板與“掉下來”的道具發(fā)生碰撞,便調(diào)用Magic對象的magicDo方法,magicDo方法會將擋板的長度,見以下代碼。代碼清單:code\ball\src\org\crazyit\ball\public void setStickWidth( Magic magic ) { if( isHitStick( magic ) ) { //道具的作用 ( stick )。 }}在本章中只涉及兩個(gè)道具:縮短擋板和加長擋板,并且我們在Magic的兩個(gè)子類中已經(jīng)對其提供了相應(yīng)的實(shí)現(xiàn),因此我們在以上的代碼中可以直接調(diào)用Magic的magicDo方法,這樣就可以將當(dāng)前的擋板加長或者縮短。,接下來我們可以運(yùn)行游戲查看效果。 道具的效果,當(dāng)游戲中的擋板接收到綠色的道具時(shí)(加長擋板),擋板的寬度就發(fā)生了改變,這是由于我們在Magic的子類(LongMagic)中設(shè)置了擋板的寬度。 判斷是否已經(jīng)通關(guān)在本游戲中,是否通關(guān)的標(biāo)準(zhǔn)是,小球是否已經(jīng)將所有的磚塊清除。因此我們實(shí)現(xiàn)該功能的時(shí)候,就需要在BallService中對磚塊的二維數(shù)進(jìn)行遍歷,如果該數(shù)組中所有的磚塊對象的disable屬性都為御true的話,就意味著所有的磚塊都已經(jīng)被“擊落”,這一關(guān)游戲通過;如果數(shù)組中的某一個(gè)磚塊的disable屬性為false的話,游戲需要繼續(xù)進(jìn)行。代碼清單:code\ball\src\org\crazyit\ball\public boolean isWon() { //如果消了全部磚塊,則為贏 for ( int i = 0 。 i 。 i++ ) { for ( int j = 0 。 j bricks[i].length 。 j++ ) { if(!bricks[i][j].isDisable() ) { return false。 } } } return true。}實(shí)現(xiàn)了isWon方法后,我們可以啟動(dòng)游戲進(jìn)行測試,由于我們在前面章節(jié)實(shí)現(xiàn)draw方法的時(shí)候,就需要調(diào)用isWon方法來判斷游戲是否勝利,如果勝利的話,就需要將游戲勝利的圖片“畫“到BallPanel中,當(dāng)游戲勝利時(shí)。 游戲勝利到此,我們的桌面彈球游戲就已經(jīng)全部實(shí)現(xiàn)了,可以運(yùn)行游戲進(jìn)行測試。我們這個(gè)桌面彈球并沒有任何復(fù)雜的功能,只是在小球運(yùn)動(dòng)的過程中將磚塊消除并轉(zhuǎn)化成相應(yīng)的道具,最后判斷游戲是否已經(jīng)勝利,我們可以在此基礎(chǔ)上開發(fā)出更多有趣的功能,例如加入分?jǐn)?shù)的計(jì)算、加入多種道具等。 7 功能改進(jìn)設(shè)計(jì)從前面的幾小節(jié)可以看到,本游戲并沒有加入關(guān)卡、計(jì)分等概念,而且道具的種類比較少,整個(gè)游戲玩起來會比較枯燥,其實(shí)我們不必做太多的工作,就能把這些概念加到游戲中去。如果我們需要加入更多的游戲道具,可以繼承Magic對象并實(shí)現(xiàn)magicDo方法。如果需要更改磚塊的排列,可以編寫程序動(dòng)態(tài)創(chuàng)建磚塊的二維數(shù)組。 關(guān)卡我們可以設(shè)計(jì)每一關(guān)磚塊的不同排列方式,與及里面所包括的道具,可以怎么去設(shè)置這個(gè)東西?好,我們可以使用最簡單的一個(gè)txt文本去設(shè)置每關(guān)的磚塊與道具,例如使用一個(gè)“*”號去代表磚塊,然后在“*”號旁邊加上一個(gè)小括號去加入道具的類型,見以下文檔:*(0) *(0) *(0) *(0) *(0) *(0)*(0) *(0) *(1) *(0) *(0) *(4)*(0) *(0) *(0) *(0) *(0) *(0)*(0) *(0) *(0) *(0) *(0) *(0)*(0) *(0) *(0) *(2) *(0) *(0)*(3) *(0) *(0) *(0) *(0) *(0)*(0) *(0) *(0) *(0) *(0) *(0)*(0) *(0) *(0) *(0) *(0) *(0) 然后我們就可以通過IO操作去讀取與分析這個(gè)文件,分析后便設(shè)置到Brick類型的數(shù)組里面。 計(jì)分可以簡單實(shí)現(xiàn)一個(gè)即時(shí)計(jì)分的功能也比較簡單,可以給在BallGame類中增加一個(gè)靜態(tài)的int屬性去保存分?jǐn)?shù),然后再磚塊與各個(gè)道具類中增加一個(gè)分?jǐn)?shù)的屬性,如果有碰撞的時(shí)候,便把這些分?jǐn)?shù)加到BallGame的計(jì)分器中。 道具由于我們的道具使用了一個(gè)Magic抽像類作為接口,增加新的道具也比較簡單,例如我現(xiàn)在要增加一個(gè)一次能把所有磚塊清掉的道具,那么,我可以新建一個(gè)叫KillAllMagic的類,繼承Magic類,并實(shí)現(xiàn)里面的doMagic方法,見以下代碼:public void magicDo( Stick stick ) { for ( int i = 0 。 i 。 i++ ) { for ( int j = 0 。 j bricks[i].length 。 j++ ) { bricks.[i][i].setDisable(true)。 } }} 把所有的磚塊都設(shè)置為無效果,就清除掉所有的磚塊了。8 本章小結(jié)本章主要是通過一個(gè)彈球游戲的基本實(shí)現(xiàn),向讀者講解Java的畫圖方法,主要是使用Graphics對像的drawImage方法去畫圖。在開發(fā)桌面彈球的過程中,我們將界面中的磚塊抽象成一個(gè)二維數(shù)組,將游戲中的相關(guān)組件(小球、擋板)都抽象成為一個(gè)對象,并為JFrame提供了鍵盤監(jiān)聽器,當(dāng)監(jiān)聽器接收到按鍵信息后,就會調(diào)用相關(guān)的方法去操作游戲中的各個(gè)對象,并將這些對象畫到界面中。本章主要詳細(xì)描述了鍵盤事件監(jiān)聽器、在Swing組件中畫圖等相關(guān)知識點(diǎn)。
點(diǎn)擊復(fù)制文檔內(nèi)容
范文總結(jié)相關(guān)推薦
文庫吧 www.dybbs8.com
備案圖鄂ICP備17016276號-1