沿着2d阵列移动计数器

时间:2015-03-26 06:34:07

标签: java arrays swing grid 2d

我有三个课程,我正在尝试制作一个游戏,用户根据骰子滚动的内容沿网格移动。

我有我的主要BoardGame类,包含GUI和目前是Jlabel图像的计数器(我愿意接受关于我可以使用什么而不是JLabel的建议 - 我不确定自己)。我有一个Grid类,我已将其安排到一个2D数组中,并在BoardGame类中调用了一个实例,并且我有一个die类,它从1-6中滚动一个随机数。

我试图让我的计数器从网格上的第一个方块开始,然后以从左到右,从右到左的方式前进。但我不确定如何使计数器首先在网格中移动。希望如果我能弄清楚这一点,我相信我可以通过模具实现它们移动特定数量。

感谢您的帮助

GameBoard类:

public class GameBoard extends javax.swing.JFrame {

private JLabel Board;
private JLabel GreenDot;
private JLabel redDot;
private JButton startButton;
private Grid grid;
private Die die;

/**
 * Auto-generated main method to display this JFrame
 */
public static void main(String[] args) {
    SwingUtilities.invokeLater(new Runnable() {
        public void run() {
            Grid grid = new Grid();
            GameBoard inst = new GameBoard(grid);
            inst.setLocationRelativeTo(null);
            inst.setVisible(true);
        }
    });
}

public GameBoard(Grid grid) {
    super();
    this.grid = grid;
    initGUI();
}

private void initGUI() {
    try {
        setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);
        getContentPane().setLayout(null);
        {
            redDot = new JLabel();
            getContentPane().add(redDot);
            redDot.setText("jLabel1");
            redDot.setIcon(new ImageIcon(getClass().getClassLoader().getResource("images/download.png")));
            redDot.setBounds(220, 434, 20, 12);
            redDot.setBorder(new LineBorder(new java.awt.Color(0,0,0), 1, false));

        }
        {
            GreenDot = new JLabel();
            getContentPane().add(GreenDot);
            GreenDot.setText("jLabel1");
            GreenDot.setIcon(new ImageIcon(getClass().getClassLoader().getResource("images/3d-green-ball-th.png")));
            GreenDot.setBounds(222, 453, 21, 13);
            GreenDot.setBorder(new LineBorder(new java.awt.Color(0,0,0), 1, false));

        }
        {
            startButton = new JButton();
            getContentPane().add(startButton);
            startButton.setText("Start Game");
            startButton.setBounds(64, 443, 83, 23);
        }
        {
            Board = new JLabel();
            getContentPane().add(Board);
            Board.setLayout(null);
            Board.setText("jLabel1");
            Board.setIcon(new ImageIcon(getClass().getClassLoader().getResource("images/board.jpg")));
            Board.setBounds(204, -1, 742, 484);
        }


        pack();
        this.setSize(963, 523);
    } catch (Exception e) {
        //add your error handling code here
        e.printStackTrace();
    }

}

}

网格类:

public class Grid {

int[][] multi = {
        { 0, 0,-1, 0, 0,-1, 0,-1, 0, 0},
        { 0, 0, 0, 0, 0, 0,-1, 0, 0, 0},
        { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1},
        { 0,-1, 0,-1, 0, 0, 0, 0, 0, 0},
        { 0, 0, 0, 0, 0, 0,-1, 0, 0, 1},
        { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
        { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
        { 1, 0, 0, 0, 0, 0, 0, 1, 0, 0},
        { 0, 0, 0,-1, 0, 0, 0, 0, 0, 0},
        { 0, 0, 0, 1, 0, 0, 0, 0, 1, 0}
};

}

模具类:

public class Die {

public Die() {
}

public void dieRoll() {
      int SIDES = 6; 

        int roll = (int) (Math.random() * SIDES) + 1;

        System.out.println(roll);
}

}

1 个答案:

答案 0 :(得分:0)

这样做的一个简单方法是更改​​模具类,使其具有

{
    private int sides;
    public Die(int numSides){
        sides = numSides;
    }
    public int roll(){
        return (int) (Math.random() * SIDES) + 1
    }
}

然后你可以像这样滚动六面模具

//this creates the die
Die sixSides = new Die(6);
//this rolls the die and prints the roll
System.out.print("That roll got you a " + sixSides.roll());

沿着2D数组移动,你需要做的就是使用模数,你需要创建一个点对象类

public position move(int num, int x, int y){//input is dice roll int then current position

    for(int i = 0; i < num;i++){
        if(i%10==0){
           y++;
           x = 0;
        }else{
           x++;
        } 
    }  
    return new point(x,y);
}

要访问点对象的x和y位置,您需要为对象编写get和set方法。 像这样的东西

point player1 = new point(0,0);
int xposition = player1.getX