枚举,结构体和数组
除了简单的变量类型之外,C#还提供了3个复杂的变量:枚举,结构体和数组。
枚举
枚举类型的定义
enum <typeName>{
<value1>,
<value2>,
<value3>,
...
<valueN>
}
枚举类型的声明
<typeName> <varName>;
枚举类型的赋值
<varName>=<typeName>.<value>;
为什么使用枚举类型
在游戏中我们可以定义一个int类型来存储状态 0 游戏暂停 1游戏失败 2游戏胜利 3开始菜单,但是这样不容易阅读,而且容易出错。 这个时候我们通过枚举类型来解决
enum GameState{
Pause,
Failed,
Success,
Start
}
在游戏中定义一个
GameState state = GameState.Start;
枚举类型中的每一个值,其实都是一个整数,默认为int类型
默认情况下枚举类型中的值从0开始,我们可以直接在枚举类型定义的时候 使用=运算符给每一个枚举指定一个特定的值
结构体
如果我们要表示一个向量的话 需要定义,三个float类型 x y z
这样比较麻烦,不方便管理,我们可以使用结构
定义结构
struct <typeName>{
<memberDeclarations>
}
//其中<memberDeclarations>是结构体的成员,每个成员的声明如下<type> <name>;
struct Vector3{
float x;
float y;
float z;
}
表示一个游戏物体(主角或者敌人)的坐标,需要三个小数
定义一个表示路径的结构,路径有一个方向和距离组成,假定方向只能是东西南北
结构体的定义,赋值和使用
struct Student {
public string name;
public int age;
public int gread;
//结构体的构造函数
public Student(string name, int age, int gread) {
this.name = name;
this.age = age;
this.gread = gread;
}
}
public static void Main (string[] args)
{
//定义一个结构体类型变量,并用构造函数初始化
Student myStudent = new Student("zhangfan",35,2);
Console.WriteLine ("name: {0}, age: {1}, gread: {2}",myStudent.name,myStudent.age,myStudent.gread);
//重新赋值结构体内个别参数
myStudent.name = "xiaomao";
Console.WriteLine (myStudent.name);
}
数组
前面所有的类型都有一个共同点:他们都存储一个值(结构存储一组值),这样会带来不方便,假如我们要存储几个类型相同的值。
案例:我们要存储玩游戏10次的得分:
int score1 = 34;
int score2 = 34;
int score3 = 56;
...
int score10=3434;
另外一种方式是使用数组,数组的声明
<baseType>[] <name>;
数组是一个变量的索引列表,这个索引是一个整数,第一个条目的索引是0,第二个是1,以此类推...
int[] scores; //声明了分数的数组(int类型的数组)
数组的初始化
int[] scores;
//第一种方式
scores ={34,34,3,43,43,4,34};
//第二种方式
scores = new int[10]; 里面的每一个元素按照类型的默认值赋值
//第三种方式
scores = new int[10]{123,12,34,56,77,89,85,6,45634,34};
数组的访问
<arrayName>[条目索引]
数组的遍历
遍历数组中的每一个元素并输出
第一种方式for
for(int i =0;i<array.Length;i++){
}
第二种方式while循环
int i=0;
while(i<array.Length){
//use array[i]
i++;
}
第三种方式foreach
foreach(int temp in array){
}