C#第七课文字游戏2.0版本

using System;
using System.Threading;
namespace @new
{
    
    class Program
    {
        /*常量初始化*/
        #region 
        //昵称
        static string name = "";
        //生命
        static int hp;
        //当前生命
        static int c_hp;
        //成长生命
        static int g_hp;
        //攻击力
        static int atk;
        //成长攻击力
        static int g_atk;
        //防御
        static int def;
        //成长防御
        static int g_def;
        //速度
        static int speed;
        //成长速度
        static int g_speed;
        //等级 
        static int level = 1;
        //当前经验
        static int exp = 0;
        //升级所需经验
        static int g_exp = 1000;
        //金钱
        static int money = 100;
        //查看面板
        #endregion 

        //武器 衣服 鞋子
        static Equip wuqi;
        static int wuqi_atk;
        static Equip yifu;
        static int yifu_hp;
        static Equip xiezi;
        static int xiezi_speed;

        //装备中转站
        static string q1 = null;
        static string q2 = null;
        static string q3 = null;

        //装备道具
        enum EquipType
        {
            wuqi,
            yifu,
            xiezi
        }
        struct Equip
        {
            public EquipType type;
            public string name;
            public string des;
            public int hp;
            public int atk;
            public int speed;

            public Equip(EquipType type, string name, string des, int hp, int atk, int speed)
            {
                this.type = type;
                this.name = name;
                this.des = des;
                this.hp = hp;
                this.atk = atk;
                this.speed = speed;
            }
        }
        static void EquipItem(Equip a)
        {
            switch (a.type)
            {
                case EquipType.wuqi:
                    Log("你装备了武器:" + a.name + " 它" + a.des + " 攻击力+" + a.atk);
                    //装备穿戴
                    wuqi_atk = a.atk;
                    //装备中转站内装备放入背包数组
                    BeiBao(q1);
                    //新的装备再次放入装备中转站
                    q1 = a.name;
                    wuqi = a;
                    break;
                case EquipType.yifu:
                    Log("你装备了衣服:" + a.name + " 它" + a.des + " 生命+" + a.hp);
                    yifu_hp = a.hp;
                    BeiBao(q2);
                    q2 = a.name;
                    yifu = a;
                    break;
                case EquipType.xiezi:
                    Log("你装备了鞋子:" + a.name + " 它" + a.des + " 速度+" + a.speed);
                    xiezi_speed = a.speed;
                    BeiBao(q3);
                    q3 = a.name;
                    xiezi = a;
                    break;
            }
        }

        //背包
        static string[] a = new string[20];
        static void BeiBao(string str)
        {

            for (int n = 0; n < 10; n++)
            {
                if (a[n] == null)
                {
                    a[n] = str;
                    break;
                }
            }
            Console.WriteLine("当前你的背包里有:");
            for (int m = 0; m <= 9; m++)
            {
                if (a[m] == null)
                {
                    break;
                }
                Console.Write(a[m] + " ");
            }
            Console.WriteLine();

        }

        //面板提示
        static void ShowInfo()
        {
            Console.WriteLine("你现在状态:生命为:{0}/{1}+{2},攻击力为:{3}+{4},防御为:{5},速度为:{6}+{7},金钱为:{8},等级为:{9},经验为:{10}/{11}", c_hp, hp, yifu.hp, atk, wuqi.atk, def, speed, xiezi_speed, money, level, exp, g_exp);
            Log("武器:" + wuqi.name + " 衣服:" + yifu.name + " 鞋子:" + xiezi.name);
            Thread.Sleep(1000);
            BeiBao(null);

        }

        //延迟输出函数
        static void Log(string text)
        {
            Console.WriteLine(text);
            Thread.Sleep(1000);
        }

