2012-11-28 132 views
7

我有PAC MAN遊戲代碼 如何在android中將此遊戲稱爲活動.. 我想在android應用程序中調用在線遊戲,而不是在android應用程序中如何調用在線遊戲中的鏈接,如果用戶點擊那個特定的遊戲鏈接,比遊戲午餐形式網上游戲像PAC MAN。 感謝在android中開始遊戲

public class Board extends JPanel implements ActionListener { 

    Dimension d; 
    Font smallfont = new Font("Helvetica", Font.BOLD, 14); 

    FontMetrics fmsmall, fmlarge; 
    Image ii; 
    Color dotcolor = new Color(192, 192, 0); 
    Color mazecolor; 

    boolean ingame = false; 
    boolean dying = false; 

    final int blocksize = 24; 
    final int nrofblocks = 15; 
    final int scrsize = nrofblocks * blocksize; 
    final int pacanimdelay = 2; 
    final int pacmananimcount = 4; 
    final int maxghosts = 12; 
    final int pacmanspeed = 6; 

    int pacanimcount = pacanimdelay; 
    int pacanimdir = 1; 
    int pacmananimpos = 0; 
    int nrofghosts = 6; 
    int pacsleft, score; 
    int deathcounter; 
    int[] dx, dy; 
    int[] ghostx, ghosty, ghostdx, ghostdy, ghostspeed; 

    Image ghost; 
    Image pacman1, pacman2up, pacman2left, pacman2right, pacman2down; 
    Image pacman3up, pacman3down, pacman3left, pacman3right; 
    Image pacman4up, pacman4down, pacman4left, pacman4right; 

    int pacmanx, pacmany, pacmandx, pacmandy; 
    int reqdx, reqdy, viewdx, viewdy; 

    final short leveldata[] = 
    { 19, 26, 26, 26, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 22, 
     21, 0, 0, 0, 17, 16, 16, 16, 16, 16, 16, 16, 16, 16, 20, 
     21, 0, 0, 0, 17, 16, 16, 16, 16, 16, 16, 16, 16, 16, 20, 
     21, 0, 0, 0, 17, 16, 16, 24, 16, 16, 16, 16, 16, 16, 20, 
     17, 18, 18, 18, 16, 16, 20, 0, 17, 16, 16, 16, 16, 16, 20, 
     17, 16, 16, 16, 16, 16, 20, 0, 17, 16, 16, 16, 16, 24, 20, 
     25, 16, 16, 16, 24, 24, 28, 0, 25, 24, 24, 16, 20, 0, 21, 
     1, 17, 16, 20, 0, 0, 0, 0, 0, 0, 0, 17, 20, 0, 21, 
     1, 17, 16, 16, 18, 18, 22, 0, 19, 18, 18, 16, 20, 0, 21, 
     1, 17, 16, 16, 16, 16, 20, 0, 17, 16, 16, 16, 20, 0, 21, 
     1, 17, 16, 16, 16, 16, 20, 0, 17, 16, 16, 16, 20, 0, 21, 
     1, 17, 16, 16, 16, 16, 16, 18, 16, 16, 16, 16, 20, 0, 21, 
     1, 17, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 20, 0, 21, 
     1, 25, 24, 24, 24, 24, 24, 24, 24, 24, 16, 16, 16, 18, 20, 
     9, 8, 8, 8, 8, 8, 8, 8, 8, 8, 25, 24, 24, 24, 28 }; 

    final int validspeeds[] = { 1, 2, 3, 4, 6, 8 }; 
    final int maxspeed = 6; 

    int currentspeed = 3; 
    short[] screendata; 
    Timer timer; 


    public Board() { 

     GetImages(); 

     addKeyListener(new TAdapter()); 

     screendata = new short[nrofblocks * nrofblocks]; 
     mazecolor = new Color(5, 100, 5); 
     setFocusable(true); 

     d = new Dimension(400, 400); 

     setBackground(Color.black); 
     setDoubleBuffered(true); 

     ghostx = new int[maxghosts]; 
     ghostdx = new int[maxghosts]; 
     ghosty = new int[maxghosts]; 
     ghostdy = new int[maxghosts]; 
     ghostspeed = new int[maxghosts]; 
     dx = new int[4]; 
     dy = new int[4]; 
     timer = new Timer(40, this); 
     timer.start(); 
    } 

