Android에서 2048 게임을 만들어야합니다.4x4 GridLayout이 프로그래밍 방식으로 Android에 채워집니다.
보드의 경우 GridLayout을 사용하고 프로그래밍 방식으로 설정해야합니다.
원래 게임과 마찬가지로 4x4 그리드가됩니다.
카드의 경우 TextView와 함께 FrameLayout을 사용하고 가운데에 카드를 사용해야합니다. 내가 할 수있는
public class Card extends FrameLayout {
private int number = 0;
private TextView txtNumber;
public Card(Context context, int n) {
super(context);
LayoutParams params = new LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT);
params.gravity = Gravity.CENTER;
txtNumber = new TextView(context);
txtNumber.setTextSize(30);
txtNumber.setLayoutParams(params);
this.addView(txtNumber);
setNumber(n);
}
public int getNumber() {
return number;
}
public void setNumber(int number) {
this.number = number;
this.setBackgroundColor(ContextCompat.getColor(getContext(), number == 0 ? R.color.colorCard : R.color.colorCardActive));
txtNumber.setText(number == 0 ? "" : "" + number);
}
}
아무것도 원래 같은 (더 나은 더 보이게 -
public class Board extends GridLayout {
private final int BOARD_WIDTH = 4;
private final int BOARD_HEIGHT = 4;
private Card[][] cards;
public Board(Context context) {
super(context);
initBoard();
}
public Board(Context context, AttributeSet attrs) {
super(context, attrs);
initBoard();
}
public Board(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
initBoard();
}
public void initBoard() {
this.setBackgroundColor(ContextCompat.getColor(getContext(), R.color.colorBoard));
this.setRowCount(BOARD_HEIGHT);
this.setColumnCount(BOARD_WIDTH);
Random random = new Random();
cards = new Card[BOARD_WIDTH][BOARD_HEIGHT];
for (int x = 0; x < BOARD_WIDTH; x++) {
for (int y = 0; y < BOARD_HEIGHT; y++) {
int n = random.nextInt(2);
cards[x][y] = new Card(this.getContext(), (n * 2));
}
}
}
public void addCardsToBoard() {
for (int x = 0; x < BOARD_WIDTH; x++) {
for (int y = 0; y < BOARD_HEIGHT; y++) {
GridLayout.LayoutParams param = new LayoutParams();
param.height = LayoutParams.WRAP_CONTENT;
param.width = LayoutParams.WRAP_CONTENT;
param.setGravity(Gravity.CENTER);
param.columnSpec = GridLayout.spec(x);
param.rowSpec = GridLayout.spec(y);
param.topMargin = 50;
Card c = cards[x][y];
c.setLayoutParams(param);
this.addView(cards[x][y], 230, 230);
}
}
}
}
가 :
이
내가 이미 가지고있는 것입니다 경기).어떤 조언이나 조언을 부탁드립니다.
'나는 2048 게임을 만들어야합니다.'... ** 다른 하나 ** ?? 그리고 왜 xml 레이아웃에 GridView를 만드는 대신 GridLayout을 프로그래밍 방식으로 만들지 않았습니까? –
@Rotwang 네, 또 하나, 바로 연습 할 수있는 좋은 방법입니까? 그리고 그것들은 시작 지침입니다. XML에서 그렇게하는 것이 좋을까요? – Matthiee