首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用Unicode字符集显示dominoes

使用Unicode字符集显示dominoes
EN

Stack Overflow用户
提问于 2018-06-30 06:04:37
回答 3查看 434关注 0票数 1

我目前正在用java创建一款domino游戏。我们的想法是加载domino图像,必要时旋转它们,然后在屏幕上显示它们。几周前,我发布了一个问题,询问如何在Java语言中旋转imageIcon。

Someone replied如下:“Unicode字符集包括骨牌”。

因此,如果我理解正确的话,我可以使用Unicode字符集在屏幕上显示domino,而不是加载domino图像。我在互联网上找不到任何这样做的例子。有没有人能给我举个例子,说明是怎么做到的?

EN

回答 3

Stack Overflow用户

发布于 2018-06-30 06:18:16

从U+1F030到U+1F09F,骨牌都是由UTF8字符表示的。为他们准备了一个特殊的模块。

根据https://unicode-table.com的说法

Domino Tiles是一个Unicode块,其中包含用于表示Domino中的游戏情况的字符。该块包括标准六点瓦片集和水平和垂直方向的背面的符号

请参阅https://unicode-table.com/en/blocks/domino-tiles/

根据Unicode Standard, Version 10.0的说法

骨牌瓷砖符号本身并不代表骨牌棋子,而是构成了骨牌特定方向的图形符号,因为瓷砖的方向在讨论骨牌游戏时很重要。domino瓦片的每个视觉上不同的旋转都被单独编码。因此,例如,垂直domino瓦片U+1F081 -04-02和U+1F04F

对domino tile -04-02以及U+1F075 domino tile -02-04和U+1F043 domino tile -02-04进行编码。所有这四个符号代表相同的游戏磁贴,但磁贴的每个方向在视觉上是不同的,并且需要它自己的文本符号。domino磁贴符号的字符名称中的数字反映了磁贴上的点图案。

您还必须选择一种能够显示它们的字体。

票数 2
EN

Stack Overflow用户

发布于 2018-06-30 06:27:41

前面的答案是正确的。但是:

更方便的字符页面:http://www.alanwood.net/unicode/domino-tiles.html

此外,here还描述了这些字符的实际打印过程。

打印其中一个骨牌的示例:

代码语言:javascript
复制
class Scratch {
    public static void main(String[] args) {
        System.out.println(new String(Character.toChars(127026)));
    }
}

这会在IntelliJ的控制台上打印出来。根据您的字体,您的结果可能会有所不同。

票数 1
EN

Stack Overflow用户

发布于 2018-06-30 10:32:14

以下代码显示了如何确定支持显示这组Unicode字符的已安装字体(此处安装的250多种字体中的3种),并在文本区域中显示它们。

代码语言:javascript
复制
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);
    }
}

This example展示了如何将Unicode字符转换为图像(以及一些渲染它们的技巧)。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51109953

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档