复杂数据类型
一般是多个数据(变量)集合在一起构成的数据
一般可以自己取名,可以自定义的数据(变量)
枚举:整型常量集合
数组:任意变量类型顺序存储的数据
结构体:任意变量的数据集合,可以自定义
一、枚举
1.枚举的基本概念
1.1枚举是什么
枚举是一个比较特别的存在
它是一个被命名的整形常量的集合
一般用它来表示 状态 类型 等等
1.2申明枚举和申明枚举变量
注意:申明枚举 和 申明枚举变量 是两个概念
申明枚举: 相当于是 创建一个自定义的枚举类型
申明枚举变量: 使用申明的自定义枚举类型 创建一个枚举变量
1.3申明枚举语法
// 枚举名 以E或者E_开头 作为我们的命名规范
//enum E_自定义枚举名
//{
// 自定义枚举项名字, //枚举中包裹的 整形常量 第一个默认值是0 下面会依次累加
// 自定义枚举项名字1,//1
// 自定义枚举项名字2,//2
//}
//enum E_自定义枚举名
//{
// 自定义枚举项名字 = 5, //第一个枚举项的默认值 变成5了
// 自定义枚举项名字1,// 6
// 自定义枚举项名字2 = 100,
// 自定义枚举项名字3,//101
// 自定义枚举项名字4,//102
//}
2.在哪声明枚举
1.namespace语句块中(常用)
2.class语句块中 struct语句块中
注意:枚举不能在函数语句块中声明!
enum E_MonsterType
{
Normal, //0
Boss, //1
}
enum E_PlayerType
{
MainPlayer,
OtherPlayer,
}
3.枚举的使用
//声明枚举变量,在函数中声明并使用
//自定义的枚举类型 变量名 = 默认值;(自定义的枚举类型.枚举项)
E_PlayerType playerType = E_PlayerType.MainPlayer;
if (playerType == E_PlayerType.MainPlayer)
{
Console.WriteLine("主玩家逻辑");
}else if (playerType == E_PlayerType.OtherPlayer)
{
Console.WriteLine("其他玩家逻辑");
}
//枚举和switch是天生一对
E_MonsterType monsterType = E_MonsterType.Boss;
switch (monsterType)
{
case E_MonsterType.Normal:
Console.WriteLine("普通怪物逻辑");
break;
case E_MonsterType.Boss:
Console.WriteLine("Boss逻辑");
break;
default:
break;
}
4.枚举的类型转换
4.1枚举和int互转
//枚举转int
int i = (int)playerType;
Console.WriteLine(i);
//int 转枚举
playerType = 0;
4.2枚举和string互转
//把枚举转成string
string str = playerType.ToString();
Console.WriteLine(str);
//把string转成枚举
//Parse后 第一个参数:要转的是哪个枚举类型 第二个参数:用于转换的对应枚举项的字符串
//转换完毕后 是一个通用的类型 需要用括号强转成我们想要的目标枚举类型
playerType = (E_PlayerType)Enum.Parse(typeof(E_PlayerType),"OtherPlayer");
Console.WriteLine(playerType);
5.枚举的作用
游戏开发中 对象很多时候 会有许多状态
比如玩家有一个动作状态 需要用一个
二、数组
1.一维数组
1.1基本概念
数组是存储一组相同类型数据的集合
数组分为 一维、多维、交错数组
一般情况 一维数组 就简称为 数组
1.2数组的声明
// 变量类型[] 数组名;//只是申明了一个数组 但是并没有开房
// 变量类型 可以是我们学过的 或者 没学过的所有变量类型
int[] arr1;
// 变量类型[] 数组名 = new 变量类型[数组的长度];
int[] arr2 = new int[5]; //这种方式 相当于开了5个房间 但是房间里面的int值 默认为0
// 变量类型[] 数组名 = new 变量类型[数组的长度]{内容1,内容2,内容3,.......};
int[] arr3 = new int[5] {
1, 2, 3, 4, 5 };
// 变量类型[] 数组名 = new 变量类型[]{内容1,内容2,内容3,.......};
int[] arr4 = new int[] {
1, 2, 3, 4, 5 }; //后面的内容就决定了 数组的长度 “房间数”
// 变量类型[] 数组名 = {内容1,内容2,内容3,.......};
int[] arr5 = {
1, 2, 3, 4, 5 };//后面的内容就决定了 数组的长度 “房间数”
bool[] arr6 = {
true, false };
1.3数组的使用
int[] array = {
1, 2, 3, 4, 5 };
//1.数组的长度
// 数组变量名.Length
Console.WriteLine(array.Length);
//2.获取数组中的元素
//数组中的下标和索引 他们是从0开始的
//通过 索引下标去 获得数组中某一个元素的值时
//一定注意!!!!!!!!
//不能越界 数组的房间号 范围 是 0 ~ Length-1
Console.WriteLine(array[0]);
Console.WriteLine(array[2]);
Console.WriteLine(array[4]);
//3.修改数组中的元素
array[0] = 99;
Console.WriteLine(array[0]);
//4.遍历数组 通过循环 快速获取数组中的每一个元素
Console.WriteLine("**********************");
for (int i = 0; i < array.Length; i++)
{
Console.WriteLine(array[i]);
}
Console.WriteLine("**********************");
//5.增加数组的元素
// 数组初始化以后 是不能够 直接添加新的元素的
int[] array2 = new int[6];
//搬家
for (int i = 0; i < array.Length; i++)
{
array2[i] = array[i];
}
array = array2;
for (int i = 0; i < array.Length; i++)
{
Console.WriteLine(array[i]);
}
array[5] = 66;
Console.WriteLine("**********************");
//6.删除数组的元素
// 数组初始化以后 是不能够 直接删除元素的
// 搬家的原理
int[] array3 = new int[5];
//搬家
for (int i = 0; i < array3.Length; i++)
{
array3[i] = array[i];
}
array = array3;
Console.WriteLine(array.Length);
//7.查找数组中的元素
// 99 2 3 4 5
// 要查找 3这个元素在哪个位置
// 只有通过遍历才能确定 数组中 是否存储了一个目标元素
int a = 3;
for (int i = 0; i < array.Length; i++)
{
if (a == array[i])
{
Console.WriteLine("和a相等的元素在{0}索引位置", i);
break;
}
}
1.4总结
1.概念:同一变量类型的数据集合
2.一定要掌握的知识:申明,遍历,增删查改
3.所有的变量类型都可以申明为 数组
4.她是用来批量存储游戏中的同一类型对象的 容器 比如 所有的怪物 所有玩家
2.二维数组
2.1 基本概念
二维数组是使用两个下标(索引)来确定元素的数组
两个下标可以理解成 行标 和 列标
比如矩阵
1 2 3
4 5 6
可以用二维数组 int[2,3]表示
好比 两行 三列的数据集合
2.2 二维数组的声明
//变量类型[,] 二维数组变量名;