用C#制作卡牌游戏

呵呵。

首先先要有牌库来存储所有的牌,然后再弄个手牌库来存储抽出来的牌:

    public static List<Pai> pai = new();
    public static List<Pai> moster_pai = new();
    public List<Pai> handpaiku = new();
    public List<Pai> monsterpaiku = new();

牌库应该可以添加牌,也就是说它的长度可以改变,所以集合就成了我们的首选。

然后就到了构建牌属性的时候了,牌应该被分为几个种类例如攻击或回血。所以我们可以利用是一个(继承)的办法。看作攻击等牌类是一种牌的特性。这样就出来了

class Pai
{
    public int ATk = 0;
    //可以使用属性封装字段
    public int huiHP = 0;
    public int useblue = 0;
    public string PaiName;//牌的名字,给check方法使用
    public int burn = 0;
    public int frozen = 0;
    public int bleed = 0;
    public int kuangbao = 0;
    public static List<Pai> pai = new();
    public static List<Pai> moster_pai = new();
    protected int identifier=0;
}
class ATkPai : Pai
{
    public void SetAtkPai()
    {
        ATkPai kill = new();
        ATkPai kill2 = new(); 
        ATkPai kill3 = new();
        ATkPai kill4 = new();
        ATkPai kill5= new();
        ATkPai kill6 = new();
        kill.ATk = 10;
        kill2.ATk =16;
        kill3.ATk = 30;
        kill4.ATk = 10;
        kill5.ATk = 24;
        kill6.ATk = 34;
        kill.PaiName = "斩";
        kill2.PaiName = "射击";
        kill3.PaiName = "重斩";
        kill4.PaiName = "突刺";
        kill5.PaiName = "雷切";
        kill6.PaiName = "全力一击";
        kill4.bleed = 2;
        pai.Add(kill);
        pai.Add(kill2);
        pai.Add(kill3);
        pai.Add(kill4);
        pai.Add(kill5);
        pai.Add(kill6);
    }
}//6
class HPPai : Pai
{
    public void SetHPPai()
    {
        HPPai hppai = new();
        HPPai hppai2 = new();
        HPPai hppai3 = new();
        hppai.huiHP = 20;
        hppai2.huiHP = 100;
        hppai3.huiHP = 40;
        hppai.PaiName = "治疗";
        hppai2.PaiName = "自然恩赐";
        hppai3.PaiName = "滋润";
        pai.Add(hppai);
        pai.Add(hppai2);
        pai.Add(hppai3);
    }
}//3
class NullPAi:Pai
{
    public void SetNullPai()
    {
        NullPAi nullPAi = new();
        NullPAi nullPAi2 = new();
        NullPAi nullPAi3 = new();
        NullPAi nullPAi4 = new();
        nullPAi.PaiName = "自残";
        nullPAi2.PaiName = "俄罗斯轮盘赌";
        nullPAi3.PaiName = "终止";
        nullPAi4.PaiName = "轮到你了";
        nullPAi.ATk = 15;
        nullPAi2.ATk = 2000;
        pai.Add(nullPAi);
        pai.Add(nullPAi2);
        pai.Add(nullPAi3);
        pai.Add(nullPAi4);
    }
}//4
class MonsterATKPai : Pai
{
    public void SetMonsterATKPai()
    {
        MonsterATKPai monsterATKPai = new();
        MonsterATKPai monsterATKPai2 = new();
        MonsterATKPai monsterATKPai3 = new();
        monsterATKPai.ATk = 10;
        monsterATKPai2.ATk = 20;
        monsterATKPai3.ATk = 14;
        monsterATKPai.PaiName = "斩";
        monsterATKPai2.PaiName = "斩2";
        monsterATKPai3.PaiName = "斩3";
        moster_pai.Add(monsterATKPai);
        moster_pai.Add(monsterATKPai2);
        moster_pai.Add(monsterATKPai3);
    }
}
class MonsterHPPai : Pai
{
    public void SetmonsterHPPAi()
    {
        MonsterHPPai monsterHPPai = new();
        MonsterHPPai monsterHPPai2 = new();
        MonsterHPPai monsterHPPai3 = new();
        monsterHPPai.huiHP = 20;
        monsterHPPai2.huiHP = 40;
        monsterHPPai3.huiHP = 1000;
        monsterHPPai.PaiName = "回复";
        monsterHPPai2.PaiName = "回复2";
        monsterHPPai3.PaiName = "起死回生";
        moster_pai.Add(monsterHPPai);
        moster_pai.Add(monsterHPPai2);
        moster_pai.Add(monsterHPPai3);
    }
}

