设计一个小游戏,游戏以认识汉字并写出拼音为主题,要求:
1、 游戏应该支持不同用户的使用,能够将用户信息及得分以文件形式保存。
2、 软件可以读取汉字字库文件(可以在网上找,或者自己做一个,只要包括部分汉字及拼音即可),
并实现随机抽取一个汉字显示在游戏界面上。
3、 游戏界面上以图片形式显示 26 个字母(26 个图片,类似扑克牌),支持鼠标对图片的拖动。
4、 支持用户将字母分别拖动到指定区域组成答案并提交,游戏可以根据用户提交的图片判断拼音是否
正确。
5、 支持比赛成绩统计。
static void Main(string[] args)
{
Console.WriteLine(GetSpellCode("汉字")) ;
Console.ReadKey();
}
/// <summary>
/// 在指定的字符串列表CnStr中检索符合拼音索引字符串
/// </summary>
/// <param name="CnStr">汉字字符串</param>
/// <returns>相对应的汉语拼音首字母串</returns>
public static string GetSpellCode(string CnStr)
{
string strTemp = "";
int iLen = CnStr.Length;
int i = 0;
for (i = 0; i <= iLen - 1; i++)
{
strTemp += GetCharSpellCode(CnStr.Substring(i, 1));
}
return strTemp;
}
/// <summary>
/// 得到一个汉字的拼音第一个字母,如果是一个英文字母则直接返回大写字母
/// </summary>
/// <param name="CnChar">单个汉字</param>
/// <returns>单个大写字母</returns>
private static string GetCharSpellCode(string CnChar)
{
long iCnChar;
byte[] ZW = System.Text.Encoding.Default.GetBytes(CnChar);
//如果是字母,则直接返回
if (ZW.Length == 1)
{
return CnChar.ToUpper();
}
else
{
// get the array of byte from the single char
int i1 = (short)(ZW[0]);
int i2 = (short)(ZW[1]);
iCnChar = i1 * 256 + i2;
}
// iCnChar match the constant
if ((iCnChar >= 45217) && (iCnChar <= 45252))
{
return "A";
}
else if ((iCnChar >= 45253) && (iCnChar <= 45760))
{
return "B";
}
else if ((iCnChar >= 45761) && (iCnChar <= 46317))
{
return "C";
}
else if ((iCnChar >= 46318) && (iCnChar <= 46825))
{
return "D";
}
else if ((iCnChar >= 46826) && (iCnChar <= 47009))
{
return "E";
}
else if ((iCnChar >= 47010) && (iCnChar <= 47296))
{
return "F";
}
else if ((iCnChar >= 47297) && (iCnChar <= 47613))
{
return "G";
}
else if ((iCnChar >= 47614) && (iCnChar <= 48118))
{
return "H";
}
else if ((iCnChar >= 48119) && (iCnChar <= 49061))
{
return "J";
}
else if ((iCnChar >= 49062) && (iCnChar <= 49323))
{
return "K";
}
else if ((iCnChar >= 49324) && (iCnChar <= 49895))
{
return "L";
}
else if ((iCnChar >= 49896) && (iCnChar <= 50370))
{
return "M";
}
else if ((iCnChar >= 50371) && (iCnChar <= 50613))
{
return "N";
}
else if ((iCnChar >= 50614) && (iCnChar <= 50621))
{
return "O";
}
else if ((iCnChar >= 50622) && (iCnChar <= 50905))
{
return "P";
}
else if ((iCnChar >= 50906) && (iCnChar <= 51386))
{
return "Q";
}
else if ((iCnChar >= 51387) && (iCnChar <= 51445))
{
return "R";
}
else if ((iCnChar >= 51446) && (iCnChar <= 52217))
{
return "S";
}
else if ((iCnChar >= 52218) && (iCnChar <= 52697))
{
return "T";
}
else if ((iCnChar >= 52698) && (iCnChar <= 52979))
{
return "W";
}
else if ((iCnChar >= 52980) && (iCnChar <= 53640))
{
return "X";
}
else if ((iCnChar >= 53689) && (iCnChar <= 54480))
{
return "Y";
}
else if ((iCnChar >= 54481) && (iCnChar <= 55289))
{
return "Z";
}
else
return ("?");
}
第一个问题: 设计一个用户表保存用户基本信息。包括得分。 这个可以用数据库比较理想。
第二个问题:设计一个汉字字库保存预设定汉字即拼音,建议用数据库的方式。
第三个问题:需要GDI+相关知识,设计26个字母表读取保存,备用。
第四个问题:需要GDI+相关知识,设计一个区域保存字母表顺序(即对应正确拼音顺序)。拖动即判断鼠标对应字母表图片位置。(比较麻烦)
第五个问题:由于前面第一个问题使用的是数据库,这里直接统计一下即可。
26个字母+4个音调图形集合
public List<Bitmap> bitmapArray = new List<Bitmap>();
public Bitmap InitializationChar(string letter)
{
Bitmap bmp = new Bitmap(50, 50);
Graphics g = Graphics.FromImage(bmp);
g.FillRectangle(Brushes.Green, new Rectangle(0, 0, 45, 45));
g.DrawString(letter, new Font("Arial", 30, FontStyle.Bold), Brushes.White, new Point(0, -2));
return bmp;
}
public void StartBitmapList()
{
string letterTable = "abcdefghijklmnopqrstuvwxyzˉˊˇˋ";
for (int a = 0; a < letterTable.Length; a++)
{
bitmapArray.Add(InitializationChar(letterTable[a].ToString()));
id++;
}
}