none
C#编写卡片程序的问题 RRS feed

  • 问题

  • 我想用C#编写一个卡牌游戏,每一张卡牌都有各自的效果(有的没效果),但有的效果是即时的,就是发动一次就没有用了,有的是永久的,比如说你抽牌时生命值+500,你的生命值被扣除2000以上破坏一张卡片等等,卡片很多,可能引起效果发动的事件也很多,有上千张卡片
    我只想出了为每个可能引起效果发动每个事件编写一个效果(方法)
    比如:
      public interface ICard
      {
        string eName { get; set; }          //卡片的英文名
        string jName { get; set; }          //卡片的日文名
        string cName { get; set; }          //卡片的中文名
        short[] isMarked { get; set; }        //卡片标记数组
        bool spellBool { get; set; }          //是否有效果
        bool I_cemeterySpellBool { get; set; } //是否有在我方墓地时发动的触发式(或永久)效果
        void I_cemeterySpell();            //在我方墓地时发动的触发式(或永久)效果
        bool I_allInHandSpellBool { get; set; } //是否有在我方抽牌发动的触发式(或永久)效果
        void I_allInHandSpell();            //在我方抽牌发动的触发式(或永久)效果
        bool I_handInAllSpellBool { get; set; } //是否有在我方将手牌放回墓地时发动的触发式(或永久)效果
        void I_handInAllSpelll();            //在我方将手牌放回墓地时发动的触发式(或永久)效果
        bool I_normalCallMonsterBool { get; set; } //是否有在通常召唤怪兽时发动的触发式(或永久)效果
        void I_normalCallMonster();        //在通常召唤怪兽时发动的触发式(或永久)效果
        bool I_specialCallMonsterBool { get; set; } //是否有在我方特殊召唤怪兽时发动的触发式(或永久)效果
        void I_specialCallMonster();        //在我方特殊召唤怪兽时发动的触发式(或永久)效果
        bool I_handIAttackSpell { get; set; }  //是否有这张卡片在手牌时我方发动攻击时发动的效果
        void I_handIAttack();             //这张卡片在手牌时我方发动攻击时发动的效果
        bool I_iAttackSpellBool { get; set; }   //是否有在我方发动攻击时发动的效果
        void I_iAttackSpell();             //在我方发动攻击时发动的效果
        ......
        Object other { get; set; }
      }
    

    然后为每张卡片的每一个不同发动条件的效果各写一个方法

    之后再这些条件满足时(比如说攻击),攻击方法内部调用因攻击触发的方法

    可这样卡片太多,不知得写到几年!
    我想不出更合适的解决方案,请高手们帮帮忙!
     
    (其实就是想做一个游戏王卡片决斗的程序,玩过卡片或看过动漫的人就知道了)
    2011年9月1日 5:34

答案

  • 卡片多,你都计划好了么?只是录入工作么?按1分钟平均30个汉字速度,敲完28800字不过2天(每天8小时)。体力活,必须的。
    2011 c# mvp China. *George读起来像不像“饺子”?我爱吃饺子,我叫George。
    2011年9月3日 17:59
    版主
  • 我也尝试写过卡牌程序,但设计的和楼主不太相同。

    我是让每一个卡牌为一个类,类内有卡牌发动效果运算的方法,然后返回,返回值和参数都是事先总结的好的(比如掉血/加血类,伤害类等)

    关键是如何归类所有卡牌有哪些效果,同种的效果还可以直接以配置文件形式存放。

    看楼主的很多方法都可以进行合并的,那些是否XXX似乎可以通过参数传入

    2011年9月6日 5:09

全部回复

  • 怎么会没人回复啊!!!
    2011年9月3日 2:35
  • 卡片多,你都计划好了么?只是录入工作么?按1分钟平均30个汉字速度,敲完28800字不过2天(每天8小时)。体力活,必须的。
    2011 c# mvp China. *George读起来像不像“饺子”?我爱吃饺子,我叫George。
    2011年9月3日 17:59
    版主
  • Hi Xeon,

    我同意George的观点, 你的所有触发的效果看来都是相互之间不同的, 无法重用, 所以针对每个效果都要写相应的逻辑.
    祝你快乐每一天,


    Leo Liu [MSFT]
    MSDN Community Support | Feedback to us
    Get or Request Code Sample from Microsoft
    Please remember to mark the replies as answers if they help and unmark them if they provide no help.

    2011年9月5日 3:04
    版主
  • 汗|||
    2011年9月5日 9:54
  • 我也尝试写过卡牌程序,但设计的和楼主不太相同。

    我是让每一个卡牌为一个类,类内有卡牌发动效果运算的方法,然后返回,返回值和参数都是事先总结的好的(比如掉血/加血类,伤害类等)

    关键是如何归类所有卡牌有哪些效果,同种的效果还可以直接以配置文件形式存放。

    看楼主的很多方法都可以进行合并的,那些是否XXX似乎可以通过参数传入

    2011年9月6日 5:09