2013-11-04 52 views
-1

對於一個學校計算機項目,我決定用Java(與其他兩個人)製作一個Pac-Man風格的遊戲。我們都沒有太多經驗,所以我們基本上一直在教導自己。我們已經取得了一些進展,但在這一點上我們似乎已經陷入停滯。Java遊戲編程第2部分:消失的圖像

當Fatman超過他們時,我們該如何讓糖果消失?我們嘗試使用重繪,但我們似乎無法讓事情正常工作。

(我還有其他的事情,我需要幫助的,但他們在不同的問題)

謝謝您的幫助!

這裏是我們到目前爲止的代碼:

迷宮類:

package Fatman; 

import javax.swing.*; 

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

    public Maze(){ 
     JFrame f = new JFrame(); 
     f.setTitle("Fatman!"); 
     f.add(new Board()); 
     f.setSize(816, 838); 
     f.setLocationRelativeTo(null); 
     f.setVisible(true); 
     f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
    } 
} 

地圖類

package Fatman; 

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

public class Map { 

    private Scanner m; 
    private String Map[] = new String[25]; 

    private Image spaceregcandy, 
        srcb, 
        safehouse, 
        spacebigcandy, 
        blackspace, 
        space, 
        portal1, 
        portal2, 
        wall; 

    public Map(){ 

     ImageIcon img = new ImageIcon("C:\\Users\\Martin\\Desktop\\Fatman Project\\spaceregcandy.png"); 
     spaceregcandy = img.getImage(); 
     //image icon has already been initiated, so it doesn't have to be written again 
     img = new ImageIcon("C:\\Users\\Martin\\Desktop\\Fatman Project\\spaceregcandyblue.png"); 
     srcb = img.getImage(); 
     img = new ImageIcon("C:\\Users\\Martin\\Desktop\\Fatman Project\\safehouse.png"); 
     safehouse = img.getImage(); 
     img = new ImageIcon("C:\\Users\\Martin\\Desktop\\Fatman Project\\wall232x.png"); 
     wall = img.getImage(); 
     img = new ImageIcon("C:\\Users\\Martin\\Desktop\\Fatman Project\\spacebigcandy.png"); 
     spacebigcandy = img.getImage(); 
     img = new ImageIcon("C:\\Users\\Martin\\Desktop\\Fatman Project\\blackspace.png"); 
     blackspace = img.getImage(); 
     img = new ImageIcon("C:\\Users\\Martin\\Desktop\\Fatman Project\\space.png"); 
     space = img.getImage(); 
     img = new ImageIcon("C:\\Users\\Martin\\Desktop\\Fatman Project\\portal1.png"); 
     portal1 = img.getImage(); 
     img = new ImageIcon("C:\\Users\\Martin\\Desktop\\Fatman Project\\portal2.png"); 
     portal2 = img.getImage(); 

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

    public Image getSpaceregcandy(){ 
     return spaceregcandy; 
    } 
    public Image getSrcb(){ 
     return srcb; 
    } 
    public Image getSafehouse(){ 
     return safehouse; 
    } 
    public Image getWall(){ 
     return wall; 
    } 
    public Image getSpacebigcandy(){ 
     return spacebigcandy; 
    } 
    public Image getBlackspace(){ 
     return blackspace; 
    } 
    public Image getSpace(){ 
     return space; 
    } 
    public Image getPortal1(){ 
     return portal1; 
    } 
    public Image getPortal2(){ 
     return portal2; 
    } 

    public String getMap(int x, int y){ 
     String index = Map[y].substring(x, x + 1); 
     return index; 
     //in y position, if y = 2, goes to second row (substring gets x position) 
    } 

    public void openFile(){ 

     try{ 
     m = new Scanner(new File("C:\\Users\\Martin\\Desktop\\Fatman Project\\map3.txt")); 
     }catch(Exception e){ 
      System.out.println("error loading map"); 
     } 
    } 

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

    } 

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

package Fatman; 

import java.awt.*; 
import java.awt.event.*; 
import java.io.BufferedReader; 
import java.io.File; 
import java.io.FileReader; 
import java.io.FileWriter; 
import java.io.IOException; 

import javax.swing.*; 

public class Board extends JPanel implements ActionListener{ 

    /** 
    * 
    */ 
    private static final long serialVersionUID = 1L; 

    private Timer timer; 

    private Image player; 

    private Map m; 
    private Player p; 

    public Board(){ 

     m = new Map(); 
     p = new Player(); 
     addKeyListener(new Al()); 
     setFocusable(true); 
     timer = new Timer(1, this); 
     timer.start(); 
    } 

