Nano Hash - криптовалюты, майнинг, программирование

Перемещение счетчиков по двумерному массиву

У меня есть три класса, и я пытаюсь сделать игру, в которой пользователи перемещаются по сетке в зависимости от того, что выпало на кости.

У меня есть основной класс BoardGame, содержащий графический интерфейс и счетчики, которые в настоящее время являются изображениями Jlabel (я открыт для предложений относительно того, что я мог бы использовать вместо JLabel - я сам не был так уверен). У меня есть класс Grid, который я организовал в 2D-массив и вызвал экземпляр в классе BoardGame, и у меня есть класс кубиков, который выбрасывает случайное число от 1 до 6.

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

Спасибо за помощь в продвижении

Класс GameBoard:

public class GameBoard extends javax.swing.JFrame {

private JLabel Board;
private JLabel GreenDot;
private JLabel redDot;
private JButton startButton;
private Grid grid;
private Die die;

/**
 * Auto-generated main method to display this JFrame
 */
public static void main(String[] args) {
    SwingUtilities.invokeLater(new Runnable() {
        public void run() {
            Grid grid = new Grid();
            GameBoard inst = new GameBoard(grid);
            inst.setLocationRelativeTo(null);
            inst.setVisible(true);
        }
    });
}

public GameBoard(Grid grid) {
    super();
    this.grid = grid;
    initGUI();
}

private void initGUI() {
    try {
        setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);
        getContentPane().setLayout(null);
        {
            redDot = new JLabel();
            getContentPane().add(redDot);
            redDot.setText("jLabel1");
            redDot.setIcon(new ImageIcon(getClass().getClassLoader().getResource("images/download.png")));
            redDot.setBounds(220, 434, 20, 12);
            redDot.setBorder(new LineBorder(new java.awt.Color(0,0,0), 1, false));

        }
        {
            GreenDot = new JLabel();
            getContentPane().add(GreenDot);
            GreenDot.setText("jLabel1");
            GreenDot.setIcon(new ImageIcon(getClass().getClassLoader().getResource("images/3d-green-ball-th.png")));
            GreenDot.setBounds(222, 453, 21, 13);
            GreenDot.setBorder(new LineBorder(new java.awt.Color(0,0,0), 1, false));

        }
        {
            startButton = new JButton();
            getContentPane().add(startButton);
            startButton.setText("Start Game");
            startButton.setBounds(64, 443, 83, 23);
        }
        {
            Board = new JLabel();
            getContentPane().add(Board);
            Board.setLayout(null);
            Board.setText("jLabel1");
            Board.setIcon(new ImageIcon(getClass().getClassLoader().getResource("images/board.jpg")));
            Board.setBounds(204, -1, 742, 484);
        }


        pack();
        this.setSize(963, 523);
    } catch (Exception e) {
        //add your error handling code here
        e.printStackTrace();
    }

}

}

Класс сетки:

public class Grid {

int[][] multi = {
        { 0, 0,-1, 0, 0,-1, 0,-1, 0, 0},
        { 0, 0, 0, 0, 0, 0,-1, 0, 0, 0},
        { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1},
        { 0,-1, 0,-1, 0, 0, 0, 0, 0, 0},
        { 0, 0, 0, 0, 0, 0,-1, 0, 0, 1},
        { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
        { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
        { 1, 0, 0, 0, 0, 0, 0, 1, 0, 0},
        { 0, 0, 0,-1, 0, 0, 0, 0, 0, 0},
        { 0, 0, 0, 1, 0, 0, 0, 0, 1, 0}
};

}

Класс штампа:

public class Die {

public Die() {
}

public void dieRoll() {
      int SIDES = 6; 

        int roll = (int) (Math.random() * SIDES) + 1;

        System.out.println(roll);
}

}

26.03.2015


Ответы:


1

Простым способом сделать это было бы изменить класс матрицы, чтобы он

{
    private int sides;
    public Die(int numSides){
        sides = numSides;
    }
    public int roll(){
        return (int) (Math.random() * SIDES) + 1
    }
}

Затем вы можете бросить шестигранную кость вот так

//this creates the die
Die sixSides = new Die(6);
//this rolls the die and prints the roll
System.out.print("That roll got you a " + sixSides.roll());

для перемещения по 2D-массиву все, что вам нужно сделать, это использовать модуль, и вам нужно создать класс точечных объектов

public position move(int num, int x, int y){//input is dice roll int then current position

    for(int i = 0; i < num;i++){
        if(i%10==0){
           y++;
           x = 0;
        }else{
           x++;
        } 
    }  
    return new point(x,y);
}

Чтобы получить доступ к позициям x и y точечного объекта, вам нужно написать методы get и set для объекта. что-то вроде этого

point player1 = new point(0,0);
int xposition = player1.getX
26.03.2015
Новые материалы

Кластеризация: более глубокий взгляд
Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

Как написать эффективное резюме
Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

Частный метод Python: улучшение инкапсуляции и безопасности
Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

Как я автоматизирую тестирование с помощью Jest
Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..