将int列表转换为单词

Pau*_*pel 4 java string encoding integer

我正在开发一款游戏,这款游戏有一个组件可以根据游戏的属性为一个生物分配一个特定的名称.具体来说,我有一组整数告诉我游戏中的生物拥有哪些属性,我需要从这些特定属性中制定一个名称.

我的想法是:为每个数字1-47(通过Hashmap)分配一个音节,这种方式取决于动物的字符串属性是不同的.然而,一个明显的缺陷是字符串太长了.我写了一个算法,如果有超过4个音节,它基本上结合了音节.然而,这种类型的方法产生了许多类似的结果,特别是在大约20个音节缩小到4之后.有没有人对如何将一系列整数转化为一个有点独特的易读词有任何想法?(有些副本没问题,但在大多数情况下,我希望每个数字组合都有一个独特的单词)

mik*_*lly 5

我正在使用hashcode将int列表转换为一个16位int.然后通过假装它是一个基数n系统将该int转换为字符串,其中n是音节数,每个数字是一个音节.(通过将int限制为16位,您可以减少音节数).我不知道这是否有意义,但我希望输出能满足您的要求.

    import java.util.Arrays;
import java.util.List;

public class NameGenerator {

    final static List<String> syllables = Arrays.asList("ka", "sa", "ta", "na", "ha", "ma", "ya", "ra", "wa",
            "ki", "si", "ti", "ni", "hi", "mi", "yi", "ri", "wi",
            "ku", "su", "tu", "nu", "hu", "mu", "yu", "ru", "wu",
            "ke", "se", "te", "ne", "he", "me", "ye", "re", "we",
            "ko", "so", "to", "no", "ho", "mo", "yo", "ro", "wo");
    final static int maxSyllable = syllables.size() - 1;

    public static void main(String[] args) {
        int[] attributes = new int[]{25, 325, 4, 2, 11, 98, 23};
        String name = toName(attributes);
        System.out.println("name = " + name);
    }

    public static String toName(int[] attributes) {
        int hashCode = Arrays.hashCode(attributes);
        int smallHashCode = (hashCode >> 16) ^ (hashCode & 0xffff);
        return toName(smallHashCode);
    }

    public static String toName(int i) {
        if (i < 0) {
            i = -i;
        }
        StringBuilder buf = new StringBuilder();
        while (i > maxSyllable) {
            buf.append(syllables.get(i % maxSyllable));
            i = i / maxSyllable;
        }
        buf.append(syllables.get(i));
        return buf.toString();
    }
}
Run Code Online (Sandbox Code Playgroud)