MMORTBS開発記-005 ユニット一覧 なんとなくユニット名生成ストアド作成
いつもありがとうございます。
スキマ時間開発のお時間です。よろしくお願いします。
前回までのあらすじ
ユニット一覧のデザインを仮決めしたよ!
一覧作成中ですが、ちょっと思い立ったので、ストアド一本作成しました。
ガチャで引いたときに、種族名ではなく、名前つけたほうが面白いのではないか、と。
一覧作成したときに、同じ名前が並ぶのって味気ないなー、と。
コードです。
-- ユニット名生成
-- fnc_make_unit_name()
delimiter //
CREATE OR REPLACE FUNCTION fnc_make_unit_name()
RETURNS VARCHAR(20) DETERMINISTIC
BEGIN
DECLARE p_unit_name VARCHAR(20) DEFAULT '';
DECLARE p_len INT(2) DEFAULT -1;
DECLARE i INT(2) DEFAULT 0;
DECLARE p_use_mozi VARCHAR(200) DEFAULT 'アイウエオカキクケコサシスセソタチツテトナニヌネノハヒフヘホマミムメモヤユヨラリルレロワンガギグゲゴザジズゼゾダヅデドバビブベボパピプペポーーー☆☆猿凹渦靴稼拐涯垣殻潟喝褐缶頑挟矯襟隅渓蛍嫌洪溝昆崎皿桟傘肢遮蛇酌汁';
DECLARE p_retry_f INT(1) DEFAULT 1;
-- 文字数を決定(2~6文字)
WHILE p_retry_f = 1 DO
SET p_retry_f = 0;
SELECT FLOOR(2 + RAND() * 4) INTO p_len;
WHILE i < p_len DO
set p_unit_name = CONCAT(
p_unit_name,
SUBSTRING(p_use_mozi, CEIL(RAND() * CHAR_LENGTH(p_use_mozi)), 1)
);
SET i = i + 1;
END WHILE;
-- 長音符始まりの場合は再作成
IF INSTR(p_unit_name, 'ー') = 1 THEN SET p_retry_f = 1 ; END IF;
-- 長音符が重なる場合は再作成
IF INSTR(p_unit_name, 'ーー') <> 0 THEN SET p_retry_f = 1 ; END IF;
-- ン始まりの場合は再作成
IF INSTR(p_unit_name, 'ン') = 1 THEN SET p_retry_f = 1 ; END IF;
-- ンが重なる場合は再作成
IF INSTR(p_unit_name, 'ンン') <> 0 THEN SET p_retry_f = 1 ; END IF;
-- ☆が重なる場合は再作成
IF INSTR(p_unit_name, '☆☆') <> 0 THEN SET p_retry_f = 1 ; END IF;
-- 再作成の場合
IF p_retry_f = 1 THEN
SET p_unit_name = '';
SET i = 0;
END IF;
END WHILE;
-- 拗音処理
SELECT REPLACE(p_unit_name, '猿', 'キャ') INTO p_unit_name;
SELECT REPLACE(p_unit_name, '凹', 'ギャ') INTO p_unit_name;
SELECT REPLACE(p_unit_name, '渦', 'シャ') INTO p_unit_name;
SELECT REPLACE(p_unit_name, '靴', 'ジャ') INTO p_unit_name;
SELECT REPLACE(p_unit_name, '稼', 'チャ') INTO p_unit_name;
SELECT REPLACE(p_unit_name, '拐', 'ニャ') INTO p_unit_name;
SELECT REPLACE(p_unit_name, '涯', 'ヒャ') INTO p_unit_name;
SELECT REPLACE(p_unit_name, '垣', 'ビャ') INTO p_unit_name;
SELECT REPLACE(p_unit_name, '殻', 'ピャ') INTO p_unit_name;
SELECT REPLACE(p_unit_name, '潟', 'ミュ') INTO p_unit_name;
SELECT REPLACE(p_unit_name, '喝', 'リュ') INTO p_unit_name;
SELECT REPLACE(p_unit_name, '褐', 'キュ') INTO p_unit_name;
SELECT REPLACE(p_unit_name, '缶', 'ギュ') INTO p_unit_name;
SELECT REPLACE(p_unit_name, '頑', 'シュ') INTO p_unit_name;
SELECT REPLACE(p_unit_name, '挟', 'ジュ') INTO p_unit_name;
SELECT REPLACE(p_unit_name, '矯', 'チュ') INTO p_unit_name;
SELECT REPLACE(p_unit_name, '襟', 'ニュ') INTO p_unit_name;
SELECT REPLACE(p_unit_name, '隅', 'ヒュ') INTO p_unit_name;
SELECT REPLACE(p_unit_name, '渓', 'ビュ') INTO p_unit_name;
SELECT REPLACE(p_unit_name, '蛍', 'ピュ') INTO p_unit_name;
SELECT REPLACE(p_unit_name, '嫌', 'ミョ') INTO p_unit_name;
SELECT REPLACE(p_unit_name, '洪', 'リョ') INTO p_unit_name;
SELECT REPLACE(p_unit_name, '溝', 'キョ') INTO p_unit_name;
SELECT REPLACE(p_unit_name, '昆', 'ギョ') INTO p_unit_name;
SELECT REPLACE(p_unit_name, '崎', 'ショ') INTO p_unit_name;
SELECT REPLACE(p_unit_name, '皿', 'ジョ') INTO p_unit_name;
SELECT REPLACE(p_unit_name, '桟', 'チョ') INTO p_unit_name;
SELECT REPLACE(p_unit_name, '傘', 'ニョ') INTO p_unit_name;
SELECT REPLACE(p_unit_name, '肢', 'ヒョ') INTO p_unit_name;
SELECT REPLACE(p_unit_name, '遮', 'ビョ') INTO p_unit_name;
SELECT REPLACE(p_unit_name, '蛇', 'ピョ') INTO p_unit_name;
SELECT REPLACE(p_unit_name, '酌', 'ミョ') INTO p_unit_name;
SELECT REPLACE(p_unit_name, '汁', 'リョ') INTO p_unit_name;
RETURN p_unit_name;
END;
//
delimiter ;
もっと綺麗なコードもありそうですが、とりあえすこんな感じ。
カタカナ2~6文字(拗音は1文字カウント)を適当に並べるシンプル構成!
50件並べると。
SELECT fnc_make_unit_name()
UNION ALL SELECT fnc_make_unit_name()
・
・
・
UNION ALL SELECT fnc_make_unit_name() ;
fnc_make_unit_name()
ヒュヘ
リョギャドプゴ
キョスキョ
クビュ
オジュ
ビミュ
ピャナ
☆ガコツ
ヨエサガ
ギュブジービュ
ソプギャ
ネスリョセ
ラニョ☆ベヒュ
ウベシュラ
プコビ
クギャモザ
ペショキャ
ドドケリュ
オチーギュ
ピョポ
レチプ
メ☆グナ
ゼーニャミュ
ビョニュヤス
ルイニョ
ジャザトゾ
ガタゴビュニョ
ヒョホ
ヒューキャダ
オーツジュ
ビャヒュイザ
ムジズ
ポシ
ミョゼニュジャ
ホス
ユズギシャ
ツイパ
クガリョヌル
ツカヒャ
ヒュレルシャ
ツガペ
グポビュルモ
ゴチュミュ
ヒャゼヘ
ネ☆ニャキャノ
ドピ
ヘカジ
チャヒョ
セチュギュデ
テギャリョ
可愛かったりきもかったり。
50音に対して、拗音33音はちょっと割合が多い印象。
50音を2回登録してもいいかも。
最後まで読んでいただきありがとうございました。
この記事が気に入ったらサポートをしてみませんか?