C/C++实现的游戏角色名称名字随机生成代码

论坛 期权论坛 脚本     
niminba   2021-5-23 04:57   3167   0
#ifndef __NAME_H__
#define __NAME_H__

class CName
{
public:
 CName(); 

 virtual ~CName();

 const char* GetName();
protected:

 void InitSurname();

 void InitName();

 char* m_pSurname_OneDimensional;
 char** m_ppSurname;  // 姓

 char* m_pName_OneDimensional;
 char** m_ppName;  // 名

 // 3 个中文占 6 个字符
 char m_szName[ 7 ];
};


#endif
#include "name.h"
#include <string.h>
#include <time.h>
#include <stdlib.h>

CName::CName()
{
 srand( ( unsigned )time( NULL ) );
 // 225 个单姓
 m_pSurname_OneDimensional = new char[ 225 * 3 ];
 m_ppSurname = new char*[ 255 ];

 int m = 0;
 for (int i=0; i<225; i++ )
 {
  m_ppSurname[ i ] = &m_pSurname_OneDimensional[ m ];
  m += 3;
 }

 // 4876 个名, 名只有 2 个汉字
 m_pName_OneDimensional = new char[ 4876 * 5 ];
 m_ppName = new char*[ 4876 ];

 m = 0;
 for (int i=0; i<4876; i++ )
 {
  m_ppName[ i ] = &m_pName_OneDimensional[ m ];
  m += 5;
 } 

 memset( m_szName, 0, sizeof( m_szName ) );
 InitSurname();
 InitName();
}

CName::~CName()
{
 if ( m_pSurname_OneDimensional )
 {
  delete [] m_pSurname_OneDimensional;
 }

 if ( m_ppSurname )
 {
  delete [] m_ppSurname;
 }

 if ( m_pName_OneDimensional )
 {
  delete [] m_pName_OneDimensional;
 }

 if ( m_ppName )
 {
  delete [] m_ppName;
 }
}