    public void addNotify() { 
     super.addNotify(); 
     GameInit(); 
    } 


    public void DoAnim() { 
     pacanimcount--; 
     if (pacanimcount <= 0) { 
      pacanimcount = pacanimdelay; 
      pacmananimpos = pacmananimpos + pacanimdir; 
      if (pacmananimpos == (pacmananimcount - 1) || pacmananimpos == 0) 
       pacanimdir = -pacanimdir; 
     } 
    } 


    public void PlayGame(Graphics2D g2d) { 
     if (dying) { 
      Death(); 
     } else { 
      MovePacMan(); 
      DrawPacMan(g2d); 
      moveGhosts(g2d); 
      CheckMaze(); 
     } 
    } 


    public void ShowIntroScreen(Graphics2D g2d) { 

     g2d.setColor(new Color(0, 32, 48)); 
     g2d.fillRect(50, scrsize/2 - 30, scrsize - 100, 50); 
     g2d.setColor(Color.white); 
     g2d.drawRect(50, scrsize/2 - 30, scrsize - 100, 50); 

     String s = "Press s to start."; 
     Font small = new Font("Helvetica", Font.BOLD, 14); 
     FontMetrics metr = this.getFontMetrics(small); 

     g2d.setColor(Color.white); 
     g2d.setFont(small); 
     g2d.drawString(s, (scrsize - metr.stringWidth(s))/2, scrsize/2); 
    } 


    public void DrawScore(Graphics2D g) { 
     int i; 
     String s; 

     g.setFont(smallfont); 
     g.setColor(new Color(96, 128, 255)); 
     s = "Score: " + score; 
     g.drawString(s, scrsize/2 + 96, scrsize + 16); 
     for (i = 0; i < pacsleft; i++) { 
      g.drawImage(pacman3left, i * 28 + 8, scrsize + 1, this); 
     } 
    } 


    public void CheckMaze() { 
     short i = 0; 
     boolean finished = true; 

     while (i < nrofblocks * nrofblocks && finished) { 
      if ((screendata[i] & 48) != 0) 
       finished = false; 
      i++; 
     } 

     if (finished) { 
      score += 50; 

      if (nrofghosts < maxghosts) 
       nrofghosts++; 
      if (currentspeed < maxspeed) 
       currentspeed++; 
      LevelInit(); 
     } 
    } 

    public void Death() { 

     pacsleft--; 
     if (pacsleft == 0) 
      ingame = false; 
     LevelContinue(); 
    } 


    public void moveGhosts(Graphics2D g2d) { 
     short i; 
     int pos; 
     int count; 

     for (i = 0; i < nrofghosts; i++) { 
      if (ghostx[i] % blocksize == 0 && ghosty[i] % blocksize == 0) { 
       pos = 
ghostx[i]/blocksize + nrofblocks * (int)(ghosty[i]/blocksize); 

       count = 0; 
       if ((screendata[pos] & 1) == 0 && ghostdx[i] != 1) { 
        dx[count] = -1; 
        dy[count] = 0; 
        count++; 
       } 
       if ((screendata[pos] & 2) == 0 && ghostdy[i] != 1) { 
        dx[count] = 0; 
        dy[count] = -1; 
        count++; 
       } 
       if ((screendata[pos] & 4) == 0 && ghostdx[i] != -1) { 
        dx[count] = 1; 
        dy[count] = 0; 
        count++; 
       } 
       if ((screendata[pos] & 8) == 0 && ghostdy[i] != -1) { 
        dx[count] = 0; 
        dy[count] = 1; 
        count++; 
       } 

       if (count == 0) { 
        if ((screendata[pos] & 15) == 15) { 
         ghostdx[i] = 0; 
         ghostdy[i] = 0; 
        } else { 
         ghostdx[i] = -ghostdx[i]; 
         ghostdy[i] = -ghostdy[i]; 
        } 
       } else { 
        count = (int)(Math.random() * count); 
        if (count > 3) 
         count = 3; 
        ghostdx[i] = dx[count]; 
        ghostdy[i] = dy[count]; 
       } 

      } 
      ghostx[i] = ghostx[i] + (ghostdx[i] * ghostspeed[i]); 
      ghosty[i] = ghosty[i] + (ghostdy[i] * ghostspeed[i]); 
      DrawGhost(g2d, ghostx[i] + 1, ghosty[i] + 1); 

      if (pacmanx > (ghostx[i] - 12) && pacmanx < (ghostx[i] + 12) && 
       pacmany > (ghosty[i] - 12) && pacmany < (ghosty[i] + 12) && 
       ingame) { 

       dying = true; 
       deathcounter = 64; 

      } 
     } 
    } 


