4

私が開発しているゲームで使用するランダムな名前ジェネレーターに取り組んでいます。問題は、異なる命名スタイルを持つ異なる種が存在することです。単一の名前ジェネレーターをそれらすべてで使用したいと思います。私はこの問題のパート1を分類しました-名前ジェネレーターは一連のテンプレートを使用し、プレーヤー/NPCの種類ごとに1セットずつ使用します。

私が抱えている主な問題は、いくつかの母音にランダムに選択されたアクセント記号が必要なことです。検索して検索しましたが、ランダムに文字を選択してアクセント記号を付ける方法が見つかりません。では、文字を選択してアクセント記号を付けることで、アクセント記号付きの文字を作成する方法は何でしょうか。

4

3 に答える 3

4

Unicodeには、ほとんどの種類のアクセントを表す「結合」文字があります。作成した結合文字の配列から結合文字をランダムに選択するのは非常に簡単です。次に、好きなキャラクターにアクセントを付けることができます。

http://en.wikipedia.org/wiki/Combining_character

これらはコードポイントで表されるため、それ自体を文字として扱うことができます。

String s = "a" + "\u0300"; // latin lowercase letter a + combining grave accent
char combining_grave_accent = '\u0300';
于 2012-06-16T01:57:48.773 に答える
1

うーん、おそらく2d配列を使用して、2列とこれまでの行数(アクセント付き文字の数)を持つ変換テーブルを作成します。1番目の列にはすべてのアクセント付きの値が格納され、2番目の列には値が格納されます。アクセント付き、つまりa、e、i、o、uで、名前の母音を生成するときに、アクセントを付けるかどうかをランダムに選択できます。アクセントを付ける場合は、2D配列を繰り返し処理して、すべてのアクセント付きの値を取得します。 'a'などを使用し、配列の2番目の列の値を取得してチェックし(すべてのアクセント付きのaが選択されるように)、使用するものをランダムに選択します。

それは長い道のりです、私はこれのためのJavaのショートカットがないことを知っています。

編集:ここに私が提案したものと一致するいくつかのコードがあります:

import java.util.ArrayList;

/**
 *
 * @author David
 */
public class JavaApplication145 {

    static char[][] chars = new char[6][6];

    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {

        createConversionTable();

        char c = 'u';

        ArrayList<String> charsList = getAccentedChar(c);

        for (int i = 0; i < charsList.size(); i++) {
            System.out.println(charsList.get(i));
        }

    }

    private static void createConversionTable() {
        chars[0] = new char[]{'ù', 'ü', 'é', 'ê', 'ä', 'à'};
        chars[1] = new char[]{'u', 'u', 'e', 'e', 'a', 'a'};
    }

    private static ArrayList getAccentedChar(char c) {

        ArrayList<String> charsList = new ArrayList<>();

        for (int i = 0; i < chars[0].length; i++) {

            for (int x = 0; x < chars[1].length; x++) {

                if (chars[i][x] == c) {
                    charsList.add(chars[i - 1][x] + "");
                }

            }
        }
        return charsList;
    }
}
于 2012-06-15T21:45:09.910 に答える
-1

同じものが必要だったので、私はこれを作ることになりました:

        /**
 * Given a letter and an accent, return the char with the accent included.
 * 
 * @param accentCode: The accent char; i.e '~', '´';
 * @param letter: Letter to put accent in it.
 * @return: Char with {@code letter} with accent if it was a valid letter.
 */
public static int getAccent(char accentChar, int letter) {
    int index = 0;
    boolean upperCase = false;
    for (char vogal : vogalList) {
        if (letter == vogal) {
            if (index >= 5) {
                index -= 5;
                upperCase = true;
            }
            for (int accentType = 0; accentType < convertTable.length; accentType++) {
                if (convertTable[accentType][0] == accentChar) {
                    char converted = convertTable[accentType][index + 1];
                    if (converted != '-') {
                        if (upperCase)
                            converted = Character.toUpperCase(converted);

                        return converted;
                    }
                }
            }
        }
        index++;
    }
    return letter;
}

/**
 * Verify if {@code charID} is an accent character;
 * 
 * @param charID: Character code id to be verified.
 * @return: true in case {@code charID} is an accent character id.
 */
public static boolean isAccent(int charID) {
    for (int i = 0; i < convertTable.length; i++) {
        if (convertTable[i][0] == charID)
            return true;
    }
    return false;
}

private static final char[] vogalList = { 'a', 'e', 'i', 'o', 'u', 'A', 'E', 'I', 'O', 'U' };
private static final char[][] convertTable = { { '´', 'á', 'é', 'í', 'ó', 'ú' }, { '`', 'à', 'è', 'ì', 'ò', 'ù' }, { '^', 'â', 'ê', 'î', 'ô', 'û' }, { '~', 'ã', '-', '-', 'õ', '-' }, { '¨', 'ä', 'ë', 'ï', 'ö', 'ü' } };
于 2013-01-19T06:58:46.887 に答える