public class PuzzleEx2Ativity extends Activity {
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
// 9개의 Button을 Listener와 연결
_Button[0]=(Button)findViewById(R.id.btNum1);
_Button[1]=(Button)findViewById(R.id.btNum2);
_Button[2]=(Button)findViewById(R.id.btNum3);
_Button[3]=(Button)findViewById(R.id.btNum4);
_Button[4]=(Button)findViewById(R.id.btNum5);
_Button[5]=(Button)findViewById(R.id.btNum6);
_Button[6]=(Button)findViewById(R.id.btNum7);
_Button[7]=(Button)findViewById(R.id.btNum8);
_Button[8]=(Button)findViewById(R.id.btBlank);
int i;
for(i=0;i<8;i++) {
_Button[i].setOnClickListener(bt_Num);
}
// Start Button을 Listener와 연결
((Button)findViewById(R.id.btStart)).setOnClickListener(bt_Start);
}
private Button _Button[] = new Button[9];
private View.OnClickListener bt_Start = new View.OnClickListener() {
@Override
public void onClick(View v) {
int x, y;
int btStart_left; //Start Button의 Left값
int btStart_bottom; //Start Button의 Bottom값
btStart_bottom=((Button)findViewById(R.id.btStart)).getBottom();
for(y=0;y<3;y++) {
btStart_left=((Button)findViewById(R.id.btStart)).getLeft();
for(x=0;x<3;x++) {
// 9개 버튼의 위치 설정. Start Button을 기준으로 잡았다.
_Button[y*3+x].layout(btStart_left, btStart_bottom, btStart_left+48, btStart_bottom+48);
btStart_left=btStart_left+48;
}
btStart_bottom=btStart_bottom+48;
}
Random _Random = new Random();
int i;
for(i=0;i<1000;i++) {
//Random으로 섞어주기 위해서 bt_Num.onClick을 통해 1000번 doSwap해줌.
bt_Num.onClick(_Button[_Random.nextInt(8)]);
}
}
};
private boolean is_vertical(Button A, Button B) {
//두 버튼의 Left값을 비교하여 같은 세로줄인지 확인하고, 두 버튼이 붙어있는지 확인한다.
//0~47px크기의 버튼과 48~95px크기의 버튼을 서로 빼면 음수가 나올 수 있으므로 Math.abs(절대값)처리를 하였으며
//48-0=48이므로 뺀 값이 <=48 이거나 <49, <50 으로 하여도 상관없다.
return (A.getLeft()==B.getLeft() && Math.abs(A.getTop()-B.getTop()) <50);
}
private boolean is_horizontal(Button A, Button B) {
//is_vertical()함수와 동일.가로줄 비교
return (A.getTop()==B.getTop() && Math.abs(A.getLeft()-B.getLeft()) <50);
}
private void doSwap(Button A, Button B) {
//9개의 Button을 섞어주기 위한 함수
int left = A.getLeft();
int top = A.getTop();
int right = A.getRight();
int bottom = A.getBottom();