    public void DrawGhost(Graphics2D g2d, int x, int y) { 
     g2d.drawImage(ghost, x, y, this); 
    } 


    public void MovePacMan() { 
     int pos; 
     short ch; 

     if (reqdx == -pacmandx && reqdy == -pacmandy) { 
      pacmandx = reqdx; 
      pacmandy = reqdy; 
      viewdx = pacmandx; 
      viewdy = pacmandy; 
     } 
     if (pacmanx % blocksize == 0 && pacmany % blocksize == 0) { 
      pos = 
pacmanx/blocksize + nrofblocks * (int)(pacmany/blocksize); 
      ch = screendata[pos]; 

      if ((ch & 16) != 0) { 
       screendata[pos] = (short)(ch & 15); 
       score++; 
      } 

      if (reqdx != 0 || reqdy != 0) { 
       if (!((reqdx == -1 && reqdy == 0 && (ch & 1) != 0) || 
         (reqdx == 1 && reqdy == 0 && (ch & 4) != 0) || 
         (reqdx == 0 && reqdy == -1 && (ch & 2) != 0) || 
         (reqdx == 0 && reqdy == 1 && (ch & 8) != 0))) { 
        pacmandx = reqdx; 
        pacmandy = reqdy; 
        viewdx = pacmandx; 
        viewdy = pacmandy; 
       } 
      } 

      // Check for standstill 
      if ((pacmandx == -1 && pacmandy == 0 && (ch & 1) != 0) || 
       (pacmandx == 1 && pacmandy == 0 && (ch & 4) != 0) || 
       (pacmandx == 0 && pacmandy == -1 && (ch & 2) != 0) || 
       (pacmandx == 0 && pacmandy == 1 && (ch & 8) != 0)) { 
       pacmandx = 0; 
       pacmandy = 0; 
      } 
     } 
     pacmanx = pacmanx + pacmanspeed * pacmandx; 
     pacmany = pacmany + pacmanspeed * pacmandy; 
    } 


    public void DrawPacMan(Graphics2D g2d) { 
     if (viewdx == -1) 
      DrawPacManLeft(g2d); 
     else if (viewdx == 1) 
      DrawPacManRight(g2d); 
     else if (viewdy == -1) 
      DrawPacManUp(g2d); 
     else 
      DrawPacManDown(g2d); 
    } 

    public void DrawPacManUp(Graphics2D g2d) { 
     switch (pacmananimpos) { 
     case 1: 
      g2d.drawImage(pacman2up, pacmanx + 1, pacmany + 1, this); 
      break; 
     case 2: 
      g2d.drawImage(pacman3up, pacmanx + 1, pacmany + 1, this); 
      break; 
     case 3: 
      g2d.drawImage(pacman4up, pacmanx + 1, pacmany + 1, this); 
      break; 
     default: 
      g2d.drawImage(pacman1, pacmanx + 1, pacmany + 1, this); 
      break; 
     } 
    } 


    public void DrawPacManDown(Graphics2D g2d) { 
     switch (pacmananimpos) { 
     case 1: 
      g2d.drawImage(pacman2down, pacmanx + 1, pacmany + 1, this); 
      break; 
     case 2: 
      g2d.drawImage(pacman3down, pacmanx + 1, pacmany + 1, this); 
      break; 
     case 3: 
      g2d.drawImage(pacman4down, pacmanx + 1, pacmany + 1, this); 
      break; 
     default: 
      g2d.drawImage(pacman1, pacmanx + 1, pacmany + 1, this); 
      break; 
     } 
    } 


