java - 从 map pacman java中删除点

标签 java swing collision pacman

我正在编写我的 pacman 代码,已经有 pacman 移动、从 txt 加载 map 以及与墙壁碰撞。当 pacman 位于点域时,下一步是点橡皮擦。我需要任何建议如何做到这一点,我尝试通过以与背景相同的颜色绘制点来删除它,但它不起作用。这是代码

board.java

public class Board extends JPanel implements ActionListener {

    private Timer timer;
    private Map m;
    private Player p;

    public Board(){
        m = new Map();
        p = new Player();
        addKeyListener(new Klawa());
        setBackground(Color.BLACK);
        setFocusable(true);
        timer = new Timer(25, this);
        timer.start();
    }

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

    for(int x=0; x<14; x++){
        for(int y=0; y<14; y++){
            if(m.getMap(x,y).equals("s")){
                g.drawImage(m.getWall(),x *32,y *32, this);
            }
            if(m.getMap(x,y).equals("k")){
                g.drawImage(m.getDot(),x *32,y *32, this);
            }                 
        }
    }

    g.drawImage(p.getPlayer(),p.getTileX()* 32 ,p.getTileY() * 32,null);

    }

    public void erase(Graphics g){
    super.paint(g);
        if(m.getMap(p.getTileX(),p.getTileY()).equals("k")){            
            g.drawImage(m.getErase(),p.getTileX(),p.getTileY(), this);
        }
    }            



    public class Klawa extends KeyAdapter {

        @Override
        public void keyPressed(KeyEvent e){
            int keycode = e.getKeyCode();

            if (keycode == KeyEvent.VK_W){
                if(!m.getMap(p.getTileX(),p.getTileY() - 1).equals("s")){                    
                    p.move(0, -1);                  
                    }
                }           
            if (keycode == KeyEvent.VK_S){
                if(!m.getMap(p.getTileX(),p.getTileY() + 1).equals("s")){
                    p.move(0, 1);
                }
            }
            if (keycode == KeyEvent.VK_A){
                if(!m.getMap(p.getTileX() - 1,p.getTileY()).equals("s")){                                   
                    p.move(-1, 0);
                }
            }
            if (keycode == KeyEvent.VK_D){
                if(!m.getMap(p.getTileX() + 1,p.getTileY() ).equals("s")){
                p.move(1, 0);  
                }
            }                        
        }
        public void keyRelased(KeyEvent e){

        }
        @Override
        public void keyTyped(KeyEvent e){

        }


    }
    @Override
    public void actionPerformed(ActionEvent e) {

       repaint();
    }
}

map .java

public class Map {

    private Scanner m;
    private String Map[] = new String[16];
    private Image wall, dot, erase;

    public Map(){

       wall = new ImageIcon("C:\\Users\\Kotek\\Desktop\\pacman\\sciana.png").getImage();
       dot = new ImageIcon("C:\\Users\\Kotek\\Desktop\\pacman\\kropka.png").getImage();
       erase = new ImageIcon("C:\\Users\\Kotek\\Desktop\\pacman\\wymaz.png").getImage();
       openFile();
       readFile();
       closeFile();
    }

    public Image getWall(){
        return wall;
    }

    public Image getDot(){
        return dot;
    }

    public Image getErase(){
        return erase;
    }


    public String getMap(int x, int y){
       String index = Map[y].substring(x, x+1);
       return index;     
    }

    public void openFile(){
       try{
           m = new Scanner(new File("C:\\Users\\Kotek\\Desktop\\pacman\\mapa.txt"));
       }catch(FileNotFoundException e){
           System.out.println("Blad podczas ladowania mapy");
       }
    }
    public void readFile(){
       while(m.hasNext()){
           for(int i=0; i<14; i++){
               Map[i] = m.next();
           }
       }
    }
    public void closeFile(){
       m.close();
    }

}

最佳答案

在你的 Map 类中你应该实现方法

public void setMap(int x, int y, String  value ){
   //remove the "k" from the string
}

在erase()方法中,只需清理模型的单元格并调用repaint()

关于java - 从 map pacman java中删除点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25360578/

相关文章:

java - 如何将 JTable 列设置为 String 并按 Double 排序?

java - TableCellEditor:按下按键清除原始文本;如果没有给出输入则保留值

python - Pygame碰撞检测问题

python - Pygame - 检测组中的碰撞时出错

java - 如何更改我的 Web 项目的起始页?

java - 使用 log4j 的 Sentry 日志记录不起作用

java - 无法编译明显相同的源

java - Weblogic 12c 上的 Spring-boot war

java - BoxLayout 的对齐问题

collision - 在高度图三角形上查找点的高度