2013-10-15 72 views
0

这是我的简单迷宫游戏代码。它正在被编译,MazeGame.java和Board.java的类文件正在创建,但不是Player.java和Map.java。该代码正在编译错误,但没有运行。请帮助我。迷宫游戏编程

//MazeGame.java 
package mygame; 

import javax.swing.*; 

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

    public MazeGame() { 
     JFrame f= new JFrame(); 
     f.setTitle("Maze Game"); 
     f.setSize(450,450); 
     f.setLocationRelativeTo(null); 
     f.add(new Board()); 
     f.setVisible(true); 
     f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
    } 
} 



//Board.java 
package mygame; 

import java.awt.event.*; 
import javax.swing.*; 
import java.awt.*; 
import java.awt.*; 

public class Board extends JPanel implements ActionListener { 
    private Timer timer; 
    private Map m; 
    private Player p; 
    private boolean win=false; 
    private String Message=""; 
    private Font font = new Font("Comic Sans",Font.BOLD,50); 

    public Board() { 
     m = new Map(); 
     p = new Player(); 

     addKeyListener(new Al()); 
     setFocusable(true); 

     timer = new Timer(25,this); 
     timer.start(); 
    } 

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

     if(!win) 
     { 
      for(int y=0; y<14; y++) { 
       for(int x=0; x<14; x++) { 
        if(m.getMap(x,y).equals("f")) { 
       g.drawImage(m.getFinish(),x*32,y*32,null); 
        } 
           if(m.getMap(x,y).equals("g")) { 
       g.drawImage(m.getGrass(),x*32,y*32,null); 
        } 
        if(m.getMap(x,y).equals("w")) { 
       g.drawImage(m.getWall(),x*32,y*32,null); 
        } 
       } 
      } 
      g.drawImage(p.getPlayer(),p.getTileX()*32,p.getTileY()*32,null); 
     } 

     if(win) 
     { 
      g.setColor(Color.BLUE); 
      g.setFont(font); 
      g.drawString(Message,100,300); 
     } 
    } 

    public class Al extends KeyAdapter { 
     public void keyPressed(KeyEvent e) { 
      int keyCode = e.getKeyCode(); 
      if((keyCode==KeyEvent.VK_W) || (keyCode==KeyEvent.VK_UP)) { 
       if(!(m.getMap(p.getTileX(),p.getTileY()-1).equals("w"))) { 
        p.move(0,-1); 
       } 
      } 
      if((keyCode==KeyEvent.VK_S) || (keyCode==KeyEvent.VK_DOWN)) { 
       if(!(m.getMap(p.getTileX(),p.getTileY()+1).equals("w"))) { 
        p.move(0,1); 
       } 
      } 
      if((keyCode==KeyEvent.VK_A) || (keyCode==KeyEvent.VK_LEFT)) { 
       if(!(m.getMap(p.getTileX(),p.getTileY()-1).equals("w"))) { 
        p.move(-1,0); 
       } 
      } 
      if((keyCode==KeyEvent.VK_D) || (keyCode==KeyEvent.VK_RIGHT)) { 
       if(!(m.getMap(p.getTileX(),p.getTileY()-1).equals("w"))) { 
        p.move(1,0); 
       } 
      } 
     } 
    } 

    public void actionPerformed(ActionEvent e) { 
     if(m.getMap(p.getTileX(),p.getTileY()).equals("f")) { 
      Message = "WINNER!!!"; 
      win = true; 
     } 
     repaint(); 
    } 
}  



//Map.java 
package mygame; 

import java.util.*; 
import java.io.*; 
import java.awt.*; 
import java.awt.*; 

public class Map { 
    private Scanner s; 
    private String Map[] = new String[14]; 
    private Image grass,wall,finish; 

    public Map() { 
     ImageIcon img = new ImageIcon("G://sonali_java//mygame//grass.png"); 
     grass = img.getImage(); 
     img = new ImageIcon("G://sonali_java//mygame//wall.png"); 
     wall = img.getImage(); 
     img = new ImageIcon("G://sonali_java//mygame//finish.png"); 
     finish = img.getImage(); 

     openFile(); 
     readFile(); 
     closeFile(); 
    } 

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

    public Image getGrass() { 
     return grass; 
    } 
    public Image getWall() { 
     return wall; 
    } 
    public Image getFinish() { 
     return finish; 
    } 

    public void openFile() { 
     try { 
      s= new Scanner(new File("G://sonali_java//mygame//Map.txt")); 
     } 
     catch(Exception e) { 
      System.out.println("Error Loading File!!!!"); 
     } 
    } 

    public void readFile() { 
     while(s.hasNext()) { 
      for(int i=0; i<14; i++) { 
       Map[i] = s.next(); 
      } 
     } 
    } 

    public void closeFile() { 
     s.close(); 
    } 
} 



//Player.java 
package mygame; 

import java.awt.*; 

public class Player { 
    private int tileX,tileY; 
    private Image player; 

    public Player() { 
     tileX=1; 
     tileY=1; 
     ImageIcon img = new ImageIcon("G://sonali_java//mygane//object.png"); 
     player = img.getImage(); 
    } 

    public Image getPlayer() { 
     return player; 
    } 

    public int getTileX() { 
     return tileX; 
    } 

    public int getTileY() { 
     return tileY; 
    } 

    public void move(int dx, int dy) { 
     tileX += dx; 
     tileY += dy; 
    } 
} 
+2

为什么标记为jquery javascript和C++? –

+3

您需要说明您面临的问题。除非我们知道您面临的问题以及您准备实现的目标,否则我们无法帮助您。 –

+1

另外,不要重写swing组件的paint()。改写'paintComponent()'。 – kiheru

回答

1

我不想成为生气,但你要定义不同文件夹位置

在一些地方 "G://sonali_java//mygane//object.png"

,勾选 “mygaNe”

在一些地方 "G://sonali_java//mygame//Map.txt"

,勾选 “mygaMe”

你确定加载它不会抛出NullPointerException

0

你知道就可以了,发生这样的代码

public void draw(Graphics g){ 
    g.drawImage(playerImg, getX(), getY(), null); 
} 
在您的播放器类

,从而留下与绘画的球员,只是要求球员们画法的董事会paint方法里面的玩家类?这也可以用于绘制地图。记得在paint方法中调用绘图方法。 也这个 ImageIcon img = new ImageIcon(“G:// sonali_java // mygane //object.png”); 检查你的目录位置

+0

*“你知道你可以”* 3行代码1)应该调用超级方法。 2)对于任何'JComponent'都是错误的3)有一个错误的方法调用不会编译。 - 新的编码人员最好不要理会答案,除非它有显着的改进。 –

+0

你可以扩大你的回复安德鲁,我相信我已经使用公共无效绘制(图形克){..}之前没有任何编译错误 –

+1

@AndrewThompson'播放器'不扩展'JComponent'。 (尽管'drawImage()'调用仍然不存在)。 – kiheru