        //战前准备以及战斗过程
        static void Battle(string e_name, int e_hp, int e_atk, int e_speed, int e_satk, int e_miss, int e_money, int e_exp)
        {
            Log("你遇到了" + e_name + "!是否在战斗前消耗10银两回满生命?");
            ShowInfo();
            Console.WriteLine(e_name + "现在的状态:生命为:{0},攻击力为:{1},速度为:{2},暴击为:{3},闪避为:{4},金钱为:{5},经验为:{6}", e_hp, e_atk, e_speed, e_satk, e_miss, e_money, e_exp);
            Thread.Sleep(1000);
            Log("1,回满 2,跳过");
            string str = Console.ReadLine();
            if (str == "1" && money >= 10)
            {
                c_hp = hp+yifu_hp ;
                money -= 10;
                Log("血量已回满!");
                ShowInfo();
            }
            //判断先手
            bool playerAtk = speed + xiezi_speed > e_speed;
            while (true)
            {
                //如果是玩家攻击
                if (playerAtk)
                {
                    //下一次攻击轮到敌人
                    playerAtk = false;
                    //判定闪避
                    if (new Random().Next(0, 100) < e_miss)
                    {
                        Log("你向" + e_name + "砍出一刀,却被" + e_name + "轻松地躲了过去!");
                        continue;
                    }
                    //敌人掉血
                    int num = new Random().Next(atk + wuqi_atk - 5, atk + wuqi_atk + 5);
                    e_hp -= num;
                    Log("你向" + e_name + "砍出一刀," + e_name + "受到了" + num + "点伤害。");
                    //判定敌人死亡
                    if (e_hp <= 0)
                    {
                        Log("你击败了" + e_name + ",你获得了" + e_money + "金钱与" + e_exp + "经验!");
                        money += e_money;
                        exp += e_exp;
                        LevelUp();
                        ShowInfo();
                        break;
                    }
                }
                else
                {
                    //当前敌人攻击,下次玩家攻击
                    playerAtk = true;
                    if (new Random().Next(0, 100) < e_satk)
                    {
                        if(e_atk * 2 > def)
                        {
                            c_hp -= e_atk * 2 - def;
                            Log(e_name + "使出了斩无极,触发了暴击效果,对你造成了" + (e_atk * 2 - def) + "点伤害");
                        }
                        else
                        {
                            Log(e_name + "使出了斩无极,触发了暴击效果,对你造成了0点伤害");
                        }
                    }
                    else
                    {
                        if (e_atk > def)
                        {
                            c_hp -= e_atk - def;
                            Log(e_name + "使出了横扫,对你造成了" + (e_atk - def) + "点伤害");
                        }
                        else
                        {
                            Log(e_name + "使出了横扫,对你造成了0点伤害");
                        }
                    }
                    //如果玩家死亡
                    if (c_hp <= 0)
                    {
                        Log("你被残忍地杀害了。");
                        Log("胜败乃兵家常事,请重新来过");
                        //退出
                        Environment.Exit(0);
                    }

                }
            }
        }

        //判定升级
        static void LevelUp()
        {
            while (exp >= g_exp)
            {
                level++;
                hp += g_hp;
                c_hp = hp + yifu_hp;
                atk += g_atk;
                def += g_def;
                speed += g_speed;
                exp -= g_exp;
                g_exp = level * 1000;
            }
            
        }


        //角色创建
        static void CreateCharacter()
        {
            //提示
            Console.WriteLine("请输入你的角色名称:");
            //输入角色名称
            name = Console.ReadLine();
            //判断是否输入了名称
            if (string.IsNullOrEmpty(name))
            {
                //给与默认名称
                name = "李逍遥";
            }
            //血量随机100到120之间的数
            hp = new Random().Next(100, 120);
            //当前血量
            c_hp = hp;
            //成长血量
            g_hp = new Random().Next(100, 120);
            //攻击力
            atk = new Random().Next(10, 20);
            //成长攻击
            g_atk = new Random().Next(10, 20);
            //防御
            def = new Random().Next(5, 10);
            //成长防御
            g_def = new Random().Next(5, 10);
            //速度
            speed = new Random().Next(5, 10);
            //成长速度
            g_speed = new Random().Next(5, 10);
            Log("恭喜你,角色创建成功!");
            ShowInfo();
        }

        //角色评分
        static void PingFen()
        {
            int a = hp + atk + def + speed;
            int b = g_hp + g_atk + g_def + g_speed;
            int c = a + b;
            //120-160之间:120-130;130-150;150-160。
            if (a <= 130)
            {
                Log("你的角色初始属性很差。");
            }
            else if (a <= 150)
            {
                Log("你的角色初始属性一般。");
            }
            else
            {
                Log("你的角色初始属性很好。");
            }
            if (b <= 130)
            {
                Log("你的角色天赋很差。");
            }
            else if (b <= 150)
            {
                Log("你的角色天赋一般。");
            }
            else
            {
                Log("你的角色天赋很好。");
            }
            if (c <= 260)
            {
                Log("综合来看,系统这边建议你转生重开呢!");
            }
            else if (b <= 300)
            {
                Log("综合来看,系统这边建议你可以开始正常游玩了。");
            }
            else
            {
                Log("综合来看,系统这边对你佩服的五体投地!");
            }
        }

