2013-08-07 66 views
0

我剛纔試圖製作一個遊戲,在地圖上沒有幾個邊框,這是從文本文檔生成的。文本文件有1s和0s,其中ther是1它顯示了牆。那麼,如何讓這樣的字符盈停止牆如何設置邊框圖形G JAVA

我的代碼:

主類: 公共類JavaGame {

public static void main(String[] args) { 
    final Platno p = new Platno(); 
    final JFrame okno = new JFrame("Test"); 
    Mapa map = new Mapa(); 
    okno.setResizable(false); 
    okno.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
    okno.setSize(800, 600); 
    okno.setVisible(true); 

    map.nacti(); 
    okno.add(p); 

    p.mapa = map; 


    okno.addKeyListener(new KeyListener() { 

     @Override 
     public void keyTyped(KeyEvent e) { 
     } 

     @Override 
     public void keyPressed(KeyEvent e) { 
      int kod = e.getKeyCode(); 
      if(kod == KeyEvent.VK_LEFT) 
      { 
       Platno.x -= 3; 
       p.repaint(); 
      } 
      else if(kod == KeyEvent.VK_RIGHT) 
      { 
       Platno.x +=3; 
       p.repaint(); 
      } 
      else if(kod == KeyEvent.VK_UP) 
      { 
       Platno.y -=3; 
       p.repaint(); 
      } 
      else if(kod == KeyEvent.VK_DOWN) 
      { 
       Platno.y +=3; 
       p.repaint(); 
      } 
     } 

     @Override 
     public void keyReleased(KeyEvent e) { 
     } 
    }); 

/* Timer = new Timer(1, new ActionListener() { 

     @Override 
     public void actionPerformed(ActionEvent e) 
     { 
      Platno.y -=3; 
      p.repaint(); 
     } 
    }); */ 
}` 

地圖加載器類:

public void nacti() 
{ 
    try (BufferedReader br = new BufferedReader(new FileReader("map1-1.txt"))) 
    { 
     String radek; 
     int cisloRadku = 0; 

     while((radek = br.readLine()) != null) 
     { 
      for(int i = 0; i < radek.length(); i++) 
      { 
       char znak = radek.charAt(i); 
       int hodnota = Integer.parseInt(String.valueOf(znak)); 
       pole[i][cisloRadku] = hodnota; 
      } 
      cisloRadku++; 
     } 
    } 
    catch (Exception ex) 
    { 
     JOptionPane.showMessageDialog(null, "Error: "+ex.getMessage()); 
    } 
} 

public void vykresli(Graphics g) 
{ 
    try { 
     wall = ImageIO.read(ClassLoader.getSystemResource("Images/wall.gif")); 
    } catch (IOException ex) { 
     JOptionPane.showMessageDialog(null, "Error: "+ex.getMessage()); 
    } 
    for(int i = 0; i < pole[0].length; i++) 
    { 
     for(int j = 0; j < pole.length; j++) 
     { 
      if(pole[j][i] == 1) 
      { 
       g.setColor(Color.RED); 
        // g.fillRect(j*40, i*40, 40, 40); 
         g.drawImage(wall, j*40, i*40, null); 
      } 
     } 
    } 
}` 

和英雄級:

​​

感謝您的幫助:)

+0

你想實現的碰撞邏輯,或繪製代碼? – Fernando

+0

碰撞邏輯 –

回答

0

您可以計算移動的'未來位置'並測試碰撞。 如果碰撞發生,不要移動,否則你可以移動。

看看這個邏輯可以幫助你:

public boolean willCollide(int row, int col, Board map) 
{ 
    return map[row][col] == 1; 
} 

public void moveLeft(Hero hero, Board map) 
{ 
    //watch for index out of bounds! 
    int futureCol = hero.y - 1; 
    if (! willCollide(hero.row, futureCol) 
    hero.y = futureCol; 
} 
+0

謝謝;)它的工作!非常感謝;) –

+0

不客氣!你可以接受答案,關閉它。 – Fernando