Хотите улучшить этот вопрос? Переформулируйте вопрос так, чтобы он был сосредоточен только на одной проблеме.
Закрыт 1 год назад.
Пишу шахматы с простеньким (пока что) ИИ на java. Уже вся логика игры есть. Написал простенькую визуализацию на javafx, все нормально. Решил переписать на свой android и понял, что это волокита та еще. Я прошу помочь с написанием по большей части графики. Итак, что мне нужно:
1) У меня есть png всех фигур и доски тоже. Нужно чтобы доска была в центре по всей ширине экрана. При этом я должен знать ее верхний левый угол, чтобы
2) еще должен быть listener для нажатия по экрану и с помощью координат угла доски я определял какая клетка нажата (что-то типа i = (int) getX / CELL_SIZE)) для совершения хода player.move(x1,y1,x2,y2).
3) На доске должны быть фигурки. У меня уже есть метод player.move(). После него должны произойти обновления позиций. То есть я пробегаю forx(1...8) fory(1...8), получаю метод toString() фигуры на этой позиции (например получаю BLACK_BISHOP) и вас прошу помочь только чтобы на этой позиции выводилась png фигуры toString(). Ну и наверное, это должно с каждым ходом перерисовываться.
Использую android studio.
Удачность описанного движка вызывает некоторые сомнения... Но если работает, то это не по теме :)
Во первых очень надеюсь, что ваш движок абстрагирован от интерфейса, иначе придется править почти все...
Вам нужно в первую очередь определиться со способом управления. Либо вы используете drag & drop, либо первым тапом выделяете клетку с фигурой, вторым- клетку куда хотите эту фигуру переместить.
Если первый вариант, то вам придется делать примерно следующее:
View
. Он должен знать какая он клетка(координаты), и в зависимости от координат определять свой цвет и закрашиваться имAbsoluteLayout
(мне кажется с ним получить
квадратные клетки будет проще всего) элемент. В нем программно создаем 64 клетки, в методе layout
определяем ширину нашей доски, вычисляем положение каждой клетки и передаем в нее, вызывая для каждой клетки ее layout(l,t,r,b)
Если управляем только кликами, то действуем совсем иначе. Мне кажется проще будет создать одну единственную View, в которой в методе onDraw() мы отрисовываем и поле, и фигуры, и выделенные клетки в текущем состоянии.
Попробуйте податься в какой-то из вариантов, будут более конкретные вопросы - пишите
Пример для второго варианта
public class BoardView extends View {
private int width = 0, height = 0;
private float startx, starty, board_size;
private Paint black = new Paint();
private Paint white = new Paint();
{
black.setColor(Color.BLACK);
white.setColor(Color.WHITE);
}
public BoardView(Context context) {
super(context);
}
public BoardView(Context context, @Nullable AttributeSet attrs) {
super(context, attrs);
}
public BoardView(Context context, @Nullable AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
}
@Override
public void layout(int l, int t, int r, int b) {
super.layout(l, t, r, b);
//layout срабатывает, когда уже точно определено положение вьюшки
//запоминаем в этот момент ширину и высоту
width = r - l;
height = b - t;
//определяем размер доски в пикселях и координаты верхнего левого угла
if (width > height) {
starty = 0;
startx = (width - height) / 2f;
board_size = height;
} else {
startx = 0;
starty = (height - width) / 2f;
board_size = width;
}
}
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
//рисуем черный квадрат во всю доску
canvas.drawRect(startx, starty, startx + board_size, starty + board_size, black);
//и теперь белые квадратики в шахматном порядке
for (int i = 0; i < 8; i++) {
for (int j = 0; j < 8; j++) {
if((i + j)%2 == 0)
continue;
canvas.drawRect(
startx + i * board_size / 8f,
starty + j * board_size / 8f,
startx + (i + 1) * board_size / 8f,
starty + (j + 1) * board_size / 8f,
white);
}
}
}
}
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Request прекрасно работает - уходит на сервер, сервер его принимаетЗатем должен прийти ответ от сервера
Всем приветСтолкнулся с такой проблемой: Написал свой BeanPostProcessor для того, чтобы все методы, которые помечены моей аннотацией @Timing, выводил...
Мне нужно записать переменную page из класса bumaga в массив All чтобы потом её вывестиКак это сделать с помощью get и set?
Возможно ли boolean перевести в int для сортировки с помощью Comparable