结构体枚举类型及其练习题,最后的对战游戏(基础版)

Posted 露西&哈特菲利亚

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了结构体枚举类型及其练习题,最后的对战游戏(基础版)相关的知识,希望对你有一定的参考价值。

结构体:
在内存中临时存储数据的方式
1、变量、常量
2、数组,可以存储固定长度统一类型的数据
3、集合
4、结构体

学生信息:姓名,性别,年龄,系别

结构体含义:就是将生活中的一些个体,封装成一个特殊的类型

结构体是:用户自定义数据类型

创建:
创建的位置:main函数之外
struct Student
{
public int Code;
public string Name;
public string Sex;
public int Old;
public DateTime Birthday;
}

定义:声明
Student s = new Student(); //实例化

赋值:
s.Code = 1;
s.Name = "张三";
s.Sex = "男";
s.Old = 18;
s.Birthday = Convert.ToDateTime("1999-1-1");

取值:
s.Code //放在等号左边就是给它赋值,放在右边就是使用它的值

应用:

练习题:
请输入学生个数:n
请输入第1个学生的姓名:
请输入第1个学生的性别:
请输入第1个学生的年龄:
请输入第1个学生的成绩:
...
n
****************************
学生的总成绩为:xxx,平均分为:xxx。
****************************
年龄排名(由大到小):
姓名:xxx,性别:xxx,年龄:xxx,成绩:xxx。
...
n
****************************
成绩排名(由高到低):
姓名:xxx,性别:xxx,年龄:xxx,成绩:xxx。
...
n
--------------------------------------------------------------------------

        struct Student//新建类型
        {
            public string Name;
            public string Sex;
            public int Old;
            public decimal score;
        }
        static void Main(string[] args)
        {
            Console.Write("请输入学生的个数:");
            int gs = Convert.ToInt32(Console.ReadLine());

            ArrayList arr = new ArrayList();//新的集合
            decimal end = 0m;
            for (int i = 0; i < gs; i++)
            {
                Student s = new Student();
                while (true)//判断姓名输入是否为空
                {
                    Console.Write("请输入第" + (i + 1) + "个学生的姓名:");
                    s.Name = Console.ReadLine();
                    if (s.Name == "" || s.Name == "  ")
                    {
                        Console.WriteLine("输入有误!");
                    }
                    else
                    {
                        break;
                    }
                }
                while (true)//判断姓名输入是否为空
                {
                    Console.Write("请输入第" + (i + 1) + "个学生的性别:");
                    s.Sex = Console.ReadLine();
                    if (s.Sex == "" || s.Sex == "")
                    {

                        break;
                    }
                    else
                    {
                        Console.WriteLine("输入有误!");
                    }
                }
                while (true)
                {
                    Console.Write("请输入第" + (i + 1) + "个学生的年龄:");
                    try
                    {
                        s.Old = Convert.ToInt32(Console.ReadLine());
                        break;
                    }
                    catch
                    {
                        Console.WriteLine("输入有误!");
                        Console.Write("请输入第" + (i + 1) + "个学生的年龄:");
                    }
                }
                while (true)
                {
                    Console.Write("请输入第" + (i + 1) + "个学生的成绩:");
                    try
                    {
                        s.score = Convert.ToDecimal(Console.ReadLine());
                        break;
                    }
                    catch
                    {
                        Console.WriteLine("输入有误!");
                        Console.Write("请输入第" + (i + 1) + "个学生的成绩:");
                    }
                }
                end += s.score;
                arr.Add(s);                
            }

            Console.WriteLine("********************************");
            Console.WriteLine("总分是:" + end + ",平均分是:" + (end / gs));
            Console.WriteLine("********************************");
            //按年龄大小排序
            for (int i = 0; i < arr.Count; i++)
            {
                for (int j = i + 1; j < arr.Count; j++)
                {
                    Student s = (Student)arr[i];
                    Student ss = (Student)arr[j];
                    if (s.Old < ss.Old)
                    {
                        Object zhong = arr[i];
                        arr[i] = arr[j];
                        arr[j] = zhong;
                    }
                }                        
            }
            foreach (Student stu in arr)
            { 
            Console.WriteLine("学生的姓名是:"+stu.Name+",性别是:"+stu.Sex+",年龄是:"+stu.Old+",成绩是:"+stu.score+"");           
            }
            Console.WriteLine("********************************");
                //按成绩大小排序

            for (int k = 0; k < arr.Count; k++)
            {
                for (int l = k + 1; l < arr.Count; l++)
                {
                    Student s = (Student)arr[k];
                    Student ss = (Student)arr[l];
                    if (s.score < ss.score)
                    {
                        Object zhong = arr[k];
                        arr[k] = arr[l];
                        arr[l] = zhong;
                    }
                }
            }
            foreach (Student stu in arr)
            {
                Console.WriteLine("学生的姓名是:" + stu.Name + ",性别是:" + stu.Sex + ",年龄是:" + stu.Old + ",成绩是:" + stu.score + "");
            }


                Console.ReadKey();
        }


