2013-10-15 107 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