Отображение домино с кодировкой Unicode - PullRequest
0 голосов
/ 30 июня 2018

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

Кто-то ответил следующим образом: «Кодировка Unicode включает в себя домино».

Так что, если я правильно понимаю, вместо загрузки изображений домино, я могу использовать набор символов Юникод для отображения домино на экране? Я не могу найти примеры в Интернете, как это сделать. Кто-нибудь может привести пример того, как это делается?

Ответы [ 3 ]

0 голосов
/ 30 июня 2018

Предыдущий ответ правильный. Тем не менее:

Более удобная страница для персонажей: http://www.alanwood.net/unicode/domino-tiles.html

Кроме того, фактическая печать этих символов описана здесь .

Пример печати одного из домино:

class Scratch {
    public static void main(String[] args) {
        System.out.println(new String(Character.toChars(127026)));
    }
}

Это печатает ? на консоли IntelliJ. Ваши результаты могут отличаться в зависимости от вашего шрифта.

0 голосов
/ 30 июня 2018

В следующем коде показано, как определить установленные шрифты, которые поддерживают отображение этой группы символов Юникода (3 из 250 установленных здесь шрифтов) и отображение их в текстовой области.

enter image description here

import java.awt.*;
import javax.swing.*;
import javax.swing.event.*;
import javax.swing.border.EmptyBorder;
import java.util.Vector;

public class DominoTiles {

    private JComponent ui = null;
    public static final int DOMINO_TILE_START = 127024;
    public static final int DOMINO_TILE_END = 127123;
    String dominoeTiles;
    JTextArea textArea = new JTextArea(4, 10);

    DominoTiles() {
        initUI();
    }

    public void initUI() {
        if (ui != null) {
            return;
        }

        ui = new JPanel(new BorderLayout(4, 4));
        ui.setBorder(new EmptyBorder(4, 4, 4, 4));

        StringBuilder sb = new StringBuilder();
        for (int ii = DOMINO_TILE_START; ii <= DOMINO_TILE_END; ii++) {
            String s = new String(Character.toChars(ii));
            sb.append(s);
        }
        textArea.setText(sb.toString());
        textArea.setLineWrap(true);
        ui.add(new JScrollPane(textArea));

        String[] fontFamilies = GraphicsEnvironment.
                getLocalGraphicsEnvironment().getAvailableFontFamilyNames();
        final Vector<String> compatibleFonts = new Vector<>();
        for (String fontFamily : fontFamilies) {
            Font f = new Font(fontFamily, Font.PLAIN, 1);
            if (f.canDisplayUpTo(sb.toString()) < 0) {
                compatibleFonts.add(fontFamily);
            }
        }
        final JList list = new JList(compatibleFonts);
        ui.add(new JScrollPane(list), BorderLayout.LINE_START);
        ListSelectionListener listSelectionListener = new ListSelectionListener() {

            @Override
            public void valueChanged(ListSelectionEvent e) {
                if (!e.getValueIsAdjusting()) {
                    String fontFamily = list.getSelectedValue().toString();
                    Font f = new Font(fontFamily, Font.PLAIN, 60);
                    textArea.setFont(f);
                }
            }
        };
        list.addListSelectionListener(listSelectionListener);
        list.setSelectedIndex(0);
        list.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
    }

    public JComponent getUI() {
        return ui;
    }

    public static void main(String[] args) {
        Runnable r = new Runnable() {
            @Override
            public void run() {
                try {
                    UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
                } catch (Exception useDefault) {
                }
                DominoTiles o = new DominoTiles();

                JFrame f = new JFrame(o.getClass().getSimpleName());
                f.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
                f.setLocationByPlatform(true);

                f.setContentPane(o.getUI());
                f.pack();
                f.setMinimumSize(f.getSize());

                f.setVisible(true);
            }
        };
        SwingUtilities.invokeLater(r);
    }
}

В этом примере показано, как превратить символы Юникода в изображения (плюс еще несколько приемов их рендеринга).

image

0 голосов
/ 30 июня 2018

Домино представлено символами UTF8 от U + 1F030 до U + 1F09F. Для них есть специальный блок.

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 100 ? ? ? ? ? ? ? ? ? ? 100 ? ? 100 100

Согласно https://unicode -table.com :

Domino Tiles - это блок Unicode, содержащий символы для представления игровых ситуаций в домино. Блок содержит символы для стандартного набора из шести точек и задних сторон в горизонтальной и вертикальной ориентации

См. https://unicode -table.com / ru / blocks / domino-плитки /

Согласно стандарту Unicode, версия 10.0 :

Символы фишек домино не представляют фигуры домино как таковые, но вместо этого представляют собой графические символы для конкретных ориентаций домино, потому что ориентация фишек важна при обсуждении игры в домино. Каждое визуально различимое вращение плитки домино кодируется отдельно. Так, например, как плитка домино U + 1F081 вертикали-04-02, так и U + 1F04F
кодируются плитки домино горизонтальные-04-02, а также плитки домино U + 1F075 вертикальные-02-04 и плитки домино U + 1F043 горизонтальные-02-04. Все четыре из этих символов представляют одну и ту же игровую плитку, но каждая ориентация плитки визуально отличается и требует своего собственного символа для текста. Цифры в именах символов для символов плиток домино отражают точечные рисунки на плитках.

Вы также должны выбрать шрифт, способный отображать их.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...