1.数据集合
一般是多个数据(变量)集合在一起构成的数据
2.自定义
一般可以自己取名字,可以自定义的数据(变量)
3.复杂数据(变量)类型特点
枚举:整形常量的集合,可以自定义
数组:任意变量类型顺序存储的数据
结构体:任意变量的数据集合,可以自定义
1.枚举是什么
枚举是一个被命名的整型常量的集合,它一般被用来表示 状态,类型等等
2.申明枚举和申明枚举变量
注意:申明枚举和申明枚举变量是两个概念
申明枚举:相当于是创建一个自定义的枚举类型
申明枚举变量:使用申明的自定义枚举类型创建一个枚举变量
3.申明枚举语法
枚举名以E或E_开头作为我们的命名规范
enum E_白定义枚举名
{
自定义枚举项名字,//枚举中包裹的 整型常量 默认值是0 下面的依次累加
自定义枚举项名字1,//1
自定义枚举项名字2,//2
}
enum E_白定义枚举名
{
自定义枚举项名字 = 5,//第一个 默认值是5 下面的依次累加
自定义枚举项名字1,//6
自定义枚举项名字2 = 100,//100
自定义枚举项名字3,//101
自定义枚举项名字4,//102
}
1.在namespace语句块声明 (常用的)
2.还可以声明在class语句块,struct语句块中
3.注意:不可以在函数语句块中声明
enum E_MonsterType
{
Normal,//默认0 不建议用中文取名
boss,//1
}
1.声明枚举变量
自定义的枚举类型 变量名 = 默认值(白定义的枚举类型.枚举项);
E_MonsterType monsterType1 = E_MonsterType.Normal;
E_MonsterType monsterType2 = E_MonsterType.boss;
if(monsterType1==E_MonsterType.Normal)
{
Console.WriteLine("Normal Monster");
}
else if(monsterType1 == E_MonsterType.boss)
{
Console.WriteLine("Boss Monster");
}
//枚举和switch天生一对
switch (monsterType2)
{
case E_MonsterType.Normal:
Console.WriteLine("Normal Monster");
break;
case E_MonsterType.boss:
Console.WriteLine("Boss Monster");
break;
default:
break;
}
1.枚举和int相互转换
//枚举和int相互转换
int i = (int)monsterType1;
Console.WriteLine(i);//打印结果: 0
//int 转枚举
monsterType1 = 0;
2.枚举和string相互转换
//枚举转string
string str = monsterType1.ToString();
Console.WriteLine(str);//打印结果为:Normal
//string转枚举
//Parse后第一个参数︰你要转为的是哪个枚举类型 第二个参数:用于转换的对应枚举项的字符串
//转换完毕后是一个通用的类型我们需要用括号强转成我们想要的目标枚举类型
monsterType1 = (E_MonsterType)Enum.Parse(typeof(E_MonsterType), "Boss");
Console.WriteLine(monsterType1);//打印结果为:Boss
在游戏开发中,对象很多时候会有许多的状态。
比如玩家有一个动作状态我们需要用一个变量或者标识来表示当前玩家处于的是哪种状态,综合考虑可能会使用int来表示他的状态
1: 行走 2:待机 3:跑步 4:跳跃...等等(代码不利于阅读)
但是用枚举可以帮助我们消晰的分清楚状态的含义
1.练习题一
定义QQ状态的枚举,并提示用户选择一个在线状态,我们接受输入的数字,并将其转换成枚举类型
定义QQ状态的枚举
//(///注释可以让鼠标指在代码上有一个提示说明)
///
/// QQ在线类型
///
enum E_QQType
{
OnLine,
Leave,
Busy,
Invisible,
}
提示用户选择一个在线状态,我们接受输入的数字,并将其转换成枚举类型
Console.WriteLine("请输入QQ的状态(0在线,1离开,2忙,3隐身)");
int type = int.Parse(Console.ReadLine());
E_QQType qqType = (E_QQType)type;
Console.WriteLine(qqType);
2.练习题二
用户去星巴克买咖啡,分为中杯(35元),大杯(40元),超大杯(43元)
请用户选择要购买的类型,用户选择后,打印:您购买了xxx咖啡,花费了xx元
例如:你购买了中杯咖啡,花费了35元
定义星巴克大中小杯的枚举
enum E_Cafe
{
///
/// 中杯
///
M,
///
/// 大杯
///
B,
///
/// 超大杯
///
S,
}
请用户选择要购买的类型,用户选择后,打印:您购买了xxx咖啡,花费了xx元
try
{
Console.WriteLine("咖啡类型:中杯(35元),大杯(40元),超大杯(45元)");
Console.WriteLine("请输入咖啡种类(中杯0,大杯1,超大杯2)");
int cafeType = int.Parse(Console.ReadLine());
E_Cafe cType = (E_Cafe)cafeType;
switch (cType)
{
case E_Cafe.M:
Console.WriteLine("你购买了中杯咖啡,花费了35元钱");
break;
case E_Cafe.B:
Console.WriteLine("你购买了大杯咖啡,花费了40元钱");
break;
case E_Cafe.S:
Console.WriteLine("你购买了超大杯咖啡,花费了45元钱");
break;
default:
Console.WriteLine("请输入正确的类型");
break;
}
}
catch (Exception)
{
Console.WriteLine("请输入数字");
}
3.练习题三
请用户选择英雄性别与英雄职业,最后打印英雄的基本属性(攻击力,防御力,技能)
性别::
男(攻击力+50,防御力+100)
女(攻击力 +150,防御力+20)
职业:
战士(攻击力 +20,防御力+100,技能:冲锋)
猎人(攻击力+120,防御力+ 30,技能:假死)
法师(攻击力 +200,防御力+10,技能:奥术冲击)
举例打印:你选择了“女性法师”,攻击力:350,防御力: 30,职业技能:奥术冲击
定义枚举类型
enum E_Sex
{
Man,
Woman,
}
enum E_Occupation
{
///
/// 战士
///
Warrior,
///
/// 猎人
///
Hunter,
///
/// 法师
///
Master,
}
用户选择英雄性别与英雄职业,最后打印英雄的基本属性(攻击力,防御力,技能)
try
{
Console.WriteLine("请选择性别(男0,女1)");
E_Sex sex = (E_Sex)int.Parse(Console.ReadLine());
string sexStr = "";
int atk = 0;
int def = 0;
switch (sex)
{
case E_Sex.Man:
sexStr = "男性";
atk += 50;
def += 100;
break;
case E_Sex.Woman:
sexStr = "女性";
atk += 150;
def += 20;
break;
}
Console.WriteLine("请输入职业(战士0,猎人1,法师2)");
E_Occupation oType = (E_Occupation)int.Parse(Console.ReadLine());
string skill = "";
string occupation = "";
switch (oType)
{
case E_Occupation.Warrior:
atk += 20;
def += 100;
skill = "冲锋";
occupation = "战士";
break;
case E_Occupation.Hunter:
atk += 120;
def += 30;
skill = "假死";
occupation = "猎人";
break;
case E_Occupation.Master:
atk += 200;
def += 10;
skill = "奥数冲击";
occupation = "法师";
break;
}
Console.WriteLine("你选择了\"{0}{1}\",攻击力:{2},防御力:{3},职业技能:{4}。", sexStr, occupation, atk, def, skill);
}
catch (Exception)
{
Console.WriteLine("请输入数字");
}