我一直在尝试在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);
}
}
}
不幸的是,这会让整个电路板充满地雷,而不是只在电路板上放置一定数量的电能。当我尝试随机设置地雷时,我知道我错过了什么!任何人都可以告诉我哪里出错了,并帮助我指出正确的方向?
请问我任何澄清的事。
提前致谢。
答案 0 :(得分:0)
基本上,每按一次按钮,都会尝试放置一个矿,而不是在创建按钮时放置它。也许你可以添加一个列表,一个按钮的ID是地雷,只检查用户是否点击了其中一个按钮。
ArrayList<Integer> mines = new ArrayList<Integer>();
.
.
.
currentButton.setText(" ");
if(rand.nextInt(2)==1)
mines.add(currentButton.id);
并在onClick()
中检查currentButton.id
是否在mines
列表中,如果是,则显示相应的图片。