枚举:
学生:姓名,性别,年龄,成绩,系别

性别:男, 男士, man , 爷们

星期几: 周一,星期一,一

枚举的作用:统一,规范化的开发,个人用处不大,一般是团队开发时常用。

枚举也是一种用户自定义类型;

创建赋值: enum
public enum Sex
{
男,

}

取值:
Sex.值

对战游戏(无招式与武器、装备版)

        struct warrior
        {
            public string name;//名字
            public int blood;  //血量
            public int attack; //攻击
            public int defense;//防御     
        }

        static void Main(string[] args)
        {
            //创建两个战士
            warrior zs1 = new warrior();
            warrior zs2 = new warrior();

            //为战士命名
            Console.Write("请输入战士一的昵称:");
            zs1.name = Console.ReadLine();
            Console.Write("请输入战士二的昵称:");
            zs2.name = Console.ReadLine();

            Random r = new Random();//游戏必须要用

            //随机生成战士的血量
            zs1.blood = r.Next(500, 1000);
            zs2.blood = r.Next(500, 1000);

            //随机生成战士攻击力,并使其攻击力上下浮动
            zs1.attack = r.Next(50, 100);
            zs2.attack = r.Next(50, 100);

            //随机生成战士防御力,并使其上下浮动
            zs1.defense = r.Next(0, 20);
            zs2.defense = r.Next(0, 20);

            Console.WriteLine(zs1.name + ",血量:" + zs1.blood + ",攻击:" + zs1.attack + ",防御:" + zs1.defense);
            Console.WriteLine(zs2.name + ",血量:" + zs2.blood + ",攻击:" + zs2.attack + ",防御:" + zs2.defense);


            Console.WriteLine("********************按空格键开始********************");
            Console.ReadKey();
            while (true)
            {
                //判断胜负
                if (zs1.blood <= 0)
                {
                    Console.WriteLine(zs2.name + "胜利了!");
                    break;
                }
                else if (zs2.blood <= 0)
                {
                    Console.WriteLine(zs1.name + "胜利了!");
                    break;
                }
                else if (zs1.blood <= 0 && zs2.blood <= 0)
                {
                    Console.WriteLine("同归于尽了!");
                    break;
                }

                Thread.Sleep(1500);//停顿一下在开始
                //战士一攻击
                int zs1gj = r.Next(zs1.attack - 10, zs1.attack + 30);//战士一的攻击力浮动范围 
                int zs2fy = r.Next(zs2.defense - 5, zs2.defense + 15);//战士二的防御力浮动范围
                int zs1end = zs1gj - zs2fy;//战士一攻击后对战士二造成的伤害值
                zs2.blood = zs2.blood - zs1end;//战士二受到攻击后的血余量

                Console.WriteLine(zs1.name + "" + zs2.name + " 发动了攻击,造成" + zs1end + "点伤害! " + zs2.name + "的血量还剩" + zs2.blood);
                Console.WriteLine();

                Thread.Sleep(1500);
                //战士二攻击
                if (zs1.blood <= 0)
                {
                    Console.WriteLine(zs2.name + "胜利了!");
                    break;
                }
                else if (zs2.blood <= 0)
                {
                    Console.WriteLine(zs1.name + "胜利了!");
                    break;
                }
                else if (zs1.blood <= 0 && zs2.blood <= 0)
                {
                    Console.WriteLine("同归于尽了!");
                    break;
                }

                int zs2gj = r.Next(zs2.attack - 10, zs2.attack + 30);//战士二的攻击力浮动范围
                int zs1fy = r.Next(zs1.defense - 5, zs1.defense + 15);//战士一的防御力浮动范围
                int zs2end = zs2gj - zs1fy;//战士二攻击后对战士一造成的伤害值
                zs1.blood = zs1.blood - zs2end;//战士一受到攻击后的血余量

                Console.WriteLine(zs2.name + "" + zs1.name + " 发动了攻击,造成" + zs2end + "点伤害! " + zs1.name + "的血量还剩" + zs1.blood);
                Console.WriteLine();
            }
            Console.ReadLine();
        }

 

以上是关于结构体枚举类型及其练习题,最后的对战游戏(基础版)的主要内容,如果未能解决你的问题,请参考以下文章

Delphi版俄罗斯方块-前奏

C# 常量 结构体 委托

C语言结构体及其内存对齐枚举联合的介绍

《C#零基础入门之百识百例》(六十三)结构体类型数组 -- 学生数据存储

《C#零基础入门之百识百例》(六十二)结构体类型变量 -- 学生数据记录

C语言自定义数据类型中的结构体,枚举,联合详解