    public void DrawPacManLeft(Graphics2D g2d) { 
     switch (pacmananimpos) { 
     case 1: 
      g2d.drawImage(pacman2left, pacmanx + 1, pacmany + 1, this); 
      break; 
     case 2: 
      g2d.drawImage(pacman3left, pacmanx + 1, pacmany + 1, this); 
      break; 
     case 3: 
      g2d.drawImage(pacman4left, pacmanx + 1, pacmany + 1, this); 
      break; 
     default: 
      g2d.drawImage(pacman1, pacmanx + 1, pacmany + 1, this); 
      break; 
     } 
    } 


    public void DrawPacManRight(Graphics2D g2d) { 
     switch (pacmananimpos) { 
     case 1: 
      g2d.drawImage(pacman2right, pacmanx + 1, pacmany + 1, this); 
      break; 
     case 2: 
      g2d.drawImage(pacman3right, pacmanx + 1, pacmany + 1, this); 
      break; 
     case 3: 
      g2d.drawImage(pacman4right, pacmanx + 1, pacmany + 1, this); 
      break; 
     default: 
      g2d.drawImage(pacman1, pacmanx + 1, pacmany + 1, this); 
      break; 
     } 
    } 


    public void DrawMaze(Graphics2D g2d) { 
     short i = 0; 
     int x, y; 

     for (y = 0; y < scrsize; y += blocksize) { 
      for (x = 0; x < scrsize; x += blocksize) { 
       g2d.setColor(mazecolor); 
       g2d.setStroke(new BasicStroke(2)); 

       if ((screendata[i] & 1) != 0) // draws left 
       { 
        g2d.drawLine(x, y, x, y + blocksize - 1); 
       } 
       if ((screendata[i] & 2) != 0) // draws top 
       { 
        g2d.drawLine(x, y, x + blocksize - 1, y); 
       } 
       if ((screendata[i] & 4) != 0) // draws right 
       { 
        g2d.drawLine(x + blocksize - 1, y, x + blocksize - 1, 
           y + blocksize - 1); 
       } 
       if ((screendata[i] & 8) != 0) // draws bottom 
       { 
        g2d.drawLine(x, y + blocksize - 1, x + blocksize - 1, 
           y + blocksize - 1); 
       } 
       if ((screendata[i] & 16) != 0) // draws point 
       { 
        g2d.setColor(dotcolor); 
        g2d.fillRect(x + 11, y + 11, 2, 2); 
       } 
       i++; 
      } 
     } 
    } 

    public void GameInit() { 
     pacsleft = 3; 
     score = 0; 
     LevelInit(); 
     nrofghosts = 6; 
     currentspeed = 3; 
    } 


    public void LevelInit() { 
     int i; 
     for (i = 0; i < nrofblocks * nrofblocks; i++) 
      screendata[i] = leveldata[i]; 

     LevelContinue(); 
    } 


    public void LevelContinue() { 
     short i; 
     int dx = 1; 
     int random; 

     for (i = 0; i < nrofghosts; i++) { 
      ghosty[i] = 4 * blocksize; 
      ghostx[i] = 4 * blocksize; 
      ghostdy[i] = 0; 
      ghostdx[i] = dx; 
      dx = -dx; 
      random = (int)(Math.random() * (currentspeed + 1)); 
      if (random > currentspeed) 
       random = currentspeed; 
      ghostspeed[i] = validspeeds[random]; 
     } 

     pacmanx = 7 * blocksize; 
     pacmany = 11 * blocksize; 
     pacmandx = 0; 
     pacmandy = 0; 
     reqdx = 0; 
     reqdy = 0; 
     viewdx = -1; 
     viewdy = 0; 
     dying = false; 
    } 

