如何在2D数组中随机放置/设置/分配项目?

时间:2014-04-09 12:03:14

标签: android arrays random grid

我一直在尝试在Android中创建一个扫雷游戏,到目前为止,所有游戏都已相应发生。但是,我现在已经陷入了必须随机将地雷放置在游戏板中的部分。

我尝试了一些我能想到的事情,但除了一个之外,其中没有一个能够奏效。但是,它没有给我我想要的结果。以下是我绘制游戏板的方法(使用2D数组按钮)。

final Button currentButton = new Button(this);
final int bombState = R.drawable.bomb_state;
final Button[][] buttonArray = new Button[6][6];
final int mine = R.drawable.bomb;
final Random rand = new Random();
final int number = 36;
int button;
int row;

//create new Linear Layout
RelativeLayout linearLayout = new RelativeLayout(this);

//creating the layout Params
LayoutParams linLayoutParam = new LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT);

//set layout background
linearLayout.setBackgroundDrawable(getWallpaper());

//set LinearLayout as a root element of the screen 
setContentView(linearLayout, linLayoutParam);

//create a new Table Layout for the game grid
TableLayout mineGrid = new TableLayout(this);

/*
 * creates TableRows and Buttons using the for loop
 * then add the buttons into the rows and the rows
 * into the TableLayout 
 */

 for(row = 0; row < 6; row++){
    //create new Table Row
    TableRow currentRow = new TableRow(this);
    for(button = 0; button < 6; button++){
        //create new Button

        for(int id = 0; id < number; id++){
            currentButton.setId(id);
        }
        currentButton.setText("      ");

        //storing the buttons into the array of Buttons
        buttonArray[row][button] = currentButton;

        if(currentButton.isClickable()){
        currentButton.setOnClickListener(new OnClickListener() {

            /*
             * (non-Javadoc)
             * @see android.view.View.OnClickListener#onClick(android.view.View)
             */
        public void onClick(View v) {
            try
            {
                for(int i = 0; i < 10; i++){

                    if(rand.nextInt(10) == i){
                         currentButton.setBackgroundResource(mine);
                         restart.setBackgroundResource(bombState);
                    } 
                }
             } catch(Exception e)
               {
                    Toast.makeText(Game.this,e.getMessage() + "Error : ",
                             Toast.LENGTH_SHORT).show();
               }
        }
        });
        }

        //store the button into the Table Row
        currentRow.addView(currentButton);

        }

        //add the newly created row into the table
        mineGrid.addView(currentRow);
    }

    linearLayout.addView(score, params3);

    linearLayout.addView(mineGrid, params);
}

上面的代码给我的是一个由按钮组成的6x6网格。 以下是我试图随机在地板上放置n个地雷的地方。

try
{
    for(int i = 0; i < 10; i++){

        if(rand.nextInt(10) == i){
             currentButton.setBackgroundResource(mine);
             restart.setBackgroundResource(bombState);
        }
    }
}

不幸的是,这会让整个电路板充满地雷,而不是只在电路板上放置一定数量的电能。当我尝试随机设置地雷时,我知道我错过了什么!任何人都可以告诉我哪里出错了,并帮助我指出正确的方向?

请问我任何澄清的事。

提前致谢。

1 个答案:

答案 0 :(得分:0)

基本上,每按一次按钮,都会尝试放置一个矿,而不是在创建按钮时放置它。也许你可以添加一个列表,一个按钮的ID是地雷,只检查用户是否点击了其中一个按钮。

ArrayList<Integer> mines = new ArrayList<Integer>();
.
.
.
currentButton.setText("      ");
if(rand.nextInt(2)==1)
    mines.add(currentButton.id);

并在onClick()中检查currentButton.id是否在mines列表中,如果是,则显示相应的图片。