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

正文內容

桌面彈球(java開發(fā))分析及源碼-文庫吧資料

2025-07-02 16:37本頁面
  

【正文】 簡單起見,沒有加入游戲關卡的概念,沒有去設置每一關的磚塊與道具等東西的分布,所以,游戲開始的時候,我們會用一個方法名為createBrickArr的方法去隨機產(chǎn)生磚塊與道具,先看以下代碼。由于BallService負責處理幾乎全部的游戲邏輯,那么該類中就需要維護界面所有的組件:小球對象、擋板對象、磚塊的二維數(shù)組等。當然,同樣需要為magic與disalbe屬性增加相應的setter和getter方法。 ( y )。 } else if( type == ) { = new ShortMagic( img/, x, y )。代碼清單:code\ball\src\org\crazyit\ball\public Brick(String path, int type, int x, int y ) throws IOException { super(path)。 }}這里的流程和LongMagic中實現(xiàn)的方法相似,首先獲取擋板圖片的長度,如果現(xiàn)在的長度大于或者等于圖片的長度,說明擋板的長度沒有減少過,就調用Stick的setPreWidth方法把擋板的長度設置為一半。代碼清單:code\ball\src\org\crazyit\ball\public void magicDo( Stick stick ) { double imageWidth = ().getWidth(null)。 //如果擋板沒有變長過 if( () = imageWidth ) { //將擋板的長度改為雙倍 ( (int)(() * 2 ) )。Magic類有兩個子類:LongMagic與ShortMagic,這兩個道具的功能是使游戲中的擋板變長和變短,功能都在magicDo的實現(xiàn)方法中實現(xiàn),首先看LongMagic類實現(xiàn)的magicDo方法。這個構造器只調用父類BallComponent的構造器,去設置道具的表現(xiàn)圖片與初始坐標。代碼清單:code\ball\src\org\crazyit\ball\public Magic( String path, int x , int y ) throws IOException { super( path, x, y )。((), (), (), null)。我們把小球的速度方向分為橫與豎兩個方向,所以這里用int類型的speedX與speedY兩個屬性去代表小球的橫向方向與豎向方向,并增加相應的setter與getter方法。我們在Ball中提供一個started的屬性來標識這兩種狀態(tài)。接下來把y坐標設置到板位上面的位置。 //設置y坐標 ( panelHeight ().getHeight( null ) offset )。 創(chuàng)建擋板 小球(Ball類)此類提供一個以畫板的寬、高、擋板高度與小球的圖片路徑為參數(shù)的構造器,見以下代碼。 // 繪制擋板圖像 ((), (), (), stick .getPreWidth(), ().getHeight(null), null)。 } else if (()) { // 繪制游戲結束圖像 ((), (), (), width, height 10, null)。實現(xiàn)了擋板類后,我們可以實現(xiàn)BallService的draw方法,先將擋板“畫”到BallPanel中,并在BallPanel中調用BallService的draw方法,以下是BallService的draw方法的部分實現(xiàn)。 //設置x坐標 = (int)( ( panelWidth ( null ) ) / 2 )。代碼清單:code\ball\src\org\crazyit\ball\public BallComponent( int panelWidth , int panelHeight, String path ) throws IOException { super()。接下來把y坐標設置到畫板的底部,再根據(jù)讀取出來的圖片的寬度去設置Stick對象的初始長度屬性。 //設置原本的長度 = ().getWidth( null )。代碼清單:code\ball\src\org\crazyit\ball\public Stick( int panelWidth , int panelHeight, String path ) throws IOException { //調用父構造器 super( panelWidth, panelHeight, path )。當我們在游戲中按下左右鍵的時候,同時需要移動擋板,啟動游戲后,我們并不需要關心小球的移動,僅僅設置小球的運動狀態(tài),換言之,setStickPos方法只是處理擋板的移動,小球的運動讓BallService的run處理(run方法100毫秒執(zhí)行一次)。接下來再增加事件監(jiān)聽器,先使用JFrame的keyKeyListeners()方法獲取本窗口的KeyLister數(shù)組,如果這個數(shù)組的長度為空,說明本窗口并沒有添加到任何KeyListener,所以就創(chuàng)建一個KeyAdapter(為JFrame創(chuàng)建一個鍵盤監(jiān)聽器)并重寫KeyAdapter類的void keyPressed(KeyEvent ke)方法,這個方法用來監(jiān)聽鍵盤的按鍵是否有按下,如果有的話,就需要調用BallService的setStickPos方法。在這里我們需要明白的是,第一次進行游戲時,timer為null,就需要進行創(chuàng)建,當進行第二次游戲的時候,timer非空,由于游戲停止(勝利或者失?。虼诵枰{用restart方法重新啟動。}首先,建立一個ActionListener對象做為Timer的task,這個task主要是處理游戲中各個組件位置的改變以及reapint畫板,這個task每100毫秒執(zhí)行一次,即每隔一百毫秒小球(或者其他組件)會執(zhí)行一次運動。 } }。}//增加事件監(jiān)聽器KeyListener[] klarr = ()。} else { //新建一個timer timer = new Timer( 100, task )。 }}。代碼清單:code\ball\src\org\crazyit\ball\//ActionListener task = new ActionListener(){ public void actionPerformed( ActionEvent e ) { //開始改變位置 ()。 監(jiān)聽器與Timer,類似于Window系統(tǒng)的計劃任務或者Linux系統(tǒng)的crobtab,并用start()方法去啟用Timer。 (true)。編寫創(chuàng)建BallFrame的代碼: BallFrame ballFrame = new BallFrame()。為一個類實現(xiàn)單態(tài)模式,需要為該類提供一個私有的構造器,再提供一個可以獲取該類實現(xiàn)的方法(為外界提供唯一的訪問點),私有構造器是為了不讓外界去使用new關鍵字來創(chuàng)建該類的實現(xiàn),如果外鍵可以使用new關鍵字來創(chuàng)建該類的實例,那么就意味著該類將不會是單態(tài),有可能外界多次通過new關鍵字來創(chuàng)建,這就無法保證該對象的實例的唯一性。在我們平時開發(fā)的過程中,會遇到一些不需要多次創(chuàng)建的對象,例如JDBC的Connection對象,那么我們就可以利用單態(tài)模式來創(chuàng)建這些對象。如果遇到一些對象并不需要多次創(chuàng)建或者創(chuàng)建這些對象將會嚴重消耗系統(tǒng)資源,那么我們可以考慮將該對象寫成單態(tài)的。}在這里需要注意的是,我們需要在BallFrame中維護一個BallPanel的對象,然后通過getBallPanel的方法來獲得BallPanel的實例,由于BallPanel并不需要每次去創(chuàng)建,所以我們可以將BallPane變成單態(tài)的。 //設置畫板的大小 ( new Dimension( BALLPANEL_WIDTH, BALLPANEL_HEIGHT ) )。代碼清單:code\ball\src\org\crazyit\ball\//定義一個JPanel內部類來完成畫圖功能public class BallPanel extends JPanel { /** * 重寫void paint( Graphics g )方法 * * param g Graphics * return void */ public void paint( Graphics g ) { //可以調用BallService的draw方法進行繪制 }}而獲取這個BallPanel實現(xiàn)是在BallPanel getBallPanel方法中,此類保證這個Panel是單態(tài)的,每次只有一個BallPanle對象,見以下代碼。 //把畫板加到JFrame ( ballPanel )。 //設置背景為黑色 ( )。代碼清單:code\ball\src\org\crazyit\ball\public void initialize() throws IOException { //設置窗口的標題 (彈球)。當我們實現(xiàn)游戲的一些相關邏輯的時候(球的運動、道具的下落等),我們可以調用JPanel的repaint方法將JPanel進行重繪。在創(chuàng)建游戲各個對象的過程中,我們將處理邏輯的方法放置到一個業(yè)務類中,從一定程度上講,減少了代碼之間的耦合,并遵循了單一職責的原則。例如小球的運動,我們可以調用BallService的run方法,再調用BallSerivce的draw方法將小球的圖片“畫”到界面中。q BallPanel getBallPanel(),獲取一個BallPanel類型的JPanel去充當畫板,BallPanel是這個類中的一個內部類。在例中BallService處理了大部分的游戲邏輯,當然,我們也可將這些邏輯放到相關的類中(即前面提到的充血模式),例如道具的下落、擋板的移動等。我們需要在游戲中通過上、下、左、右的鍵來控制擋板的位置,因此就需要提供一個setStickPos的方法來改變擋板的位置。q void draw
點擊復制文檔內容
范文總結相關推薦
文庫吧 www.dybbs8.com
備案圖鄂ICP備17016276號-1