    public void GetImages() 
    { 

     ghost = new ImageIcon(Board.class.getResource("../pacpix/ghost.png")).getImage(); 
     pacman1 = new ImageIcon(Board.class.getResource("../pacpix/pacman.png")).getImage(); 
     pacman2up = new ImageIcon(Board.class.getResource("../pacpix/up1.png")).getImage(); 
     pacman3up = new ImageIcon(Board.class.getResource("../pacpix/up2.png")).getImage(); 
     pacman4up = new ImageIcon(Board.class.getResource("../pacpix/up3.png")).getImage(); 
     pacman2down = new ImageIcon(Board.class.getResource("../pacpix/down1.png")).getImage(); 
     pacman3down = new ImageIcon(Board.class.getResource("../pacpix/down2.png")).getImage(); 
     pacman4down = new ImageIcon(Board.class.getResource("../pacpix/down3.png")).getImage(); 
     pacman2left = new ImageIcon(Board.class.getResource("../pacpix/left1.png")).getImage(); 
     pacman3left = new ImageIcon(Board.class.getResource("../pacpix/left2.png")).getImage(); 
     pacman4left = new ImageIcon(Board.class.getResource("../pacpix/left3.png")).getImage(); 
     pacman2right = new ImageIcon(Board.class.getResource("../pacpix/right1.png")).getImage(); 
     pacman3right = new ImageIcon(Board.class.getResource("../pacpix/right2.png")).getImage(); 
     pacman4right = new ImageIcon(Board.class.getResource("../pacpix/right3.png")).getImage(); 

    } 

    public void paint(Graphics g) 
    { 
     super.paint(g); 

     Graphics2D g2d = (Graphics2D) g; 

     g2d.setColor(Color.black); 
     g2d.fillRect(0, 0, d.width, d.height); 

     DrawMaze(g2d); 
     DrawScore(g2d); 
     DoAnim(); 
     if (ingame) 
     PlayGame(g2d); 
     else 
     ShowIntroScreen(g2d); 

     g.drawImage(ii, 5, 5, this); 
     Toolkit.getDefaultToolkit().sync(); 
     g.dispose(); 
    } 

    class TAdapter extends KeyAdapter { 
     public void keyPressed(KeyEvent e) { 

      int key = e.getKeyCode(); 

      if (ingame) 
      { 
      if (key == KeyEvent.VK_LEFT) 
      { 
       reqdx=-1; 
       reqdy=0; 
      } 
      else if (key == KeyEvent.VK_RIGHT) 
      { 
       reqdx=1; 
       reqdy=0; 
      } 
      else if (key == KeyEvent.VK_UP) 
      { 
       reqdx=0; 
       reqdy=-1; 
      } 
      else if (key == KeyEvent.VK_DOWN) 
      { 
       reqdx=0; 
       reqdy=1; 
      } 
      else if (key == KeyEvent.VK_ESCAPE && timer.isRunning()) 
      { 
       ingame=false; 
      } 
      else if (key == KeyEvent.VK_PAUSE) { 
       if (timer.isRunning()) 
        timer.stop(); 
       else timer.start(); 
      } 
      } 
      else 
      { 
      if (key == 's' || key == 'S') 
      { 
       ingame=true; 
       GameInit(); 
      } 
      } 
     } 

      public void keyReleased(KeyEvent e) { 
       int key = e.getKeyCode(); 

       if (key == Event.LEFT || key == Event.RIGHT || 
       key == Event.UP || key == Event.DOWN) 
       { 
       reqdx=0; 
       reqdy=0; 
       } 
      } 
     } 

    public void actionPerformed(ActionEvent e) { 
     repaint(); 
    } 
} 

回答

0

你不能簡單地「給遊戲代碼」。您可以學習,理解和重用邏輯並在Android中構建新遊戲。即使重複使用此代碼也需要進行大量的重構。

如果你想構建Android遊戲,那麼你可以使用像Cocos2D這樣的框架。

這裏有一個很好的教程:

http://dan.clarke.name/2011/04/how-to-make-a-simple-android-game-with-cocos2d/

+0

他們是沒有辦法撥打任何網絡遊戲像flash遊戲我們其他的Java代碼的遊戲嗎?他們只是在Cocos2D上製作遊戲的唯一方法,而不是在Android應用程序中玩遊戲? –

+0

如果瀏覽器支持,您可以在瀏覽器中運行Flash遊戲。您必須在其他平臺上將遊戲重新編碼爲android平臺(除非您正在使用某種模擬器,性能可能會受到影響)。 Cocos2D只是一個框架,還有其他的框架。 –

+0

謝謝... 告訴我一件事。如果遊戲已經安裝在手機上。 如何在我的應用程序中調用該遊戲,或點擊鏈接而不是啓動該遊戲 –