Каждый раз, когда я хочу переместить игрока, лабиринт красит себя вместо игрока - PullRequest
0 голосов
/ 23 марта 2020

В моем коде каждый раз, когда я двигаю плеер, лабиринт снова рисует сам. Я не могу добавить врагов, потому что когда я это делаю, экран начинает сходить с ума и рисует сам себя еще быстрее. Так вот мой код. Я пытаюсь создать игру, которая на самом деле является лабиринтом и марио. Будут враги, которые попытаются напасть на него и убить его, он должен go до конца (зеленый блок).

Проблема в том, что каждый раз, когда игрок перемещает, весь лабиринт снова рисует сам. Я буду рад получить помощь здесь.

//This is my class
public class Maze extends JFrame{
Enemy e1;
Mario mario;
Coin c1;
int scores=0;
//pathX and pathY are the first cordination of mario player
int pathX= 1;
int pathY =1;  
//The maze conatins 1-blocked, 0-empty place to go.
private int[][] maze =
    {       {1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1},
            {1, Globals.MARIO, 1, 0, 1, 0, 1, 0, 0, 0, 0, 0, 1},
            {1, 0, 1, 0, 0, 0, 1, 0, 1, 1, 1, 0, 1},
            {1, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 1},
            {1, 0, 1, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1},
            {1, 0, 1, 0, 1, 1, 1, 0, 1, 0, 0, 0, 1},
            {1, 0, 1, 0, 1, 0, 0, 0, 1, 1, 1, 0, 1},
            {1, 0, 1, 0, 1, 1, 1, 0, 1, 0, 1, 0, 1},
            {1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, Globals.EXIT, 1},
            {1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1}
    };
public int[][] getMaze() {
    return maze;
}
    public Maze() {
    setTitle("Welcome to mario maze!");
    setSize(640,480);
    setLocationRelativeTo(null);
    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    //mario gets x,y in the maze , width and height, health, speed and scores=0.
    mario=new Mario(pathX,pathY,30, 30,100,3.0f,scores);
    e1= new Enemy(6,4,30,30,100,1.0f,this);
    }

}
//this function call other functions of painting.
public void paint(Graphics g) {
      super.paint(g);
      g.translate(50,50);
      drawMaze(g);
      drawMario(g);
      showMarioDetails(g);
      showCoins(g);
      //e1.paint(g);
      Enemy e2= new Enemy (7,7,30,30,100,1.0f,this);
      //e2.paint(g);

    //  EnemyAttacking(mario,e1 );


}



//This is the function that draws the maze:
public void drawMaze(Graphics g)
{
    //Lets draw the maze now:
      for (int row = 0; row < maze.length; row++)
      {
         for (int col = 0; col < maze[0].length; col++)
         {
            Color color=null;
            switch(maze[row][col])
            {
               case Globals.BLOCKED:
               {
                   g.setColor(Color.BLACK);
                   g.drawRect(30*col, 30*row,30,30);
                   g.setColor(Color.BLACK);          
                   g.fillRect(30*col, 30*row,30,30);
                   g.drawImage(new ImageIcon(this.getClass().getResource("../images/tree1.png")).getImage(),col*30,row*30,30,30,this);
                   break;
               }
               case Globals.EXIT: color= Color.GREEN; break;
               default: color=Color.WHITE; break;
            }
            if (maze[row][col] !=1)
            {

                g.setColor(color);          
                g.fillRect(30*col, 30*row,30,30);
                g.setColor(Color.BLACK);
                g.drawRect(30*col,30*row,30,30); 
            }

         }
      }

}
//This is the function that draws mario.
public void drawMario(Graphics g)
{
    mario.setX(pathX);
    mario.setY(pathY);
    if(mario.getHealth()>0)
    {
        g.drawImage(mario.getTexture(), mario.getX()*30,mario.getY()*30,30, 30, this);  
    }
}
protected void processKeyEvent(KeyEvent e)
   {
      if (e.getID() != KeyEvent.KEY_PRESSED)        //check if the player pressed some button.
      {
         return;
      }
      if (e.getKeyCode() == KeyEvent.VK_RIGHT)      //check if the player pressed the right button.
      {  
          if(maze[pathY][pathX+1]!=1)
          {
              pathX++;
              mario.setMarioPic(3);
          }
      }
      else
      if (e.getKeyCode() == KeyEvent.VK_LEFT)       //check if the player pressed the left button.
      {
          if(maze[pathY][pathX-1]!=1)
          {
              pathX--;
              mario.setMarioPic(2);
          }
      }
      else
      if( e.getKeyCode()== KeyEvent.VK_UP)          //check if the player pressed the up button.
      {
          if(maze[pathY-1][pathX]!=1)
          {
              pathY--;
              mario.setMarioPic(1);
          }
      }
      else
      if(e.getKeyCode()==KeyEvent.VK_DOWN)          //check if the player pressed the down button.
      {
          if(maze[pathY+1][pathX]!=1)
          {
              pathY++;
              mario.setMarioPic(0);
          }
      }
      repaint();
   }
...