        //怪物随机
        enum EnemyType
        {
            小木马,
            大木马,
            键盘侠,
            圣母,
            鲤鱼精,
            猫妖,
            大魔法师,
            魔神
        }   
        struct Enemy
        {
            public EnemyType type;

            public Enemy(EnemyType type)
            {
                this.type = type;
            }
        }
        static void EnemyFight(Enemy a)
        {
            for (int i = 0; i < 3; i++)
            {
                Console.WriteLine("按一下回车键开始移动");
                Console.ReadKey();
                if (new Random().Next(0, 5) > 3)
                {
                    switch (a.type)
                    {
                        case EnemyType.小木马:
                            Battle("小木马", 20, 20, 1, 5, 5, 20, 500);
                            break;
                        case EnemyType.大木马:
                            Battle("大木马", 40, 30, 1, 10, 10, 20, 1000);
                            break;
                        case EnemyType.键盘侠:
                            Battle("键盘侠", 80, 40, 5, 10, 10, 20, 1000);
                            break;
                        case EnemyType.圣母:
                            Battle("圣母", 100, 50, 10, 15, 15, 20, 1500);
                            break;
                        case EnemyType.鲤鱼精:
                            Battle("鲤鱼精", 200, 60, 15, 15, 15, 20, 2000);
                            break;
                        case EnemyType.猫妖:
                            Battle("猫妖", 300, 70, 5, 20, 15, 20, 2500);
                            break;
                        case EnemyType.大魔法师:
                            Battle("大魔法师", 1000, 80, 25, 20, 25, 100, 5000);
                            break;
                        case EnemyType.魔神:
                            Battle("魔神", 1500, 90, 30, 30, 30, 200, 10000);
                            break;
                    }                       
                }                 
            }
        }

        /*开始冒险历程*/

        //NPC1对话选择
        static void NPC1(string text1,string text2)
        {
            Log("你的左边有一名" + text1 + ",右边有一名" + text2 + ",你要选择和谁对话?");
            Log("1." + text1 + " 2." + text2 + " 3.跳过");
            string str = Console.ReadLine();
            if (str == "1")
            {
                Log("初级任务:给予" + text1 + " 20两银子,换取100点生命上限提升。");
                Log("1,换 2,跳过");
                str = Console.ReadLine();
                if (str == "1" && money >= 20)
                {
                    hp += 100;
                    c_hp += 100;
                    money -= 20;
                    Log("兑换成功!");
                    ShowInfo();
                }
            }
            else if (str == "2")
            {
                Log("初级任务:给予" + text2 + " 50两银子,换取武器青龙偃月刀");
                Log("1,换 2,跳过");
                str = Console.ReadLine();
                if (str == "1" && money >= 50)
                {
                    money -= 50;
                    EquipItem(new Equip(EquipType.wuqi, "青龙偃月刀", "锋利无比", 0, 20, 0));
                    Log("兑换成功!");
                    ShowInfo();
                }
            }
            Log("你离开了NPC。");
        }

        //NPC2对话选择
        static void NPC2(string text1, string text2)
        {
            Log("你的左边有一名" + text1 + ",右边有一名" + text2 + ",你要选择和谁对话?");
            Log("1." + text1 + " 2." + text2 + " 3.跳过");
            string str = Console.ReadLine();
            if (str == "1")
            {
                Log("初级任务:给予" + text1 + " 20两银子,换取衣服黄金圣衣。");
                Log("1,换 2,跳过");
                str = Console.ReadLine();
                if (str == "1" && money >= 20)
                {
                    money -= 20;
                    EquipItem(new Equip(EquipType.yifu, "黄金圣衣", "坚固无比", 300, 0, 0));
                    Log("兑换成功!");
                    ShowInfo();
                }
            }
            else if (str == "2")
            {
                Log("初级任务:给予" + text2 + " 20两银子,换取鞋子清欢鞋。");
                Log("1,换 2,跳过");
                str = Console.ReadLine();
                if (str == "1" && money >= 20)
                {
                    money -= 20;
                    EquipItem(new Equip(EquipType.xiezi, "清欢鞋", "快如闪电", 0, 0, 5));
                    Log("兑换成功!");
                    ShowInfo();
                }
            }
            Log("你离开了NPC。");
        }

        //NPC3对话选择
        static void NPC3()
        {
            Log("你遇到了一个神秘人,50两银子可以换取100生命上限的提升。");
            while(true)
            {
                Log("1,兑换一次 2,放弃");
                string str = Console.ReadLine();
                if (str == "1" && money >= 50)
                {
                    money -= 50;
                    hp += 100;
                    c_hp += 100;
                    Log("兑换成功!");
                    ShowInfo();
                    Log("是否继续");
                }
                else
                {
                    break;
                }
            }
        }

