0

私は現在、画面の上部にブロックを生成し、それらが落下する Java のゲームに取り組んでいます (それらをかわす必要があります)。現在、配列から画面の上部にブロックを生成するゲームがありますが、y 位置を (int) だけ下げる方法がわかりません。

基本的に、オブジェクト配列をチェックする public void を作成する助けが必要です。オブジェクトのすべてのインスタンスで、その y 位置を 12 下げます。

コードから選択したスニペット:

static Object[][] food = new Object[7][700];

public void draw() {
    try {
        Graphics g = bufferStrategy.getDrawGraphics();
        g.clearRect(0, 0, this.getSize().width, this.getSize().height);

        // Draw to back buffer
        g.setColor(Color.WHITE);
        g.fillRect(0, 0, this.getSize().width, this.getSize().height);
        g.setColor(Color.BLUE);
        g.fillRect(Player.getX(), Player.getY(), Player.WIDTH, Player.HEIGHT);
        g.setColor(Color.GRAY);

        for(int x = 0; x < food.length; x++) {
            for(int y = 0; y < food[x].length; y ++) {
                Object o = food[x][y];
                if(o instanceof Hamburger) {
                    new Hamburger(x * 100, y, g);           
                }
                else if(o instanceof Salad) {
                    new Salad(x * 100, y, g);
                }
            }
        }

        GUI.draw(g);

    } catch(Exception e) {
        e.printStackTrace();
    } finally {
        bufferGraphics.dispose();
    }
}

public void dropBlocks() {

}

public void addBlock() {
    if(new Random().nextInt(2) == 1) {
        food[new Random().nextInt(7)][0] = new Hamburger(0, 0);
    } else food[new Random().nextInt(7)][0] = new Salad(0, 0);
}

public  void drawBackbufferToScreen() {
    bufferStrategy.show();

    Toolkit.getDefaultToolkit().sync();
}

public void run() {
    int i = 0;
    while(running) {
        i++;
        draw();
        Player.update();
        drawBackbufferToScreen();

        if(i == 50) {
            addBlock();
            i = 0;
        }

        dropBlocks();   

        Thread.currentThread();
        try {
            Thread.sleep(10);
        } catch(Exception e) {
            e.printStackTrace();
        }
    }
}

Food.java (ハンバーガーとサラダが拡張するもの)

public class Food {
public static int x;
public static int y;
public static int HEIGHT;
public static int WIDTH;
public int type;

private static Image blockImage;

// Default constructor
public Food() {
    Food.x = 0;
    Food.y = 0;
    Food.HEIGHT = 80;
    Food.WIDTH = 80;
}

public Food(int x, int y) {
    Food.x = x;
    Food.y = y;
    Food.HEIGHT = 80;
    Food.WIDTH = 80;
}

// Getters and setters
4

2 に答える 2

1

私はこのようなことをします:

Object[][] board = new Object[7][700];  //Game board.  
//you can also switch the width and height
//Initialization

for (int x = 699; x >= 0; x--) {
    for (int y = 0; y < 7; y++) {
        if (x == 699) {
            board[y][x] = BLANK; //set spot to open if it is the bottom row
            continue;
        }
        board[y][x+1] = board[y][x]; //move row down
    }
}
//Generate new Objects if needed for the top row of the board.
于 2013-01-26T06:24:00.093 に答える
0

明らかに、ObjectにはメソッドがありませんgetY()。キャスティングとで醜いことをすることもできますinstanceofが、このデザインはかなり腐敗しています。オブジェクト指向モデルに向かって移動してみてください。

interface Drawable {
    int getX();
    int getY();
    void moveDown(int numSpaces);
}

class Hamburger implements Drawable {
    private int x;
    private int y;
    public Hamburger(final int xPos, final int yPos) {
       x = xPos;
       y = yPos;
    }

    @Override
    public void moveDown(final int numSpaces) {
        // eg negative number, off the screen
        if(isValid(numSpaces)) {
           setY(getY() - numSpaces);
        }
    }
}

class Positioner {
  public static void moveMyObjects(final Drawable[][] objs) {
      for(Drawable[] rows : objs) {
          for(Drawable col : rows) {
             // clearly Object doesn't have a getY() method, so you should create your own interface and implement it
             col.moveDown(12);
          }
       }
   }
}
于 2013-01-26T06:36:47.657 に答える