而每张牌都是一个对象。而每个对象又都有自己的属性。属性用来区分对象

顺便说一下new关键字,它分配内存给实例并初始化内部数据:

 A a=new A();

它把A的地址分给a这个实例,并初始化A内的数据(靠的是它后面的()也就是构造函数)。

然后是打乱牌的顺序,这里采用一个冒泡排序算法跟据每个对象的HashCode来进行排序:

    public List<Pai> Sort(List<Pai> a )//使用冒泡排序把牌库打乱
    {
        int z = a.ToArray().Length;
        for (int i = 0; i < z - 1; i++)
        {
            for (int j = 0; j < z - 1 - i; j++)
            {
                if (a[j].GetHashCode() > a[j + 1].GetHashCode())
                {
                    var temp = a[j + 1];
                    a[j + 1] = a[j];
                    a[j] = temp;
                }
            }
        }
        return a;
    }

完成了牌属性后,就到了出牌逻辑了。

    public void Use()//使用牌方法
    {
        do
        {
            if (handpaiku.Count== 0)
            {
                Game.Round++;
                break;
            }
            foreach (var i in handpaiku)//var关键字的正确用法
            {
                WriteLine($"你有的牌为{i.PaiName},耗蓝为{i.useblue}");
                WriteLine();//如果感觉游玩时看着比较怪可以删掉它
            }//每次获得新牌都输出手牌库中有什么牌
            string use = ReadLine();
            if(use=="t")
            {
                Game.Round++;
                break;
            }
            if (handpaiku.Count > 0)
            {
                switch (use)
                {
                    case "1":
                        if (handpaiku.Count >= 1 && Role_bule > handpaiku[0].useblue)
                        {
                            if (handpaiku[0] is ATkPai)
                            {
                                Moster_HP -= (handpaiku[0].ATk + handpaiku[0].bleed * 2);
                                //Role_bule -= handpaiku[0].useblue;
                                WriteLine($"你打出了一张{handpaiku[0].PaiName}");
                                WriteLine($"你造成伤害为{handpaiku[0].ATk},敌方血量还有{Moster_HP}");
                            }
                            if(handpaiku[0] is HPPai)
                            {
                                Role_HP += handpaiku[0].huiHP;
                                WriteLine($"你打出了一张{handpaiku[0].PaiName}");
                                WriteLine($"你的血量恢复到了{Role_HP},恢复了{handpaiku[0].huiHP}血");
                            }
                            else
                            {
                                Check(0);
                            }
                        }
                        handpaiku.RemoveAt(0);
                        break;
                    case "2":
                        if (handpaiku.Count >= 2 && Role_bule > handpaiku[1].useblue)
                        {
                            if (handpaiku[1] is ATkPai)
                            {
                                Moster_HP -= (handpaiku[1].ATk + handpaiku[1].bleed * 2);
                                //Role_bule -= handpaiku[0].useblue;
                                WriteLine($"你打出了一张{handpaiku[1].PaiName}");
                                WriteLine($"你造成伤害为{handpaiku[1].ATk},敌方血量还有{Moster_HP}");
                            }
                            if (handpaiku[1] is HPPai)
                            {
                                Role_HP += handpaiku[1].huiHP;
                                WriteLine($"你打出了一张{handpaiku[1].PaiName}");
                                WriteLine($"你的血量恢复到了{Role_HP},恢复了{handpaiku[1].huiHP}血");
                            }
                            else
                            {
                                Check(1);
                            }
                        }
                        else
                        {
                            WriteLine("查无此牌");
                            goto case "1";//返回第一个元素
                        }
                        handpaiku.RemoveAt(1);
                        break;
                    case "3":
                        if (handpaiku.Count >= 3 && Role_bule > handpaiku[2].useblue)
                        {
                            if (handpaiku[2] is ATkPai)
                            {
                                Moster_HP -= (handpaiku[2].ATk + handpaiku[2].bleed * 2);
                                //Role_bule -= handpaiku[0].useblue;
                                WriteLine($"你打出了一张{handpaiku[2].PaiName}");
                                WriteLine($"你造成伤害为{handpaiku[2].ATk},敌方血量还有{Moster_HP}");
                            }
                            if (handpaiku[2] is HPPai)
                            {
                                Role_HP += handpaiku[2].huiHP;
                                WriteLine($"你打出了一张{handpaiku[2].PaiName}");
                                WriteLine($"你的血量恢复到了{Role_HP},恢复了{handpaiku[2].huiHP}血");
                            }
                            else
                            {
                                Check(2);
                            }
                        }
                        else
                        {
                            WriteLine("查无此牌");
                            goto case "1";//返回第一个元素
                        }
                        handpaiku.RemoveAt(2);
                        break;
                    case "4":
                        if (handpaiku.Count >= 4 && Role_bule > handpaiku[3].useblue)
                        {
                            if (handpaiku[3] is ATkPai)
                            {
                                Moster_HP -= (handpaiku[3].ATk + handpaiku[3].bleed * 2);
                                //Role_bule -= handpaiku[0].useblue;
                                WriteLine($"你打出了一张{handpaiku[3].PaiName}");
                                WriteLine($"你造成伤害为{handpaiku[3].ATk},敌方血量还有{Moster_HP}");
                            }
                            if (handpaiku[3] is HPPai)
                            {
                                Role_HP += handpaiku[3].huiHP;
                                WriteLine($"你打出了一张{handpaiku[3].PaiName}");
                                WriteLine($"你的血量恢复到了{Role_HP},恢复了{handpaiku[3].huiHP}血");
                            }
                            else
                            {
                                Check(3);
                            }
                        }
                        else
                        {
                            WriteLine("查无此牌");
                            goto case "1";//返回第一个元素
                        }
                        handpaiku.RemoveAt(3);
                        break;
                    case "5":
                        if (handpaiku.Count >= 5 && Role_bule > handpaiku[4].useblue)
                        {
                            if (handpaiku[4] is ATkPai)
                            {
                                Moster_HP -= (handpaiku[4].ATk + handpaiku[4].bleed * 2);
                                //Role_bule -= handpaiku[0].useblue;
                                WriteLine($"你打出了一张{handpaiku[4].PaiName}");
                                WriteLine($"你造成伤害为{handpaiku[4].ATk},敌方血量还有{Moster_HP}");
                            }
                            if (handpaiku[4] is HPPai)
                            {
                                Role_HP += handpaiku[4].huiHP;
                                WriteLine($"你打出了一张{handpaiku[4].PaiName}");
                                WriteLine($"你的血量恢复到了{Role_HP},恢复了{handpaiku[4].huiHP}血");
                            }
                            else
                            {
                                Check(4);
                            }
                        }
                        else
                        {
                            WriteLine("查无此牌");
                            goto case "1";//返回第一个元素
                        }
                        handpaiku.RemoveAt(4);
                        break;
                    case "弃牌":
                        {
                            if(Game.time<=20)
                            {
                                handpaiku.RemoveAt(0);
                            }
                            Game.time++;
                        }
                        break;
                    default:
                        goto case "1";//如果错误输入,默认为第一张手牌
                }
            }
        } while (Role_HP >0);
    }