        //NPC4对话选择
        static void NPC4()
        {
            Log("啊啦啊啦!这位小弟弟,要不要和大姐姐去迷雾森林里玩呀。");
            Log("伴随着一阵眩晕感,你昏了过去,刚醒来的你遇到了这位大姐姐,对于她的盛情邀请你打算怎么办?");
            Log("1,逃跑 2,接受她的邀请");
            string str = Console.ReadLine();
            if (str == "1")
            {
                Map();
            }
            else
            {
                Log("陌生女子觉得你是一个很轻浮的人,于是你被残忍地杀害了。");
                Environment.Exit(0);
            }
        }
        static void Map()
        {
            int x = 3, y = 1;//记录小人初始位置
            int[,] map = new int[10, 10]
            {
                {1,1,1,1,1,1,1,1,1,1},
                {1,0,0,0,0,1,0,0,0,1},
                {1,0,0,0,0,1,0,0,0,1},
                {1,4,2,0,0,1,0,0,0,1},
                {1,0,0,0,0,1,0,0,0,1},
                {1,0,0,0,0,0,0,0,0,1},
                {1,0,0,0,0,0,0,0,0,1},
                {1,1,1,1,1,0,0,0,0,1},
                {1,0,0,0,0,0,0,0,3,1},
                {1,1,1,1,1,1,1,1,1,1}
            };

            //打印初始图
            for (int i = 0; i < 10; i++)
            {
                for (int j = 0; j < 10; j++)
                {
                    if (map[i, j] == 0)
                    {
                        Console.Write("  ");
                    }
                    else if (map[i, j] == 1)
                    {
                        Console.Write("■");
                    }
                    else if (map[i, j] == 2)
                    {
                        Console.Write("□");
                    }
                    else if (map[i, j] == 3)
                    {
                        Console.Write("★");
                    }
                    else if (map[i, j] == 4)
                    {
                        Console.Write("♀");
                    }
                }
                Console.WriteLine();
            }
            while (true)
            {
                ConsoleKeyInfo s = Console.ReadKey();
                int t = map[x, y];
                if (s.Key.ToString() == "RightArrow")
                {
                    if (map[x, y + 1] == 0)
                    {
                        map[x, y] = map[x, y + 1];
                        map[x, y + 1] = t;
                        y++;
                    }
                    else if (map[x, y + 1] == 2 && map[x, y + 2] != 1)
                    {
                        int m = map[x, y + 1];
                        map[x, y + 1] = t;
                        map[x, y] = 0;
                        map[x, y + 2] = m;
                        y++;
                    }
                }
                else if (s.Key.ToString() == "LeftArrow")
                {
                    if (map[x, y - 1] == 0)
                    {
                        map[x, y] = map[x, y - 1];
                        map[x, y - 1] = t;
                        y--;
                    }
                    else if (map[x, y - 1] == 2 && map[x, y - 2] != 1)
                    {
                        int m = map[x, y - 1];
                        map[x, y - 1] = t;
                        map[x, y] = 0;
                        map[x, y - 2] = m;
                        y--;
                    }
                }
                else if (s.Key.ToString() == "UpArrow")
                {
                    if (map[x - 1, y] == 0)
                    {
                        map[x, y] = map[x - 1, y];
                        map[x - 1, y] = t;
                        x--;
                    }
                    else if (map[x - 1, y] == 2 && map[x - 2, y] != 1)
                    {
                        int m = map[x - 1, y];
                        map[x - 1, y] = t;
                        map[x, y] = 0;
                        map[x - 2, y] = m;
                        x--;
                    }
                }
                else if (s.Key.ToString() == "DownArrow")
                {
                    if (map[x + 1, y] == 0)
                    {
                        map[x, y] = map[x + 1, y];
                        map[x + 1, y] = t;
                        x++;
                    }
                    else if (map[x + 1, y] == 2 && map[x + 2, y] != 1)
                    {
                        int m = map[x + 1, y];
                        map[x + 1, y] = t;
                        map[x, y] = 0;
                        map[x + 2, y] = m;
                        x++;
                    }
                }
                Console.Clear();
                for (int i = 0; i < 10; i++)
                {
                    for (int j = 0; j < 10; j++)
                    {
                        if (map[i, j] == 0)
                        {
                            Console.Write("  ");
                        }
                        else if (map[i, j] == 1)
                        {
                            Console.Write("■");
                        }
                        else if (map[i, j] == 2)
                        {
                            Console.Write("□");
                        }
                        else if (map[i, j] == 3)
                        {
                            Console.Write("★");
                        }
                        else if (map[i, j] == 4)
                        {
                            Console.Write("♀");
                        }
                    }
                    Console.WriteLine();
                }
                if (map[8, 8] == 2)
                {
                    Console.WriteLine("逃脱成功!");
                    break;
                }
            }
        }
        //新手村
        static void XinShouCun()
        {
            Log("***********************************");
            Log("年轻人,欢迎来到计算机大陆。");
            Log("传说,上古时期,众神混战,微软公司陨落于此,故得此名。");
            NPC1("360安全卫士", "电脑管家");
            Log("你需要找个地方熟悉win10系统。");
            EnemyFight(new Enemy(EnemyType.小木马));
            EnemyFight(new Enemy(EnemyType.大木马));
            NPC1("QQ", "微信");
            EnemyFight(new Enemy(EnemyType.键盘侠));
            EnemyFight(new Enemy(EnemyType.圣母));
            NPC2("商人1", "商人2");
            EnemyFight(new Enemy(EnemyType.键盘侠));
            EnemyFight(new Enemy(EnemyType.圣母));
            Log("你感觉自己有点虚,又回去找商人买东西。");
            NPC2("商人1", "商人2");
            EnemyFight(new Enemy(EnemyType.键盘侠));
            EnemyFight(new Enemy(EnemyType.圣母));
            NPC3();
        }
        //喂鱼抽猫王国
        static void WeiYuChouMao()
        {
            Log("随着和野怪的搏杀,你渐渐地学会了如何一个人活下去。现在,你来到了位于计算机大陆北方的一个名为喂鱼抽猫的王国。");
            Log("在这个国家,只有两个种族,鱼族和猫族。");
            Log("你初来乍到,不知道伪装自己,被路边的士兵看到了,他们向你冲了过来。");
            Log("你选择:1,战斗 2,逃跑");
            string str = Console.ReadLine();
            if (str == "1")
            {
                EnemyFight(new Enemy(EnemyType.鲤鱼精));
                EnemyFight(new Enemy(EnemyType.猫妖));
            }
            else
            {
                Log("因为你逃跑了,喂鱼抽猫王国甚至派出了大魔法师来抓你。");
                Log("你开始了逃命之旅。");
                EnemyFight(new Enemy(EnemyType.鲤鱼精));
                EnemyFight(new Enemy(EnemyType.猫妖));
                EnemyFight(new Enemy(EnemyType.大魔法师));
            }
            Log("喂鱼抽猫王国已经把你定为一个非常危险的人,发动全国之力要来剿灭你。");
            Log("其中有不少强大的魔神要亲自来杀了你,系统建议你快跑。");
            EnemyFight(new Enemy(EnemyType.魔神));
            EnemyFight(new Enemy(EnemyType.魔神));
            EnemyFight(new Enemy(EnemyType.魔神));
            Log("你成功的活了下来。");
            Log("你搜刮了魔神的财产");
            EquipItem(new Equip(EquipType.wuqi, "倚天剑", "所向披靡", 0, 50, 0));
            EquipItem(new Equip(EquipType.yifu, "绝对领域", "无人能破", 500, 0, 0));
            EquipItem(new Equip(EquipType.xiezi, "踏玉虚鞋", "迅疾如风", 0, 0, 10));
            ShowInfo();
        }

        //火之高兴王国
        static void HuoZhiGaoXing()
        {
            Log("按照系统酱的估算,现在的你应该已经有十级了。(来自系统酱的吐槽:没有的话,那你也太黑了!)");
            Log("系统酱认为你已经可以开启第二重世界了,在第二重世界中,你将会遇到更加强大的敌人,更多的装备,注你好运。");
            Log("************************************");
            NPC4();
            Log("你逃到了一个小村庄,在这里娶妻生子,安稳的度过了余生。");
            Log("完结撒花!");

        }

        static void Main(string[] args)
        {
            Console.BackgroundColor = ConsoleColor.DarkBlue;
            Console.Clear();
            Console.ForegroundColor = ConsoleColor.Green;
            CreateCharacter();
            PingFen();
            XinShouCun();
            WeiYuChouMao();
            HuoZhiGaoXing();
        }
    }
}

猜你喜欢

转载自blog.csdn.net/zangyuepiaoling/article/details/107412987