二人对战游戏 结构体+函数

class 对战713
    {
        struct Player
        {
            public string Name;
            public int Blood;
            public int Attact;
            public int Defence;
            public int DuoBi;
            public ArrayList JiNeng;
            public ArrayList ShangHai;
        }
        static void Main (string[] args)
        {
            #region 定义技能库
            string[] JN;
            int[] SH;
            jineng(out JN, out SH);
            #endregion
            Console.WriteLine("请输入玩家1姓名:");
            string name1 = Console.ReadLine();

            Console.WriteLine("请输入玩家2姓名:");
            string name2 = Console.ReadLine();
            #region 造玩家,显示基本信息
            //造玩家
            Random sj = new Random();
            //造玩家
            Player P1 = wanjia(JN,SH,name1,sj);
            Player P2 = wanjia(JN,SH,name2,sj);
            #endregion
            //显示信息
            jbxx(ref P1, ref P2);
            Console.WriteLine("按下回车键开始战斗");
            ConsoleKeyInfo key = Console.ReadKey();
            if (key.Key.ToString().ToLower() == "enter")
            {
                while (true)
                {
                    #region 胜负条件
                    if (P1.Blood == 0 && P2.Blood == 0)
                    {
                        Console.ForegroundColor = ConsoleColor.Yellow;
                        Console.WriteLine("{0}与{1}同归于尽了~!",P1.Name,P2.Name);
                    break;
                    }
                    else if (P2.Blood == 0)
                    {
                        Console.ForegroundColor = ConsoleColor.Yellow;
                        Console.WriteLine("{0}把{1}KO了~!",P1.Name,P2.Name);
                        break;
                    }
                    else if (P1.Blood == 0)
                    {
                        Console.ForegroundColor = ConsoleColor.Yellow;
                        Console.WriteLine("{0}把{1}KO了~!", P2.Name, P1.Name);
                        break;
                    }
                    #endregion
                    //P1打P2
                    dajia(sj, ref P1, ref P2);
                    //P2打P1
                    dajia(sj,ref P2,ref P1);
                    // 显示剩余血量
                    xueliang(ref P1, ref P2);

                    Console.WriteLine();
                    Thread.Sleep(2000);
                }
            }
        }

        private static void jbxx(ref Player P1, ref Player P2)
        {
            Console.WriteLine("姓名:{0}\t血量:{1}\t攻击力:{2}\t防御:{3}\t躲避:{4}\t所学技能:{5}、{6}、{7}", P1.Name, P1.Blood, P1.Attact, P1.Defence, P1.DuoBi, P1.JiNeng[0], P1.JiNeng[1], P1.JiNeng[2]);
            Console.WriteLine("姓名:{0}\t血量:{1}\t攻击力:{2}\t防御:{3}\t躲避:{4}\t所学技能:{5}、{6}、{7}", P2.Name, P2.Blood, P2.Attact, P2.Defence, P2.DuoBi, P2.JiNeng[0], P2.JiNeng[1], P2.JiNeng[2]);
        }

        private static void xueliang(ref Player P1, ref Player P2)
        {
            Console.ForegroundColor = ConsoleColor.Yellow;
            Console.WriteLine("{0}的剩余血量为:{1}\t{2}的剩余血量为:{3}", P1.Name, P1.Blood, P2.Name, P2.Blood);
        }

        private static void dajia(Random sj, ref Player P1, ref Player P2)
        {
            if (sj.Next(10) >= 8)//使用技能
            {
                Console.ForegroundColor = ConsoleColor.White;
                int xx = sj.Next(3);
                Console.WriteLine("{0}使用了{1}技能,对{2}造成了{3}点伤害!", P1.Name, P1.JiNeng[xx], P2.Name, P1.ShangHai[xx]);
                P2.Blood -= Convert.ToInt32(P1.ShangHai[xx]);
                if (P2.Blood <= 0)
                {
                    P2.Blood = 0;
                }
            }
            else  //普通攻击
            {
                //P2躲避攻击
                if (P2.DuoBi >= sj.Next(11))
                {
                    Console.ForegroundColor = ConsoleColor.Green;
                    Console.WriteLine("{0}躲避了{1}的攻击~!", P2.Name, P1.Name);
                }
                else//p2未躲避
                {
                    Console.ForegroundColor = ConsoleColor.Red;
                    int ptsh1 = P1.Attact + sj.Next(50) - P2.Defence - sj.Next(30);//p1造成的伤害
                    Console.WriteLine("{0}对{1}进行攻击,造成{2}点伤害", P1.Name, P2.Name, ptsh1);
                    P2.Blood -= ptsh1;
                    if (P2.Blood <= 0)
                    {
                        P2.Blood = 0;
                    }
                }
            }
        }

        private static Player wanjia(string[] JN, int[] SH, string name1, Random sj)
        {
            Player P1 = new Player();
            int seed1;
            if (name1.Length == 2)
            {
                seed1 = (int)Convert.ToChar(name1.Substring(0, 1)) + (int)Convert.ToChar(name1.Substring(1, 1));
            }
            else
            {
                seed1 = (int)Convert.ToChar(name1.Substring(0, 1)) + (int)Convert.ToChar(name1.Substring(1, 1)) + (int)Convert.ToChar(name1.Substring(2, 1));
            }
            Random r1 = new Random(seed1);
            P1.Name = name1;
            P1.Blood = 2000 + r1.Next(1200);
            P1.Attact = 200 + r1.Next(50);
            P1.Defence = 100 + r1.Next(30);
            P1.DuoBi = 1 + r1.Next(3);
            P1.JiNeng = new ArrayList();
            P1.ShangHai = new ArrayList();

            for (int i = 0; i < 3; i++)
            {
                int x = sj.Next(10);
                if (!P1.JiNeng.Contains(JN[x]))
                {
                    P1.JiNeng.Add(JN[x]);
                    P1.ShangHai.Add(SH[x]);
                }
                else
                {
                    i--;
                }
            }
            return P1;
        }

        private static void jineng(out string[] JN, out int[] SH)
        {
            JN = new string[] {
            "龙腾",
            "横扫千军",
            "后发制人",
            "双龙戏珠",
            "紧箍咒",
            "五雷轰顶",
            "猛击",
            "鹰击",
            "魅惑",
            "阎罗令"
            };
            SH = new int[] {
            400,
            480,
            350,
            420,
            290,
            460,
            330,
            500,
            380,
            399
            };
        }
    }
}
时间: 2024-10-12 15:36:08