首先先判断List中的成员有多少个,再进行出哪张牌的判定

顺便一提:Length指的是长度,而Count指的是成员数量

全代码:

using System.Collections.Generic;
using static System.Console;
using System;
using System.IO;
using static System.IO.Directory;
using static System.IO.Path;
using static System.Environment;
class Game
{
    public static int Round = 1;
    public static byte time = 0;
    public static void Main()
    {
        WriteLine("请按z开始游戏,按1打出第一张牌,按2出第二张牌以此类推。输入弃牌来弃置第一张牌");
        Role role_Main_Game = new();//角色类实例
        ATkPai atkpai_Main_Game = new();
        HPPai hppai_Main_Game = new();
        NullPAi nullPAi_Main_Game = new();
        MonsterATKPai monsterATKPai_Main_Game = new();
        MonsterHPPai monsterHPPai_Main_Game = new();
        //Game game_Main_Game = new();
        role_Main_Game.ChooseRole();
        atkpai_Main_Game.SetAtkPai();//初始化攻击类牌
        hppai_Main_Game.SetHPPai();//初始化回血类牌
        nullPAi_Main_Game.SetNullPai();
        monsterATKPai_Main_Game.SetMonsterATKPai();
        monsterHPPai_Main_Game.SetmonsterHPPAi();
        atkpai_Main_Game.Sort(Pai.pai);//调用Sort函数,以此来打乱牌
        atkpai_Main_Game.Sort(Pai.moster_pai);
        do
        {
            if (Round % 2 == 0)
            {
                WriteLine($"怪物的回合,第{Round}回合");
                role_Main_Game.GetmonsterPai();
                role_Main_Game.AI();
            }
            if (Round % 2 == 1)
            {
                WriteLine($"你的回合,第{Round}回合");
                role_Main_Game.GetPai();
                role_Main_Game.Use();
            }
        } while (role_Main_Game.Role_HP > 0 && role_Main_Game.Moster_HP > 0);
        if (role_Main_Game.Role_HP <= 0)
        {
            WriteLine("感谢游玩");
            ReadLine();
        }
        else
        {
            WriteLine("你最终杀死了怪物");
            WriteLine("看着落日的余晖,你突然发现这座城市与你十分陌生");
            WriteLine("陌生到你不认识它,它也不在乎你......");
        }
    }
}
class Pai
{
    public int ATk = 0;
    //可以使用属性封装字段
    public int huiHP = 0;
    public int useblue = 0;
    public string PaiName;//牌的名字,给check方法使用
    public int burn = 0;
    public int frozen = 0;
    public int bleed = 0;
    public int kuangbao = 0;
    public static List<Pai> pai = new();
    public static List<Pai> moster_pai = new();
    protected int identifier = 0;
    public List<Pai> Sort(List<Pai> a)//使用冒泡排序把牌库打乱
    {
        int z = a.ToArray().Length;
        for (int i = 0; i < z - 1; i++)
        {
            for (int j = 0; j < z - 1 - i; j++)
            {
                if (a[j].GetHashCode() > a[j + 1].GetHashCode())
                {
                    var temp = a[j + 1];
                    a[j + 1] = a[j];
                    a[j] = temp;
                }
            }
        }
        return a;
    }
}
class ATkPai : Pai
{
    public void SetAtkPai()
    {
        ATkPai kill = new();
        ATkPai kill2 = new();
        ATkPai kill3 = new();
        ATkPai kill4 = new();
        ATkPai kill5 = new();
        ATkPai kill6 = new();
        kill.ATk = 10;
        kill2.ATk = 16;
        kill3.ATk = 30;
        kill4.ATk = 10;
        kill5.ATk = 24;
        kill6.ATk = 34;
        kill.PaiName = "斩";
        kill2.PaiName = "射击";
        kill3.PaiName = "重斩";
        kill4.PaiName = "突刺";
        kill5.PaiName = "雷切";
        kill6.PaiName = "全力一击";
        kill4.bleed = 2;
        pai.Add(kill);
        pai.Add(kill2);
        pai.Add(kill3);
        pai.Add(kill4);
        pai.Add(kill5);
        pai.Add(kill6);
    }
}//6
class HPPai : Pai
{
    public void SetHPPai()
    {
        HPPai hppai = new();
        HPPai hppai2 = new();
        HPPai hppai3 = new();
        hppai.huiHP = 20;
        hppai2.huiHP = 100;
        hppai3.huiHP = 40;
        hppai.PaiName = "治疗";
        hppai2.PaiName = "自然恩赐";
        hppai3.PaiName = "滋润";
        pai.Add(hppai);
        pai.Add(hppai2);
        pai.Add(hppai3);
    }
}//3
class NullPAi : Pai
{
    public void SetNullPai()
    {
        NullPAi nullPAi = new();
        NullPAi nullPAi2 = new();
        NullPAi nullPAi3 = new();
        NullPAi nullPAi4 = new();
        nullPAi.PaiName = "自残";
        nullPAi2.PaiName = "俄罗斯轮盘赌";
        nullPAi3.PaiName = "终止";
        nullPAi4.PaiName = "轮到你了";
        nullPAi.ATk = 15;
        nullPAi2.ATk = 2000;
        pai.Add(nullPAi);
        pai.Add(nullPAi2);
        pai.Add(nullPAi3);
        pai.Add(nullPAi4);
    }
}//4
class MonsterATKPai : Pai
{
    public void SetMonsterATKPai()
    {
        MonsterATKPai monsterATKPai = new();
        MonsterATKPai monsterATKPai2 = new();
        MonsterATKPai monsterATKPai3 = new();
        monsterATKPai.ATk = 10;
        monsterATKPai2.ATk = 20;
        monsterATKPai3.ATk = 14;
        monsterATKPai.PaiName = "斩";
        monsterATKPai2.PaiName = "斩2";
        monsterATKPai3.PaiName = "斩3";
        moster_pai.Add(monsterATKPai);
        moster_pai.Add(monsterATKPai2);
        moster_pai.Add(monsterATKPai3);
    }
}
class MonsterHPPai : Pai
{
    public void SetmonsterHPPAi()
    {
        MonsterHPPai monsterHPPai = new();
        MonsterHPPai monsterHPPai2 = new();
        MonsterHPPai monsterHPPai3 = new();
        monsterHPPai.huiHP = 20;
        monsterHPPai2.huiHP = 40;
        monsterHPPai3.huiHP = 300;
        monsterHPPai.PaiName = "回复";
        monsterHPPai2.PaiName = "回复2";
        monsterHPPai3.PaiName = "起死回生";
        moster_pai.Add(monsterHPPai);
        moster_pai.Add(monsterHPPai2);
        moster_pai.Add(monsterHPPai3);
    }
}
class Role
{
    public int Role_bule = 0;
    public int Role_HP = 0;
    public int Moster_HP = 2000;
    public List<Pai> handpaiku = new();
    public List<Pai> monsterpaiku = new();
    Random random = new();
    public void ChooseRole()
    {
        string choose = ReadLine();
        if (choose == "z")//选择角色
        {
            Role_HP = 1000;
            Role_bule = 30;
            WriteLine(Role_HP);
            WriteLine(Role_bule);
        }
    }
    public void GetPai()//获取手牌库
    {
        int i = handpaiku.Count;//手牌库中的剩余的手牌
        //用以确保手牌库中派的上限为5
        for (; i < 5; i++)
        {
            int a = random.Next(1, 10);
            handpaiku.Add(Pai.pai[a]);
        }
    }
    public void GetmonsterPai()//获取怪物的手牌库
    {
        for (int i = 0; i < 5; i++)
        {
            int a = random.Next(1, 6);
            monsterpaiku.Add(Pai.moster_pai[a]);
        }
    }
    public void Check(int i)
    {
        Random random = new();
        byte a = (byte)random.Next(1, 3);
        switch (handpaiku[i].PaiName)
        {
            case "自残":
                {
                    Role_HP -= handpaiku[i].ATk;
                    WriteLine($"你扣除了{handpaiku[i].ATk},还剩{Role_HP }血");
                    if (handpaiku.Count > 2)
                    {
                        handpaiku.RemoveAt(0);
                    }
                }
                break;
            case "俄罗斯轮盘赌":
                {
                    if (a == 1)
                    {
                        Role_HP -= handpaiku[i].ATk;
                        WriteLine($"角色扣除了{handpaiku[i].ATk}血,角色还有{Role_HP}血");
                    }
                    else
                    {
                        Moster_HP -= handpaiku[i].ATk;
                        WriteLine($"怪物扣除了{handpaiku[i].ATk}血,怪物还有{Moster_HP}血");
                    }
                }
                break;
            case "终止":
                {
                    Game.Round++;
                }
                break;
            case "轮到你了":
                {
                    WriteLine("一点用都没有,哈哈哈哈");
                    break;
                }
                //break;
        }
    }
    public void Use()//使用牌方法
    {
        do
        {
            if (handpaiku.Count == 0)
            {
                Game.Round++;
                break;
            }
            foreach (var i in handpaiku)//var关键字的正确用法
            {
                WriteLine($"你有的牌为{i.PaiName},耗蓝为{i.useblue}");
                WriteLine();//如果感觉游玩时看着比较怪可以删掉它
            }//每次获得新牌都输出手牌库中有什么牌
            string use = ReadLine();
            if (use == "t")
            {
                Game.Round++;
                break;
            }
            if (handpaiku.Count > 0)
            {
                switch (use)
                {
                    case "1":
                        if (handpaiku.Count >= 1 && Role_bule > handpaiku[0].useblue)
                        {
                            if (handpaiku[0] is ATkPai)
                            {
                                Moster_HP -= (handpaiku[0].ATk + handpaiku[0].bleed * 2);
                                //Role_bule -= handpaiku[0].useblue;
                                WriteLine($"你打出了一张{handpaiku[0].PaiName}");
                                WriteLine($"你造成伤害为{handpaiku[0].ATk},敌方血量还有{Moster_HP}");
                            }
                            if (handpaiku[0] is HPPai)
                            {
                                Role_HP += handpaiku[0].huiHP;
                                WriteLine($"你打出了一张{handpaiku[0].PaiName}");
                                WriteLine($"你的血量恢复到了{Role_HP},恢复了{handpaiku[0].huiHP}血");
                            }
                            else
                            {
                                Check(0);
                            }
                        }
                        handpaiku.RemoveAt(0);
                        break;
                    case "2":
                        if (handpaiku.Count >= 2 && Role_bule > handpaiku[1].useblue)
                        {
                            if (handpaiku[1] is ATkPai)
                            {
                                Moster_HP -= (handpaiku[1].ATk + handpaiku[1].bleed * 2);
                                //Role_bule -= handpaiku[0].useblue;
                                WriteLine($"你打出了一张{handpaiku[1].PaiName}");
                                WriteLine($"你造成伤害为{handpaiku[1].ATk},敌方血量还有{Moster_HP}");
                            }
                            if (handpaiku[1] is HPPai)
                            {
                                Role_HP += handpaiku[1].huiHP;
                                WriteLine($"你打出了一张{handpaiku[1].PaiName}");
                                WriteLine($"你的血量恢复到了{Role_HP},恢复了{handpaiku[1].huiHP}血");
                            }
                            else
                            {
                                Check(1);
                            }
                        }
                        else
                        {
                            WriteLine("查无此牌");
                            goto case "1";//返回第一个元素
                        }
                        handpaiku.RemoveAt(1);
                        break;
                    case "3":
                        if (handpaiku.Count >= 3 && Role_bule > handpaiku[2].useblue)
                        {
                            if (handpaiku[2] is ATkPai)
                            {
                                Moster_HP -= (handpaiku[2].ATk + handpaiku[2].bleed * 2);
                                //Role_bule -= handpaiku[0].useblue;
                                WriteLine($"你打出了一张{handpaiku[2].PaiName}");
                                WriteLine($"你造成伤害为{handpaiku[2].ATk},敌方血量还有{Moster_HP}");
                            }
                            if (handpaiku[2] is HPPai)
                            {
                                Role_HP += handpaiku[2].huiHP;
                                WriteLine($"你打出了一张{handpaiku[2].PaiName}");
                                WriteLine($"你的血量恢复到了{Role_HP},恢复了{handpaiku[2].huiHP}血");
                            }
                            else
                            {
                                Check(2);
                            }
                        }
                        else
                        {
                            WriteLine("查无此牌");
                            goto case "1";//返回第一个元素
                        }
                        handpaiku.RemoveAt(2);
                        break;
                    case "4":
                        if (handpaiku.Count >= 4 && Role_bule > handpaiku[3].useblue)
                        {
                            if (handpaiku[3] is ATkPai)
                            {
                                Moster_HP -= (handpaiku[3].ATk + handpaiku[3].bleed * 2);
                                //Role_bule -= handpaiku[0].useblue;
                                WriteLine($"你打出了一张{handpaiku[3].PaiName}");
                                WriteLine($"你造成伤害为{handpaiku[3].ATk},敌方血量还有{Moster_HP}");
                            }
                            if (handpaiku[3] is HPPai)
                            {
                                Role_HP += handpaiku[3].huiHP;
                                WriteLine($"你打出了一张{handpaiku[3].PaiName}");
                                WriteLine($"你的血量恢复到了{Role_HP},恢复了{handpaiku[3].huiHP}血");
                            }
                            else
                            {
                                Check(3);
                            }
                        }
                        else
                        {
                            WriteLine("查无此牌");
                            goto case "1";//返回第一个元素
                        }
                        handpaiku.RemoveAt(3);
                        break;
                    case "5":
                        if (handpaiku.Count >= 5 && Role_bule > handpaiku[4].useblue)
                        {
                            if (handpaiku[4] is ATkPai)
                            {
                                Moster_HP -= (handpaiku[4].ATk + handpaiku[4].bleed * 2);
                                //Role_bule -= handpaiku[0].useblue;
                                WriteLine($"你打出了一张{handpaiku[4].PaiName}");
                                WriteLine($"你造成伤害为{handpaiku[4].ATk},敌方血量还有{Moster_HP}");
                            }
                            if (handpaiku[4] is HPPai)
                            {
                                Role_HP += handpaiku[4].huiHP;
                                WriteLine($"你打出了一张{handpaiku[4].PaiName}");
                                WriteLine($"你的血量恢复到了{Role_HP},恢复了{handpaiku[4].huiHP}血");
                            }
                            else
                            {
                                Check(4);
                            }
                        }
                        else
                        {
                            WriteLine("查无此牌");
                            goto case "1";//返回第一个元素
                        }
                        handpaiku.RemoveAt(4);
                        break;
                    case "弃牌":
                        {
                            if (Game.time <= 20)
                            {
                                handpaiku.RemoveAt(0);
                            }
                            Game.time++;
                        }
                        break;
                    default:
                        goto case "1";//如果错误输入,默认为第一张手牌
                }
            }
        } while (Role_HP > 0);
    }
    public void AI()//怪物的AI行为
    {
        do
        {
            //如果打不过或者想降低难度可以调一下这个if
            if (monsterpaiku.Count == 0)
            {
                Game.Round++;
                break;
            }
            if (Moster_HP <= Moster_HP / 2)//怪物残血时回血方式
            {
                int lenght = monsterpaiku.ToArray().Length;
                for (int i = 0; i < lenght - 1; i++)//运用冒泡函数将恢复量大的牌放到前面
                {
                    for (int j = 0; j < lenght - 1 - i; j++)
                    {
                        if (monsterpaiku[j].huiHP < monsterpaiku[j + 1].huiHP)
                        {
                            var temp = monsterpaiku[j + 1];
                            monsterpaiku[j + 1] = monsterpaiku[j];
                            monsterpaiku[j] = temp;
                        }
                    }
                }
                if (monsterpaiku[0] is MonsterHPPai)
                {
                    Moster_HP += monsterpaiku[0].huiHP;
                    WriteLine($"怪物的血恢复到了{Moster_HP},怪物回了{monsterpaiku[0].huiHP}血");
                    monsterpaiku.RemoveAt(0);
                }
            }
            if (monsterpaiku[0] is MonsterATKPai)//让怪物打出牌(攻击)
            {
                Role_HP -= monsterpaiku[0].ATk;
                WriteLine($"怪物用了一张{monsterpaiku[0].PaiName},你扣除了{monsterpaiku[0].ATk },你还剩{Role_HP}血");
                monsterpaiku.Remove(monsterpaiku[0]);
            }
            else
            {
                Moster_HP += monsterpaiku[0].huiHP;
                WriteLine($"怪物用了一张{monsterpaiku[0].PaiName},它恢复了{monsterpaiku[0].huiHP},怪物还有{Moster_HP}血");
                monsterpaiku.Remove(monsterpaiku[0]);
            }
        } while (Moster_HP > 0);
    }
}

小知识:

在天文学当中有一种东西叫多普勒红移。它是由于多普勒效应而出现的

在unity中可以调节几个参数来实现多普勒效应

骗过可恶的发文助手:

uieruiuzljojuiolkjgkljuiuioueiogu及航空界经济噢开架率居噢口欧欧噢来拒绝以加以噢进垃圾筐经济将赴经济科技疯狂加快捐款会计法卡就立即考虑加快了几哦居噢欧欧欧噢爱欧欧欧噢爱哦加快立即考虑加快加快集资噢积jio以后哦即考虑加快了旧居快了jio口气污辱其温柔我如气温

  • 2
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值