void CName::InitSurname()
{
 strcpy( m_ppSurname[ 0 ], "安" );
 strcpy( m_ppSurname[ 1 ], "柏" );
 strcpy( m_ppSurname[ 2 ], "鲍" );
 strcpy( m_ppSurname[ 3 ], "毕" );
 strcpy( m_ppSurname[ 4 ], "曹" );
 strcpy( m_ppSurname[ 5 ], "岑" );
 strcpy( m_ppSurname[ 6 ], "昌" );
 strcpy( m_ppSurname[ 7 ], "常" );
 strcpy( m_ppSurname[ 8 ], "丁" );
 strcpy( m_ppSurname[ 9 ], "酆" );
 strcpy( m_ppSurname[ 10 ], "傅" );
 strcpy( m_ppSurname[ 11 ], "郝" );
 strcpy( m_ppSurname[ 12 ], "赫" );
 strcpy( m_ppSurname[ 13 ], "华" );
 strcpy( m_ppSurname[ 14 ], "姜" );
 strcpy( m_ppSurname[ 15 ], "解" );
 strcpy( m_ppSurname[ 16 ], "雷" );
 strcpy( m_ppSurname[ 17 ], "廉" );
 strcpy( m_ppSurname[ 18 ], "吕" );
 strcpy( m_ppSurname[ 19 ], "马" );
 strcpy( m_ppSurname[ 20 ], "聂" );
 strcpy( m_ppSurname[ 21 ], "潘" );
 strcpy( m_ppSurname[ 22 ], "彭" );
 strcpy( m_ppSurname[ 23 ], "史" );
 strcpy( m_ppSurname[ 24 ], "汤" );
 strcpy( m_ppSurname[ 25 ], "陶" );
 strcpy( m_ppSurname[ 26 ], "滕" );
 strcpy( m_ppSurname[ 27 ], "邬" );
 strcpy( m_ppSurname[ 28 ], "许" );
 strcpy( m_ppSurname[ 29 ], "严" );
 strcpy( m_ppSurname[ 30 ], "应" );
 strcpy( m_ppSurname[ 31 ], "杭" );
 strcpy( m_ppSurname[ 32 ], "喻" );
 strcpy( m_ppSurname[ 33 ], "李" );
 strcpy( m_ppSurname[ 34 ], "仇" );
 strcpy( m_ppSurname[ 35 ], "卢" );
 strcpy( m_ppSurname[ 36 ], "项" );
 strcpy( m_ppSurname[ 37 ], "江" );
 strcpy( m_ppSurname[ 38 ], "万" );
 strcpy( m_ppSurname[ 39 ], "堪" );
 strcpy( m_ppSurname[ 40 ], "黎" );
 strcpy( m_ppSurname[ 41 ], "席" );
 strcpy( m_ppSurname[ 42 ], "经" );
 strcpy( m_ppSurname[ 43 ], "车" );
 strcpy( m_ppSurname[ 44 ], "贾" );
 strcpy( m_ppSurname[ 45 ], "裘" );
 strcpy( m_ppSurname[ 46 ], "支" );
 strcpy( m_ppSurname[ 47 ], "费" );
 strcpy( m_ppSurname[ 48 ], "祁" );
 strcpy( m_ppSurname[ 49 ], "屈" );
 strcpy( m_ppSurname[ 50 ], "纪" );
 strcpy( m_ppSurname[ 51 ], "鄂" );
 strcpy( m_ppSurname[ 52 ], "田" );
 strcpy( m_ppSurname[ 53 ], "尹" );
 strcpy( m_ppSurname[ 54 ], "阎" );
 strcpy( m_ppSurname[ 55 ], "蔡" );
 strcpy( m_ppSurname[ 56 ], "粱" );
 strcpy( m_ppSurname[ 57 ], "罗" );
 strcpy( m_ppSurname[ 58 ], "咎" );
 strcpy( m_ppSurname[ 59 ], "夏" );
 strcpy( m_ppSurname[ 60 ], "禹" );
 strcpy( m_ppSurname[ 61 ], "高" );
 strcpy( m_ppSurname[ 62 ], "管" );
 strcpy( m_ppSurname[ 63 ], "穆" );
 strcpy( m_ppSurname[ 64 ], "汪" );
 strcpy( m_ppSurname[ 65 ], "骆" );
 strcpy( m_ppSurname[ 66 ], "周" );
 strcpy( m_ppSurname[ 67 ], "袁" );
 strcpy( m_ppSurname[ 68 ], "姚" );
 strcpy( m_ppSurname[ 69 ], "由" );
 strcpy( m_ppSurname[ 70 ], "吴" );
 strcpy( m_ppSurname[ 71 ], "钮" );
 strcpy( m_ppSurname[ 72 ], "惠" );
 strcpy( m_ppSurname[ 73 ], "刘" );
 strcpy( m_ppSurname[ 74 ], "诸" );
 strcpy( m_ppSurname[ 75 ], "甄" );
 strcpy( m_ppSurname[ 76 ], "荀" );
 strcpy( m_ppSurname[ 77 ], "张" );
 strcpy( m_ppSurname[ 78 ], "孟" );
 strcpy( m_ppSurname[ 79 ], "於" );
 strcpy( m_ppSurname[ 80 ], "俞" );
 strcpy( m_ppSurname[ 81 ], "景" );
 strcpy( m_ppSurname[ 82 ], "唐" );
 strcpy( m_ppSurname[ 83 ], "石" );
 strcpy( m_ppSurname[ 84 ], "吉" );
 strcpy( m_ppSurname[ 85 ], "薛" );
 strcpy( m_ppSurname[ 86 ], "魏" );
 strcpy( m_ppSurname[ 87 ], "符" );
 strcpy( m_ppSurname[ 88 ], "包" );
 strcpy( m_ppSurname[ 89 ], "羊" );
 strcpy( m_ppSurname[ 90 ], "宓" );
 strcpy( m_ppSurname[ 91 ], "程" );
 strcpy( m_ppSurname[ 92 ], "荣" );
 strcpy( m_ppSurname[ 93 ], "詹" );
 strcpy( m_ppSurname[ 94 ], "家" );
 strcpy( m_ppSurname[ 95 ], "崔" );
 strcpy( m_ppSurname[ 96 ], "封" );
 strcpy( m_ppSurname[ 97 ], "钱" );
 strcpy( m_ppSurname[ 98 ], "洪" );
 strcpy( m_ppSurname[ 99 ], "左" );
 strcpy( m_ppSurname[ 100 ], "贺" );
 strcpy( m_ppSurname[ 101 ], "邵" );
 strcpy( m_ppSurname[ 102 ], "邢" );
 strcpy( m_ppSurname[ 103 ], "燕" );
 strcpy( m_ppSurname[ 104 ], "鹿" );
 strcpy( m_ppSurname[ 105 ], "方" );
 strcpy( m_ppSurname[ 106 ], "韩" );
 strcpy
 strcpy( m_ppName[ 4776 ], "慕梅" );
 strcpy( m_ppName[ 4777 ], "幼蓉" );
 strcpy( m_ppName[ 4778 ], "亦寒" );
 strcpy( m_ppName[ 4779 ], "莹" );
 strcpy( m_ppName[ 4780 ], "冬易" );
 strcpy( m_ppName[ 4781 ], "丹云" );
 strcpy( m_ppName[ 4782 ], "丹寒" );
 strcpy( m_ppName[ 4783 ], "丹蝶" );
 strcpy( m_ppName[ 4784 ], "代真" );
 strcpy( m_ppName[ 4785 ], "翠梅" );
 strcpy( m_ppName[ 4786 ], "翠风" );
 strcpy( m_ppName[ 4787 ], "翠柏" );
 strcpy( m_ppName[ 4788 ], "翠安" );
 strcpy( m_ppName[ 4789 ], "从霜" );
 strcpy( m_ppName[ 4790 ], "从露" );
 strcpy( m_ppName[ 4791 ], "初之" );
 strcpy( m_ppName[ 4792 ], "初柔" );
 strcpy( m_ppName[ 4793 ], "初露" );
 strcpy( m_ppName[ 4794 ], "初蝶" );
 strcpy( m_ppName[ 4795 ], "采萱" );
 strcpy( m_ppName[ 4796 ], "采蓝" );
 strcpy( m_ppName[ 4797 ], "采白" );
 strcpy( m_ppName[ 4798 ], "冰烟" );
 strcpy( m_ppName[ 4799 ], "冰彤" );
 strcpy( m_ppName[ 4800 ], "冰巧" );
 strcpy( m_ppName[ 4801 ], "斌" );
 strcpy( m_ppName[ 4802 ], "傲云" );
 strcpy( m_ppName[ 4803 ], "凝冬" );
 strcpy( m_ppName[ 4804 ], "雁凡" );
 strcpy( m_ppName[ 4805 ], "书翠" );
 strcpy( m_ppName[ 4806 ], "千凡" );
 strcpy( m_ppName[ 4807 ], "半青" );
 strcpy( m_ppName[ 4808 ], "惜儿" );
 strcpy( m_ppName[ 4809 ], "曼凡" );
 strcpy( m_ppName[ 4810 ], "乐珍" );
 strcpy( m_ppName[ 4811 ], "新柔" );
 strcpy( m_ppName[ 4812 ], "翠萱" );
 strcpy( m_ppName[ 4813 ], "飞瑶" );
 strcpy( m_ppName[ 4814 ], "幻露" );
 strcpy( m_ppName[ 4815 ], "梦蕊" );
 strcpy( m_ppName[ 4816 ], "安露" );
 strcpy( m_ppName[ 4817 ], "晓露" );
 strcpy( m_ppName[ 4818 ], "白枫" );
 strcpy( m_ppName[ 4819 ], "怀薇" );
 strcpy( m_ppName[ 4820 ], "雁露" );
 strcpy( m_ppName[ 4821 ], "梦竹" );
 strcpy( m_ppName[ 4822 ], "盼柳" );
 strcpy( m_ppName[ 4823 ], "沛岚" );
 strcpy( m_ppName[ 4824 ], "夜南" );
 strcpy( m_ppName[ 4825 ], "香寒" );
 strcpy( m_ppName[ 4826 ], "山柏" );
 strcpy( m_ppName[ 4827 ], "雁易" );
 strcpy( m_ppName[ 4828 ], "静珊" );
 strcpy( m_ppName[ 4829 ], "雁蓉" );
 strcpy( m_ppName[ 4830 ], "千易" );
 strcpy( m_ppName[ 4831 ], "笑萍" );
 strcpy( m_ppName[ 4832 ], "从雪" );
 strcpy( m_ppName[ 4833 ], "书雁" );
 strcpy( m_ppName[ 4834 ], "曼雁" );
 strcpy( m_ppName[ 4835 ], "晓丝" );
 strcpy( m_ppName[ 4836 ], "念蕾" );
 strcpy( m_ppName[ 4837 ], "雅柔" );
 strcpy( m_ppName[ 4838 ], "采柳" );
 strcpy( m_ppName[ 4839 ], "易绿" );
 strcpy( m_ppName[ 4840 ], "向卉" );
 strcpy( m_ppName[ 4841 ], "惜文" );
 strcpy( m_ppName[ 4842 ], "冰兰" );
 strcpy( m_ppName[ 4843 ], "尔安" );
 strcpy( m_ppName[ 4844 ], "语芹" );
 strcpy( m_ppName[ 4845 ], "晓山" );
 strcpy( m_ppName[ 4846 ], "秋蝶" );
 strcpy( m_ppName[ 4847 ], "曼卉" );
 strcpy( m_ppName[ 4848 ], "凝梦" );
 strcpy( m_ppName[ 4849 ], "向南" );
 strcpy( m_ppName[ 4850 ], "念文" );
 strcpy( m_ppName[ 4851 ], "冰蓝" );
 strcpy( m_ppName[ 4852 ], "听南" );
 strcpy( m_ppName[ 4853 ], "慕凝" );
 strcpy( m_ppName[ 4854 ], "如容" );
 strcpy( m_ppName[ 4855 ], "亦凝" );
 strcpy( m_ppName[ 4856 ], "乐菱" );
 strcpy( m_ppName[ 4857 ], "怀蝶" );
 strcpy( m_ppName[ 4858 ], "惜筠" );
 strcpy( m_ppName[ 4859 ], "冬萱" );
 strcpy( m_ppName[ 4860 ], "初南" );
 strcpy( m_ppName[ 4861 ], "含桃" );
 strcpy( m_ppName[ 4862 ], "语风" );
 strcpy( m_ppName[ 4863 ], "白竹" );
 strcpy( m_ppName[ 4864 ], "夏瑶" );
 strcpy( m_ppName[ 4865 ], "雅绿" );
 strcpy( m_ppName[ 4866 ], "怜雪" );
 strcpy( m_ppName[ 4867 ], "从菡" );
 strcpy( m_ppName[ 4868 ], "访波" );
 strcpy( m_ppName[ 4869 ], "安青" );
 strcpy( m_ppName[ 4870 ], "觅柔" );
 strcpy( m_ppName[ 4871 ], "雅青" );
 strcpy( m_ppName[ 4872 ], "白亦" );
 strcpy( m_ppName[ 4873 ], "宛凝" );
 strcpy( m_ppName[ 4874 ], "安阳" );
 strcpy( m_ppName[ 4875 ], "苞络" );
}

const char* CName::GetName()
{
 //srand( ( unsigned )time( NULL ) ); 

 // [ 0, 225 ]
 int nPos_1 = rand()%225;
 
 // [ 0 , 4875 ]
 int nPos_2 = rand()%4876; 

 // GetName() 会被频繁调用, 属于性能敏感部分; 少量赋值代码比 strcpy 更有效率
 m_szName[ 0 ] = m_ppSurname[ nPos_1 ][ 0 ];
 m_szName[ 1 ] = m_ppSurname[ nPos_1 ][ 1 ];

 m_szName[ 2 ] = m_ppName[ nPos_2 ][ 0 ];
 m_szName[ 3 ] = m_ppName[ nPos_2 ][ 1 ];
 m_szName[ 4 ] = m_ppName[ nPos_2 ][ 2 ];
 m_szName[ 5 ] = m_ppName[ nPos_2 ][ 3 ];

 return m_szName;
}

分享到 :
0 人收藏
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

积分:1060120
帖子:212021
精华:0
期权论坛 期权论坛
发布
内容

下载期权论坛手机APP