Как я могу хранить 10x10 карту / игровое поле в MySQL верстаке? - PullRequest
0 голосов
/ 23 марта 2020

Я создаю игру Sokoban в java.

Карта / игровое поле представляет собой массив 10x10. Одно поле в массиве может содержать один из 5 различных объектов

  1. Целевое поле
  2. Сундук
  3. Игрок
  4. Стена
  5. Пустое поле (это просто пустое поле, по которому игрок может пройти)

Теперь я хочу сохранить эту карту в базе данных MySql. Я не уверен, как к этому подойти. Я не знаю, как будет выглядеть стол. Позже я смогу вытащить карту, чтобы игрок мог мгновенно играть или изменять поле.

Я думал об использовании строки из 100 символов, и у каждого объекта есть определенный c символ, поэтому я знаю его значение и место.

1 Ответ

1 голос
/ 23 марта 2020

Да, поэтому одним из подходов будет иметь таблицу с уникальным ключом на основе столбца / строки. Затем вы можете сохранить ключ (и) относительно этого столбца / строки, которые связаны с целевым полем, сундуком, игроком, стеной, пустым полем.

Редактировать: чтобы ответить на ваш вопрос по этому ответу, Вы можете создать класс Location, который имеет и x и y, который представляет точку в сетке. Затем переопределите equals / hashCode, чтобы сделать его уникальным. Затем вы можете использовать карту для хранения локации и соответствующего GameObject в этой локации!

    public class Location {

        private final int x;

        private final int y;

        private final int hashCode;

        public Location(int x, int y) {
            this.x = x;
            this.y = y;
            this.hashCode = Objects.hash(x, y);
        }

        @Override
        public int hashCode() {
            return hashCode;
        }

        @Override
        public boolean equals(Object other) {
            if (other == this) {
                return true;
            }
            if (other instanceof Location) {
                Location otherLocation = (Location) other;

                return otherLocation.x == x && otherLocation.y == y;
            }
            return false;
        }
    }

    interface GameObject {

    }

    class TargetField implements GameObject {

    }

    class MyGame {

        private final Map<Location, GameObject> map;

        MyGame(Map<Location, GameObject> map) {
            this.map = map;
        }

        public void set(Location location, GameObject object) {
            map.put(location, object);
        }
    }
...