Re: [閒聊] 如何命名出帥氣的招式、ID或隊伍名稱已回收
這東西理論上是可以寫產生器的。
我所 coding 的 mud,為了能在短時間產生大量的城鎮名稱,
我就寫了一支小程式來試著產生出英文的名字。
======
// 隨機命名指令
// LAechan@Sanc add in 2013/07/15
#define names ({\
"a","b","c","d","e","f","g","h","i","j","k","l","m",\
"n","o","p","q","r","s","t","u","v","w","x","y","z"\
})
#define mothers ({"a","e","i","o","u","y"})
int cmd_runname(string str)
{
mixed strs=({}),tmps=({});
int s,i,m,t;
// 先決定字串總長度, 6~14
s = 6+random(7);
for(i=0;i<s;i++)
strs+=({""});
// 選出一個開頭字母
strs[0] = names[random(26)];
// 接著去掉這個字母, 從 25 個剩餘字母裡挑出第二個字母
// 但是若開頭字是子音, 第二個字就高機率母音
tmps=names;
if(member_array(strs[0],mothers)==-1 && random(3)>0)
strs[1]=mothers[random(5)];
else
{
tmps-=({str});
strs[1] = tmps[random(25)];
}
// 然後是決定母音的位置及數量, 依照 s 的長度來分配
m = s/(2+random(2));
for(i=0;i<m;i++)
{
t=2+random(s-2);
strs[t]=mothers[random(5)];
}
// 最後就是配置剩餘的子音
tmps=names;
tmps-=mothers;
tmps+=({"y"});
for(i=2;i<s;i++)
if(strs[i]=="")
strs[i]=tmps[random(21)];
write("產生出的名字: "+implode(strs,"")+"\n");
return 1;
}
======
底下我以剛剛跑出來的結果,挑三個出來做範例說明:
產生出的名字: laobieikgmqg
產生出的名字: suzohepgo
產生出的名字: oxuqafoayqea
以這三個名字為例,比方 laobieikgmqg 我可以取 laobiei 就好,
後面不要,翻成中文類似拉歐碧依這樣的名字,例如說
艾恩‧葛朗特第 64 層主城鎮 ~拉歐碧依~
我想上面應該是沒什麼違和感的。
又例如 suzohepgo,翻成中文類似蘇柔嘿狗,那其實 hepgo 可以去
掉,換成像是蘇柔海姆,或是把幾個字音換掉,例如 suzohepgo 換
成 supoheim 蘇波荷姆這類的
艾恩‧葛朗特第 66 層主城鎮 ~蘇波荷姆~
我想這也是沒什麼違和感的。
又例如 oxuqafoayqea,如果把中間的 qa 拿後面的 qea 來換,就
變成 oxuqeafoay,再把 xu 拿掉就變 oqeafoay,翻成中文大概就
像是歐奎雅法耶這樣的名字
艾恩‧葛朗特第 68 層主城鎮 ~歐奎雅法耶~
舉這三個例子是要說明,程式產生的東西不是直接就拿來使用的,
產生出來的東西是一個「參考」,把這東西做一下去頭去尾、前後
替換、子母音替換等,才產生我真正想要的名字。
根據經驗,跑 100 個名字,才可能出現一個啥都不用改就能直接
用的名字。
底下是我之前有用以產生的幾個名字範例
阿斯忒伊 astelye
阿特隆佩 aterornpiie <= 這個就是直接跑出來的名字直接用
貝爾菲格爾 belphegor
畢庫斯碧 beekusbi
.
.
.
提亞馬特 tiamat
威薩菲斯 wiexafiex
烏卡托 wucartuo
扎庫歐 zakiuo
這樣的名字產生風格,跟打工魔王有點像,我有儲存幾個例如;
馬拉古達 malacoda
巴巴力提亞 barbariccia
法爾法洛 farfarello
奧爾巴梅亞 orbameiyer
安特伊蘇拉 enteisla
艾夫薩汗 efusahaim
因古諾雷德 igunoretto
卡希亞斯 kasyase
聖埃雷 saintaire
(我儲存這些名字的用意是做為程式修改的參考,也就是由其英
文名的子母音組成方式,來分析我的程式還能做什麼樣的改良)
技能名的部份,我以前也有寫過類似的東西,剛找程式碼找不到,
但大抵上可以根據以下的原則撰寫
1.把風火雷電炎雪氣........等等常見的名字放進 array1 中
2.把十百千萬億兆京........等等常見的數字放進 array2 中
3.把毀滅轟奔極霸威........等等常見的形容放進 array3 中
4.把殺擊破波砲斬拳........等等常見的尾字放進 array4 中
.
.
然後讓程式亂數產生 3~8 個字的組合技能名,它不用管 array
幾個,只要確保每次都是亂數字數、亂數 array 指派即可,例如
某一次的結果可以是產生五個字的:
百 氣 寒 霜 指
array2[1]+array1[6]+array1[19]+array1[12]+array4[8]
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
這三個字都儲存在 array1
然後就是讓程式產生海量的「參考」技能名,然後再從中找出大
致可做為技能名的「骨架」,然後
1.前後替換一下
2.左右挪動一下
3.增刪改幾個字
從上就可看出,重點就在於「樣本數」,也就是各 array 的內容
夠不夠多,內容越多,產生出的參考技能名就能越多樣。
因為我懶,所以我才寫程式幫我產生名字。
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 61.224.161.173
※ 文章網址: https://www.ptt.cc/bbs/C_Chat/M.1475571591.A.3F7.html
※ 編輯: laechan (61.224.161.173), 10/04/2016 17:02:51
推
10/04 17:03, , 1F
10/04 17:03, 1F
推
10/04 17:04, , 2F
10/04 17:04, 2F
推
10/04 17:09, , 3F
10/04 17:09, 3F
→
10/04 17:14, , 4F
10/04 17:14, 4F
推
10/04 17:15, , 5F
10/04 17:15, 5F
推
10/04 17:19, , 6F
10/04 17:19, 6F
我是懶......
推
10/04 17:21, , 7F
10/04 17:21, 7F
※ 編輯: laechan (61.224.161.173), 10/04/2016 17:23:10
推
10/04 17:29, , 8F
10/04 17:29, 8F
→
10/04 17:54, , 9F
10/04 17:54, 9F
推
10/04 18:31, , 10F
10/04 18:31, 10F
推
10/04 18:43, , 11F
10/04 18:43, 11F
推
10/04 18:44, , 12F
10/04 18:44, 12F
推
10/04 18:55, , 13F
10/04 18:55, 13F
推
10/04 19:29, , 14F
10/04 19:29, 14F
推
10/04 20:08, , 15F
10/04 20:08, 15F
推
10/04 21:06, , 16F
10/04 21:06, 16F
推
10/04 21:47, , 17F
10/04 21:47, 17F
推
10/05 00:21, , 18F
10/05 00:21, 18F
推
10/05 00:57, , 19F
10/05 00:57, 19F
推
10/05 00:57, , 20F
10/05 00:57, 20F
推
10/05 15:37, , 21F
10/05 15:37, 21F
→
10/05 15:37, , 22F
10/05 15:37, 22F
比方程式寫得很細、很多行,可產生出幾乎不再需要修改的名字
又比方程式寫得很簡易,但產生出的名字幾乎都只有參考價值還需要修正
那我的想法就是,必然有一支程式:
1.可經常產生具參考價值的名字
2.再透過人腦做稍微的修正即可得到真正能使用的名字
^^^^
也就是說我把 程式的核心處理部份 交給 人腦 來做,這樣程式就不需要
寫得很複雜很多行。
※ 編輯: laechan (61.224.161.173), 10/06/2016 09:07:27
討論串 (同標題文章)
完整討論串 (本文為第 10 之 11 篇):