二人对战游戏 结构体+函数的相关文章

多人对战游戏观察者模式分析

一.观察者模式 观察者模式是使用频率最高的设计模式之一,它用于建立一种对象与对象之间的依赖关系,一个对象发生改变时将自动通知其他对象,其他对象将相应作出反应.在观察者模式中,发生改变的对象称为观察目标,而被通知的对象称为观察者,一个观察目标可以对应多个观察者,而且这些观察者之间可以没有任何相互联系,可以根据需要增加和删除观察者,使得系统更易于扩展. 观察者模式定义如下: 观察者模式(Observer Pattern):定义对象之间的一种一对多依赖关系,使得每当一个对象状态发生改变时,其相关依赖对

结构体函数作用及示例

一.作用 1. 提高代码阅读性 2. 分类管理函数及部分属性 3. 偏向于c++的面向对象思维 二.使用方法: 1. 声明结构体函数 2. 初始化结构体函数 3. 调用结构体函数 三.示例 #include<stdio.h> #include<stdlib.h> /*structure declare*/ struct str_func{ int a; int b; int (*add)(int a, int b); int (*sub)(int a, int b); int (*

结构体和类的唯一区别就是类函数没有加说明是私有而结构体函数是公有

结构体和类的唯一区别就是              类函数没有加说明是私有                   而   结构体函数是公有

代码案例(结构体,函数指针,指针函数,冒泡排序) 修改

#import <Foundation/Foundation.h> typedef struct {     char name[20];     int age;     float score; }Stu; //建立字符串和函数之间的一一对应关系. typedef BOOL (*PStu) (Stu stu1,Stu stu2) ; typedef struct nameFunctionPair{     char name[20]; //存储函数对应的字符串     PStu funct

代码案例(结构体,函数指针,指针函数,冒泡排序)

typedef struct {     char name[20];     int age;     float score; }Stu; #import <Foundation/Foundation.h> //姓名升序 void sortByName(Stu *p , int count ) {     for (int i = 0 ; i < count -1; i ++) {         for (int j= 0 ; j < count -1-i; j ++) {

shell的编程结构体(函数、条件结构、循环结构)

1.1 shell函数 在shell中,函数可以被当作命令一样执行,它是命令的组合结构体.可以将函数看成是一个普通命令或者一个小型脚本. 首先给出几个关于函数的结论: (1).当在bash中直接调用函数时,如果函数名和命令名相同,则优先执行函数,除非使用command命令.例如:定义了一个名为rm的函数,在bash中输入rm执行时,执行的是rm函数,而非/bin/rm命令,除非使用"command rm ARGS". (2).如果函数名和命令别名同名,则优先执行别名.也就是说,在优先级

2014.8.29结构体.函数

(一)结构体 然后在main函数里就可以定义: 1 static void Main(string[] args) 2 { 3 Student stu = new Student(); 4 stu.name = "张三"; 5 stu.NO = 20140813; 6 stu.age = 24; 7 8 Console.WriteLine("我叫{0},今年{1}岁,我的学号是{2}",stu.name,stu.age,stu.NO); 9 Console.Read

关于 结构体 函数的应用

前几天学习了函数然后紧接着学了结构体.虽然没有什么新的算法,但是是对以前内容的重新运用,更重要的是,这两个知识点,可以让程序更加简洁而且可以有效地减轻工作量.于是乎,做了一个信息统计的程序(主要实现的功能是,可以增加任何项目包括考核项目等等,并且可以进行排序操作). 小感想 :现定义结构体确定需要的数据类型.然后在主函数中定义数组,确定整个程序的模块(输入,计算 ,排序,输出等)最后完成函数构造: 示例:: struct chengji//结构体 { public string xingmin;

【C/C++学院】0814-引用高级、引用高级增加/auto自动变量自动根据类型创建数据/Bool/Enum/newdelete全局/大数据乘法与结构体/函数模板与auto/宽字符本地化/inline

引用高级.引用高级增加 #include<iostream> #include<stdlib.h> // int a[10] // int (&ra)[10] // int a[2][5] // int (&ra)[2][5] void main1() { int a[10] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 }; int(&ra)[10](a);//引用就是给原来的变量有一个别名同一个地址 int i = 0; for (