2017-01-07 7 views
-1

これは、Javaコンソールでパックマンゲームを作成することを目的としています。
私は、配列の配列に基づいて2次元オブジェクト配列を初期化するために使用されるLabyrinthというクラスを持っています。パックマンの正方形は移動可能な空間でも壁でもよいので、私は空間または壁のいずれかをインスタンス化する。同じアレイスペースに2つのオブジェクトを持たせることができます

public Labyrinth() { 

    tab2 = new Object[25][23]; // On part du principe que la taille du labyrinth ne change pas 

    for (int ligne = 0; ligne < tab.length; ++ligne) { 
     for (int colonne = 0; colonne < tab[ligne].length; ++colonne) { 
      int value = tab[ligne][colonne]; 
      Position p = new Position(ligne, colonne); 
      switch (value) { 
       case 0: 
        s = new Space(value, p); 
        tab2[ligne][colonne] = s; 
        break; 
       case 1: 
        w = new Wall(p); 
        tab2[ligne][colonne] = w; 
        break; 
       case 2: 
        s = new Space(value, p); 
        tab2[ligne][colonne] = s; 
        break; 
       case 3: 
        s = new Space(value, p); 
        tab2[ligne][colonne] = s; 
        break; 
       case 4: 
        s = new Space(value, p); 
        tab2[ligne][colonne] = s; 
        break; 
       case 5: 
        s = new Space(value, p); 
        tab2[ligne][colonne] = s; 
        break; 
       case 6: 
        s = new Space(value, p); 
        tab2[ligne][colonne] = s; 
        break; 
      } 
     } 
    } 

"tab"はint配列で、 "tab2"はオブジェクト配列です。 "value"パラメータは、2次元オブジェクト配列を作成するために使用されるint配列に基づくintです。
はパックマン、幽霊などのような様々な食品をインスタンス化することが可能です:

public class Space{ 
Ghost g; 
Pacman pac; 
Food f; 

public Space(int value, Position p) { 

    super(p); 
    switch (value) {    
     case 2: 
      pac = new Pacman(p); 
      break; 
     case 3: 
      g = new Ghost(p); 
      break; 
     case 4: 
      f = new Gum(p); 
      break; 
     case 5: 
      f = new Fruit(p); 
      break; 
     case 6: 
      f = new Shroom(p); 
      break; 
     default: 
      break; 
    }  
} 

これは私が「座標」と同じアレイ上の空間オブジェクト、食品、パックマンやゴーストobejectを有することを意味します。

編集:ここでの目的は、別の
EDIT2に1「スペース」オブジェクトからパックマンを移動することです:私は入れて実現しなかった2回、同じコードを編集

+0

あなたは 'GameObject [] gos'を意味しますか? – ChiefTwoPencils

+0

それは何であるか分からない。 – atomiktom

+0

主な記述があなたの「編集」にどのように関係しているかはっきりしません。 – ChiefTwoPencils

答えて

0

:ここでの目的は、移動することです1スペースのオブジェクトから別のものへのパックマン

次に、そのようにモデル化したいのですが?

あなたSpaceクラスは、いくつかの「コンテンツ」を受け入れてみましょう:

enum SpaceContent{ 
    EMPTY,FOOD,GHOST,PAC_MAN 
} 

class Space { 
    private SpaceContent content = SpaceContent.EMPTY; 

    public void setContent(SpaceContent content){ 
    this.content = content; 
    } 
} 

そうするとき、配列要素は、同じタイプのすべてのSpace

ですこれは2dimを持つ上で少しだけ利点のようになります。直接タイプSpaceContentの-arrayビーイングが、これを見て:

enum Direction { 
NORTH,EAST,SOUTH,WEST 
} 

class Space { 
    private SpaceContent content = SpaceContent.EMPTY; 
    private Map<Direction,Space> neigbours = new HasMap<>(); 
    // ... 
    public void setNeigbour(Direction direction, Space space){ 
    neigbours.put(direction,space); 
    } 

    boolean isSpace(){ 
    return true; 
    } 

    public boolean moveTo(Direction direction){ 
    if(!neigbours.containsKey(direction)) 
     return false; // cannot move out of the field. 

    Space target = neigbours.get(direction); 
    if(!target.isSpace()) 
     return false; // cannot move into a wall 

    target.setContent(content); 
    content = SpaceContent.EMPTY; 
    } 
} 

class Wall extends Space{ 
    @override 
    boolean isSpace(){ 
    return false; 
    }   
} 

とあなたのfigurを動かす方法でのes:

class Ghost{ 
    private Direction lastDirection; 
    private int x,y; 
    // getters and setters 
    public void movedTo(Direction newDirection){ 
     lastDirection = newDirection; 
     x= newDirection.nextX(x); // we have to enhance the enum for this 
     y= newDirection.nextY(y); 
    } 
    } 
    List<Ghost> ghosts = new ArrayList<>(); // filled with ghosts elsewhere. 
    // tab2 is an array of `Space` 
    void moveGhosts(){ 
    for(Ghost ghost : ghosts){ 
     Direction direction = ghost.getLastDirection(); 
     Space currentField = 
     while(!tab2[ghost.getX()][ghost.getY()].moveTo(direction)){ 
     direction = turnRight(direction); 
     } 
     ghost.moveTo(direction); 
    } 

    private void turnRight(Direction direction){ 
     return Direction.values()[direction.ordinal()+1% Direction.values().length]; 
    } 
} 
+0

ありがとう、それを試してみよう。 – atomiktom

関連する問題