我目前正在用Java创建多米诺骨牌游戏。想法是加载多米诺骨牌图像,如有必要旋转它们,然后在屏幕上显示它们。 几周前,我发布了一个问题,询问如何在Java中旋转imageIcon。
Someone replied如下:“ Unicode字符集包含多米诺骨牌”。
因此,如果我正确理解这一点,可以使用Unicode字符集在屏幕上显示多米诺骨牌,而不是加载多米诺骨牌图像?我在互联网上找不到任何示例。任何人都可以给我举一个例子说明如何做到这一点?
答案 0 :(得分:2)
多米诺骨牌由U + 1F030到U + 1F09F的UTF8字符表示。他们有一个特殊的障碍。
Domino Tiles是一个Unicode块,其中包含用于表示多米诺骨牌游戏情况的字符。该块包含用于标准六点图块集的符号,以及在水平和垂直方向上的背面
请参见https://unicode-table.com/en/blocks/domino-tiles/
根据Unicode Standard, Version 10.0:
多米诺瓷砖符号本身并不代表多米诺骨牌,而是构成针对多米诺骨牌特定方向的图形符号,因为瓷砖的方向在讨论多米诺骨牌时很重要。多米诺骨牌的每个视觉上不同的旋转均被单独编码。因此,例如,U + 1F081多米诺骨牌垂直04-02和U + 1F04F
多米诺瓦水平-04-02以及U + 1F075多米诺瓦垂直02-04和U + 1F043多米诺瓦水平02-04均已编码。这些四个符号全部代表相同的游戏图块,但是图块的每个方向在视觉上都是不同的,并且需要其自己的文本符号。多米诺拼贴符号的字符名称中的数字反映了拼贴上的点图案。
您还必须选择一种能够显示它们的字体。
答案 1 :(得分:1)
上一个答案是正确的。但是:
更方便的字符页面:http://www.alanwood.net/unicode/domino-tiles.html
此外,这些字符的实际打印在here中进行了描述。
打印其中一个多米诺骨牌的示例:
class Scratch {
public static void main(String[] args) {
System.out.println(new String(Character.toChars(127026)));
}
}
这将在IntelliJ的控制台上打印。您的结果可能会有所不同,具体取决于您的字体。
答案 2 :(得分:0)
以下代码显示如何确定支持显示这组Unicode字符的已安装字体(此处已安装250多种字体中的3种),并在文本区域中显示它们。
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字符转换为图像(以及渲染它们的更多技巧)。