    public void actionPerformed(ActionEvent e){ 
     repaint(); 

    } 

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

     for(int y = 0; y < 25; y++){ 
      for(int x = 0; x <25; x++){ 
       if(m.getMap(x, y).equals("o")){ 
        g.drawImage(m.getSpaceregcandy(), x *32, y *32, null); 
       } 
       if(m.getMap(x, y).equals("O")){ 
        g.drawImage(m.getSrcb(), x *32, y *32, null); 
       } 
       if(m.getMap(x, y).equals("x")){ 
        g.drawImage(m.getWall(), x *32, y *32, null); 
       } 
       if(m.getMap(x, y).equals("H")){ 
        g.drawImage(m.getSafehouse(), x *32, y *32, null); 
       } 
       if(m.getMap(x, y).equals("C")){ 
        g.drawImage(m.getSpacebigcandy(), x *32, y *32, null); 
       } 
       if(m.getMap(x, y).equals("b")){ 
        g.drawImage(m.getBlackspace(), x *32, y *32, null); 
       } 
       if(m.getMap(x, y).equals("s")){ 
        g.drawImage(m.getSpace(), x *32, y *32, null); 
       } 
       if(m.getMap(x, y).equals("p")){ 
        g.drawImage(m.getPortal1(), x *32, y *32, null); 
       } 
       if(m.getMap(x, y).equals("P")){ 
        g.drawImage(m.getPortal2(), x *32, y *32, null); 
       } 
     } 


    } 


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

} 

    public class Al extends KeyAdapter{ 

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

      if(keycode == KeyEvent.VK_UP){ 
       if(!m.getMap(p.getTileX(), p.getTileY() -1).equals("x")){ 
        if(!m.getMap(p.getTileX(), p.getTileY() -1).equals("b")){      
         } 
         p.move(0, -1);     

         System.out.println(m.getMap(p.getTileX(), p.getTileY())); 

      } 
       } 

      if(keycode == KeyEvent.VK_DOWN){ 
       if(!m.getMap(p.getTileX(), p.getTileY() +1).equals("x")){ 
        if(!m.getMap(p.getTileX(), p.getTileY() +1).equals("b")){ 
         p.move(0, 1); 
         System.out.println(m.getMap(p.getTileX(), p.getTileY())); 
      } 
       } 
      } 
      if(keycode == KeyEvent.VK_LEFT){ 
       if(!m.getMap(p.getTileX() - 1, p.getTileY()).equals("x")){ 
        if(!m.getMap(p.getTileX() - 1, p.getTileY()).equals("b")){ 
         p.move(-1, 0); 
         System.out.println(m.getMap(p.getTileX(), p.getTileY())); 
      } 
       } 
      } 
      if(keycode == KeyEvent.VK_RIGHT){ 
       if(!m.getMap(p.getTileX() + 1, p.getTileY()).equals("x")){ 
        if(!m.getMap(p.getTileX() + 1, p.getTileY()).equals("b")){ 
         p.move(1, 0); 
         System.out.println(m.getMap(p.getTileX(), p.getTileY())); 
      } 
      } 
      } 
      } 


     public void keyReleased(KeyEvent e){ 

     } 

     public void keyTyped(KeyEvent e){ 

} 
} 
} 

Player類

package Fatman; 

import java.awt.Image; 

import javax.swing.ImageIcon; 

public class Player { 

    private int tileX, tileY; 
    private int dx, dy; 

    private Image player; 

    public Player(){ 

     ImageIcon img = new ImageIcon("C:\\Users\\Martin\\Desktop\\Fatman Project\\FATMANsimplified32xbrown.png"); 
     player = img.getImage(); 

     tileX = 12; 
     tileY = 18; 
    } 

    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; 
    } 

} 

任何想法?

回答

0

嗯,我不認爲你可能是3個人羣的三分之二,除非你吃你的成員之一,但說.... 你的問題是更適合https://gamedev.stackexchange.com/爲更多的遊戲開發問題在我看來。

However.what你可以做的,設置屏幕外的糖果位置(例如:candy.x = -100;)

上說,雖然,這裏是你的遊戲循環?

公共無效startGame(){

}公共無效stopGame(){

}公共無效更新(){//力圖形和用戶輸入來更新 遊戲狀態}

也考慮去www.java-gaming.org他們有令人敬畏的教程來幫助你。

0

Player.move()什麼都不吃點。您必須更新變量Map.Map[]的值以跟蹤它應該表示的內容。否則,這些代碼只是空白的文字/符號,它們一次只能從程序員那裏做一條指令,但不會使用編程語言的力量讓計算機根據符合的條件工作。