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

正文內(nèi)容

桌面彈球(java開發(fā))分析及源碼-wenkub.com

2025-06-23 16:37 本頁(yè)面
   

【正文】 在開發(fā)桌面彈球的過程中,我們將界面中的磚塊抽象成一個(gè)二維數(shù)組,將游戲中的相關(guān)組件(小球、擋板)都抽象成為一個(gè)對(duì)象,并為JFrame提供了鍵盤監(jiān)聽器,當(dāng)監(jiān)聽器接收到按鍵信息后,就會(huì)調(diào)用相關(guān)的方法去操作游戲中的各個(gè)對(duì)象,并將這些對(duì)象畫到界面中。 j bricks[i].length 。 計(jì)分可以簡(jiǎn)單實(shí)現(xiàn)一個(gè)即時(shí)計(jì)分的功能也比較簡(jiǎn)單,可以給在BallGame類中增加一個(gè)靜態(tài)的int屬性去保存分?jǐn)?shù),然后再磚塊與各個(gè)道具類中增加一個(gè)分?jǐn)?shù)的屬性,如果有碰撞的時(shí)候,便把這些分?jǐn)?shù)加到BallGame的計(jì)分器中。 7 功能改進(jìn)設(shè)計(jì)從前面的幾小節(jié)可以看到,本游戲并沒有加入關(guān)卡、計(jì)分等概念,而且道具的種類比較少,整個(gè)游戲玩起來(lái)會(huì)比較枯燥,其實(shí)我們不必做太多的工作,就能把這些概念加到游戲中去。 } } } return true。 i 。 道具的效果,當(dāng)游戲中的擋板接收到綠色的道具時(shí)(加長(zhǎng)擋板),擋板的寬度就發(fā)生了改變,這是由于我們?cè)贛agic的子類(LongMagic)中設(shè)置了擋板的寬度。 道具的下落 改變擋板的長(zhǎng)度(道具的作用)、磚塊是否發(fā)生碰撞的方法,因此在這里改變擋板長(zhǎng)度,實(shí)現(xiàn)起來(lái)將會(huì)十分簡(jiǎn)單,只要判斷道具與擋板是否有碰撞(調(diào)用isHitStick方法),如果擋板與“掉下來(lái)”的道具發(fā)生碰撞,便調(diào)用Magic對(duì)象的magicDo方法,magicDo方法會(huì)將擋板的長(zhǎng)度,見以下代碼。amp。 i++ ) { for ( int j = 0 。 道具的移動(dòng)當(dāng)小球與磚塊發(fā)生碰撞后,磚塊將會(huì)變成道具()。 } return false。amp。在這里,由于擋板是長(zhǎng)方形的,而且擋板的y坐標(biāo)是不變的,所以可以不使用上節(jié)判斷小球與磚塊碰撞的方法。 小球與磚塊碰撞,當(dāng)小球與磚塊發(fā)生碰撞的時(shí)候,磚塊就會(huì)變成道具,并且該道具會(huì)進(jìn)行下落。 return true。 //brick的中心y坐標(biāo) double brickY = () + ().getHeight(null)/2。代碼清單:code\ball\src\org\crazyit\ball\public boolean isHitBrick( Brick brick ) { if ( () ) { return false。如果玩家按下的是右鍵,處理方式與左鍵類似,只不過是方向相反。 //().reStart( ballFrame )。 創(chuàng)建磚塊 設(shè)置擋板的位置(移動(dòng)擋板)擋板的移動(dòng)主要是依靠監(jiān)聽玩家的鍵盤操作,然后做出相應(yīng)的反應(yīng),去改變擋板的坐標(biāo)位置,所以需要以一個(gè)KeyEvent對(duì)象做為這個(gè)方法的參數(shù),在方法內(nèi)可以通過這個(gè)對(duì)象的getKeyCode()方法去獲取玩家所按下的鍵盤按鍵,先看以下代碼。amp。 j bricks[i].length。創(chuàng)建了磚塊的二維數(shù)組后,我們就需要將這個(gè)二維數(shù)組“畫”到BallPanel中,為BallService的draw加入相關(guān)的實(shí)現(xiàn)即可。有三個(gè)參數(shù):String類型的圖片文件路徑path,還有代表返回?cái)?shù)組大小的xSize與ySize,這兩個(gè)參數(shù)是int類型。 //設(shè)置y坐標(biāo) ( y )。 if( isDisable ){ random = 0。 j++) { //創(chuàng)建一個(gè)新的磚塊 random = (int)( () * 3 )。 //迭代初始化數(shù)組 for ( int i = 0 。 int y = 0。BallService中所有的方法都是對(duì)這些對(duì)象進(jìn)行處理,修改它們的相關(guān)屬性或者執(zhí)行相關(guān)的行為。 }}在這個(gè)構(gòu)造器的參數(shù)中,除了讀取圖片文件的path參數(shù)和對(duì)象坐標(biāo)的x與y參數(shù),還有一個(gè)int類型的參數(shù)type,構(gòu)造器主要是根據(jù)這個(gè)參數(shù)的值去決定此對(duì)象包含的Magic,magic就是一個(gè)LongMaigc對(duì)象,magic就是一個(gè)ShortMagic對(duì)象,如果magic不是空值 ,就設(shè)置magic的x與y坐標(biāo)。 if( type == ) { = new LongMagic( img/, x, y )。 //如果擋板沒有變短過 if( () = imageWidth ) { //將擋板的寬度改為一半 ( (int)(() * ) )。代碼清單:code\ball\src\org\crazyit\ball\public void magicDo( Stick stick ) { double imageWidth = ().getWidth(null)。} public abstract void magicDo( Stick stick )。為Ball對(duì)象添加了相關(guān)的屬性后,我們可以在BallService的draw方法中,將一個(gè)小球“畫”到BallPanel中。在這里,小球?qū)ο笥袃煞N狀態(tài),一種是小球是否開始運(yùn)動(dòng),這種狀態(tài)下,如果小球沒有開始運(yùn)動(dòng),代表準(zhǔn)備開始游戲,反則代表游戲已經(jīng)開始,沒游戲沒結(jié)束之前,小球就一直運(yùn)動(dòng);一個(gè)是小球是否結(jié)束運(yùn)動(dòng),如果小球結(jié)束運(yùn)動(dòng),代表游戲已經(jīng)結(jié)束,小球不能再運(yùn)動(dòng),擋板也不再受玩家的控制,反則代表正在游戲中。代碼清單:code\ball\src\org\crazyit\ball\public Ball( int panelWidth , int panelHeight , int offset, String path ) throws IOException { //調(diào)用父構(gòu)造器 super( panelWidth, panelHeight, path )。 } else { // 清除原來(lái)的圖像 (0, 0, width, height)。}由于擋板的長(zhǎng)度可能會(huì)改變,所以Stick類有的個(gè)int 類型的preWidth屬性,代表?yè)醢宓拈L(zhǎng)度,并定義一個(gè)final int類型的SPEED屬性,代表?yè)醢宓囊苿?dòng)速度,每次移動(dòng),x坐標(biāo)都會(huì)向左或者向右移動(dòng)SPEED個(gè)坐標(biāo)位置,需要為preWidth屬性提供setter與getter方法。在從磁盤讀取圖片的過程是一個(gè)IO操作,所以會(huì)拋出IOException,見以下代碼。 //設(shè)置y坐標(biāo) ( panelHeight ().getHeight( null ) )。當(dāng)我們?nèi)?shí)現(xiàn)setStickPos方法的時(shí)候,就需要設(shè)置小球?yàn)檫\(yùn)動(dòng)狀態(tài),啟動(dòng)彈球游戲就意味著小球開始進(jìn)行運(yùn)動(dòng)。如果此類的屬性timer為空,就以ActionListern對(duì)象為參數(shù)去創(chuàng)建一個(gè)每100毫秒執(zhí)行一次的Timer,并用調(diào)用start()方法啟動(dòng)Timer,如果timer不為空,直接調(diào)用restart()方法啟動(dòng)timer。if( == 0 ) { //定義鍵盤監(jiān)聽適配器 KeyListener keyAdapter = new KeyAdapter(){ public void keyPressed( KeyEvent ke ) { //改變擋板的坐標(biāo) ( ke )。//如果timer不為空,調(diào)用timer的restart方法if( timer != null ) { //重新開始timer ()。在這個(gè)彈球游戲中,我們只有鍵盤操作,所以只監(jiān)聽鍵盤的操作,用一個(gè)KeyListener去監(jiān)聽鍵盤的動(dòng)作,請(qǐng)看以下代碼。 ()。 運(yùn)行效果編寫了BallFrame的初始化代碼后,我們可以運(yùn)行具體查看相關(guān)的游戲效果。 單態(tài)模式簡(jiǎn)介單態(tài)模式也可以叫單例模式,該模式保證一個(gè)類有且僅有一個(gè)實(shí)例,并為外界提供一個(gè)訪問,讓外界可以通過這個(gè)訪問點(diǎn)來(lái)訪問該類的唯一實(shí)例。 } return ballPanel。}看加粗的一行代碼ballPanel = getBallPanel()是調(diào)用本類中的getBallPanel()方法去獲取一個(gè)BallPanle對(duì)象,BallPanel是本類的一個(gè)內(nèi)部類,并且繼承JPanel,見以下代碼。 //設(shè)置為不可改變大小 ( false )。4 主界面實(shí)現(xiàn)在這個(gè)桌面彈球游戲中,游戲中的所有元素都是用Graphics對(duì)象畫出來(lái)的,所以,我們的主界面應(yīng)該是一個(gè)只設(shè)置了窗口標(biāo)題還有顏色等基本屬性的JFrame,在這個(gè)JFrame中,我們只需要提供一個(gè)JPanel對(duì)象即可,因?yàn)橛螒虻慕缑娌]有多復(fù)雜的布局與界面交互。我們使用了BallService類來(lái)處理大部分的游戲邏輯,主界面類中幾乎不包括任何的邏輯處理,該類維護(hù)一個(gè)BallService的對(duì)象,得到界面中相關(guān)對(duì)象的信息后,可以調(diào)用BallService中的方法進(jìn)行處理,并根據(jù)返回的信息來(lái)改變界面。在本章的程序中,BallService處理所有的相關(guān)邏輯,例如判斷小球在運(yùn)動(dòng)的過程中是否越界、游戲是否勝利等。q Brick[][] createBrickArr( String path, int xSize, int ySize ),創(chuàng)建磚塊,返回一個(gè)Brick類型的數(shù)組,參數(shù)path是指磚塊的圖片,xSize與ySize是數(shù)組的長(zhǎng)度。q isHitStick( BallComponent image ),測(cè)試某元素與擋板是否有碰撞。這些功能的實(shí)現(xiàn)都有對(duì)應(yīng)的方法,如下: q void run(),小球進(jìn)行運(yùn)動(dòng)。在本例中,小球?qū)ο笾槐4嬉恍┫嚓P(guān)的屬性,例如橫向速度與縱向速度(圖片、位置與大小在父類中體現(xiàn)),如果需要改變小球的速度,可以調(diào)用相關(guān)的setter方法來(lái)進(jìn)行,但是我們需要知道由哪些對(duì)象來(lái)改變小球的相關(guān)屬性,我們?cè)谇懊娴恼鹿?jié)中提到,提供一個(gè)業(yè)務(wù)類進(jìn)負(fù)責(zé)處理游戲的相關(guān)邏輯,因此,業(yè)務(wù)類就需要維護(hù)一個(gè)小球的對(duì)象,來(lái)控制小球的運(yùn)動(dòng)或者其他行為。q boolean isStarted(),小球是否已經(jīng)在運(yùn)動(dòng)。游戲結(jié)束后,小球也是處于靜止?fàn)顟B(tài),但不能再移動(dòng),同樣,用一個(gè)stop屬性來(lái)標(biāo)志小球是否能再移動(dòng)。由于該類繼承于BallComponet類,因此只需要提供一個(gè)構(gòu)造器即可。為了程序的可擴(kuò)展性,我們?cè)谶@里將一個(gè)道具變?yōu)橐粋€(gè)抽象類(Magic),當(dāng)我們需要有其他形式的道具的時(shí)候,就可以為該類添加子類,并提供不同的實(shí)現(xiàn)。確定了一個(gè)磚塊由一個(gè)Brick對(duì)象來(lái)表示后,在界面中,我們可以提供一個(gè)Brick的二維數(shù)組,來(lái)表示界面中所有的
點(diǎn)擊復(fù)制文檔內(nèi)容
范文總結(jié)相關(guān)推薦
文庫(kù)吧 www.dybbs8.com
備案圖片鄂ICP備17016276號(hào)-1