夢幻之旅

          DEBUG - 天道酬勤

             :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理 ::
            671 隨筆 :: 6 文章 :: 256 評論 :: 0 Trackbacks

          周六無聊,花了二個小時寫了一個游戲的大體框架.
          Game.java

          @SuppressWarnings("unused")
          public class Game 
          {
              
          private Scene scene;
              
          private GameEngine gameEngine;
              
              
          public Game()
              
          {
                  
          this.scene = new Scene();
                  
          this.gameEngine = new GameEngine();
              }

              
              
          public static void main(String[] args)
              
          {
                  
          new Game();
              }

          }

          GameEngine.java

          import java.awt.Graphics2D;
          import java.awt.Image;


          public class GameEngine implements Runnable
          {
              
          /** 引擎重畫間隔 */
              
          private int engineInterval = 30;
              
              
          /** 游戲引擎刷新線程 */
              
          private Thread refresher;
              
              
          /** 游戲主窗口 */
              
          private GameFrame gameFrame;
              
              
          /** 雙緩存作圖區 */
              
          private Image imageBuffer;
              
              
          /** ImageIterm緩存 */
              
          public static ImageItermCahe imageItermCache = new ImageItermCahe();
              
              
          public GameEngine()
              
          {
                  
          this.refresher = new Thread(this);
                  
          this.gameFrame = new GameFrame();
                  
          this.imageBuffer = this.gameFrame.createImage(
                          
          this.gameFrame.getWidth(), this.gameFrame.getHeight());
                  
                  
          /** 啟動游戲引擎 */
                  
          this.refresher.start();
              }

              
              
          private void working()
              
          {
                  Graphics2D imageBufferGraphics 
          = (Graphics2D)(this.imageBuffer.getGraphics());
                  imageBufferGraphics.clearRect(
          00785360);
                  
          for(ImageIterm imgIterm : GameEngine.imageItermCache.getImgItermLst())
                  
          {
                      
          /** 刪除已經刪除的圖項 */
                      
          if(GameEngine.imageItermCache.getImgItermMap().get(imgIterm.getId()) == null)
                      
          {
                          GameEngine.imageItermCache.getImgItermLst().remove(imgIterm);
                          
          continue;
                      }

                      imageBufferGraphics.drawImage(imgIterm.getImg(),
                              imgIterm.getXTargetTop(),
                              imgIterm.getYTargetTop(),
                              imgIterm.getXTargetBot(),
                              imgIterm.getYTargetBot(),
                              imgIterm.getXSourceTop(),
                              imgIterm.getYSourceTop(),
                              imgIterm.getXSourceBot(),
                              imgIterm.getYSourceBot(), 
          null);
                  }

                  
          this.gameFrame.setImageBuffer(this.imageBuffer);
                  
          this.gameFrame.repaint();
              }

              
              
          public void run()
              
          {
                  
          while(true)
                  
          {
                      
          this.working();
                      
          try
                      
          {
                          Thread.sleep(
          this.engineInterval);
                      }

                      
          catch(Exception ex)
                      
          {
                          ex.printStackTrace();
                      }

                  }

              }

              
              
          public void setEngineInterval(int engineInterval)
              
          {
                  
          this.engineInterval = engineInterval;
              }

          }

          GameFrame.java

           

          import java.awt.Graphics;
          import java.awt.Image;

          import javax.swing.JFrame;

          @SuppressWarnings(
          "serial")
          public class GameFrame extends JFrame 
          {
              
          /** 緩存作圖區 */
              
          private Image imageBuffer;

              
          public GameFrame() 
              
          {
                  
          this.setTitle("游戲作圖區");
                  
          this.setSize(785360);
                  
                  
          /** 定位游戲窗口在屏幕上的位置 */
                  
          this.setLocation((this.getToolkit().getScreenSize().width - this.getWidth()) / 2,
                          (
          this.getToolkit().getScreenSize().height - this.getHeight()) / 2);

                  
          this.setDefaultCloseOperation(3);
                  
          this.setResizable(false);
                  
          this.setVisible(true);
              }


              
          public void update(Graphics g) 
              
          {
                  
          if (this.imageBuffer != null
                  
          {
                      
          this.getGraphics().drawImage(imageBuffer, 00this);
                  }

              }

              
              
          public void setImageBuffer(Image imageBuffer)
              
          {
                  
          this.imageBuffer = imageBuffer;
              }

          }


           還有三個類在下一篇.

          posted on 2010-03-21 10:13 HUIKK 閱讀(239) 評論(0)  編輯  收藏 所屬分類: Java
          主站蜘蛛池模板: 龙口市| 黄龙县| 通化市| 绿春县| 同德县| 阿勒泰市| 久治县| 明溪县| 竹山县| 岢岚县| 全椒县| 襄城县| 舒城县| 林周县| 正安县| 綦江县| 梅州市| 郴州市| 通城县| 明溪县| 科技| 隆尧县| 聂拉木县| 柯坪县| 饶平县| 兴安盟| 凯里市| 望江县| 白玉县| 东城区| 襄城县| 酒泉市| 江都市| 龙陵县| 安阳市| 万源市| 双桥区| 宜良县| 东光县| 土默特左旗| 基隆市|