编写卡牌有很多种的卡牌游戏程序的时候,是每张卡牌一个类,还是统一使用一个类?

wshwiu 2014-08-04 09:34:09
如果写一个类似于游戏王或者万智牌之类的,卡牌效果很复杂的卡牌游戏的时候,是应该每张卡牌都基于一个基类写一个类,还是说通过传递数据来确定实际的效果?
或者索性使用脚本语言?还是说有别的更好的方法?
什么样的设计模式比较适合于这种情况?
...全文
728 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
我看你有戏 2014-08-06
  • 打赏
  • 举报
回复
引用 9 楼 wshwiu 的回复:
[quote=引用 8 楼 henry3695 的回复:] [quote=引用 楼主 wshwiu 的回复:] 如果写一个类似于游戏王或者万智牌之类的,卡牌效果很复杂的卡牌游戏的时候,是应该每张卡牌都基于一个基类写一个类,还是说通过传递数据来确定实际的效果? 或者索性使用脚本语言?还是说有别的更好的方法? 什么样的设计模式比较适合于这种情况?
每张卡牌一个类啊[/quote] 这样在更新和扩展性上面会不会有问题?[/quote] 不会有啥问题的啊
勤奋的小游侠 2014-08-06
  • 打赏
  • 举报
回复
卡牌类全部是一个类的,这个类会具有不同的itemType,不同的技能,每个技能都可以配置.技能打出之后的效果,c++会提供一个回合前,回合中,回合后的接口,这个接口由脚本实现,实现时根据卡牌的itemType和技能等做出不同的实现。 在c++层面,所有的卡牌就只有一种,但它们的属性是不一样的!属性是通过数据库和脚本配置。 c++这个框架是不改动的,即使有新的卡牌,只要添加一个新的数据库数据,同时加多一二个脚本实现即可。
  • 打赏
  • 举报
回复
如果是普通的扑克牌,就一个类好了 类似英雄杀 三国杀之类的要抽象出继承关系,每张牌一个具体的类,统一继承自同一个基类
wshwiu 2014-08-06
  • 打赏
  • 举报
回复
引用 8 楼 henry3695 的回复:
[quote=引用 楼主 wshwiu 的回复:] 如果写一个类似于游戏王或者万智牌之类的,卡牌效果很复杂的卡牌游戏的时候,是应该每张卡牌都基于一个基类写一个类,还是说通过传递数据来确定实际的效果? 或者索性使用脚本语言?还是说有别的更好的方法? 什么样的设计模式比较适合于这种情况?
每张卡牌一个类啊[/quote] 这样在更新和扩展性上面会不会有问题?
我看你有戏 2014-08-06
  • 打赏
  • 举报
回复
引用 楼主 wshwiu 的回复:
如果写一个类似于游戏王或者万智牌之类的,卡牌效果很复杂的卡牌游戏的时候,是应该每张卡牌都基于一个基类写一个类,还是说通过传递数据来确定实际的效果? 或者索性使用脚本语言?还是说有别的更好的方法? 什么样的设计模式比较适合于这种情况?
每张卡牌一个类啊
wshwiu 2014-08-06
  • 打赏
  • 举报
回复
和脚本语言相比,每张卡牌都使用一个子类有什么优势呢?
zilaishuichina 2014-08-05
  • 打赏
  • 举报
回复
引用 4 楼 wshwiu 的回复:
[quote=引用 1 楼 zilaishuichina 的回复:] 卡牌的逻辑放 脚本, 比如a能不能打b, 伤害多少, 放什么技能, 加buf多少 游戏的逻辑可以放 程序, 比如15毫秒一次轮训,a方的脚本逻辑run一次,b方的脚本逻辑run一次 卡牌对象可以是 c++ 的类,程序将类对象传给脚本, 脚本保存这个userdata,具体属性由脚本填,获取的时候也是从这个userdata获取。 脚本控制类对象的申请释放的时机, 具体的申请释放过程由程序做,如果脚本有漏掉的(申请释放不匹配的地方),最后一局战斗结束的时候,程序统一释放
我觉得要实现的话几种方案都可以实现,就想问一下哪种方案会比较好。 如果用脚本的话那应该是每张卡牌都用一个脚本吧。这样效率或者安全性之类的会不会有问题?[/quote] c++ 调 lua 的效率,这个可以实测, 我手头上也没有具体数据可以参考。 只是我们这边,游戏逻辑是在脚本里面,程序逻辑是在程序里面, 怎么区分“游戏逻辑” 和 “程序逻辑” 呢: 会随着策划方案的变动而变动的,就是游戏逻辑, 比如策划说这个技能今天是打前排3个人,明天又改成了打后排的两个人。 不随着策划方案的变动而变动的,就是程序逻辑,比如对象的创建释放,游戏局的开始结束要做的初始化工作,游戏局结束的时候资源的回收,游戏帧数的控制,网络数据收发,数据库存储。 这样 1、更新的时候比较方便, 因为更新脚本可以动态加载, 更新程序你只能停服维护。 2、脚本出错了(游戏逻辑出错了),不影响程序逻辑。 安全性,不知道楼主指的是不是代码的泄露这方面? 要知道脚本也是可以打包成2进制文件的,exe也是同样可以反汇编的。 是不是每张卡牌都用一个脚本? 分成不同的文件只能是看起来清晰一点,但是不同卡牌之间交互,好不好做,就具体情况具体分析了 比如 你要做两张卡牌之间的对战,类似function attack(card1, card2)这样的函数, 如果card1, card2是不同的类型,哪怕都是继承同一个基类,你在函数里面取他们的属性的时候肯定还是会涉及到需要子类独有的属性的情况,这时候就不是很方便。
wshwiu 2014-08-05
  • 打赏
  • 举报
回复
引用 2 楼 sols000 的回复:
就用从CWnd类派生出来就行了,还是比较方便的,属性什么的自己加
那是每张卡牌一个子类吗?
wshwiu 2014-08-05
  • 打赏
  • 举报
回复
引用 1 楼 zilaishuichina 的回复:
卡牌的逻辑放 脚本, 比如a能不能打b, 伤害多少, 放什么技能, 加buf多少 游戏的逻辑可以放 程序, 比如15毫秒一次轮训,a方的脚本逻辑run一次,b方的脚本逻辑run一次 卡牌对象可以是 c++ 的类,程序将类对象传给脚本, 脚本保存这个userdata,具体属性由脚本填,获取的时候也是从这个userdata获取。 脚本控制类对象的申请释放的时机, 具体的申请释放过程由程序做,如果脚本有漏掉的(申请释放不匹配的地方),最后一局战斗结束的时候,程序统一释放
我觉得要实现的话几种方案都可以实现,就想问一下哪种方案会比较好。 如果用脚本的话那应该是每张卡牌都用一个脚本吧。这样效率或者安全性之类的会不会有问题?
wshwiu 2014-08-05
  • 打赏
  • 举报
回复
引用 6 楼 zilaishuichina 的回复:
[quote=引用 4 楼 wshwiu 的回复:] [quote=引用 1 楼 zilaishuichina 的回复:] 卡牌的逻辑放 脚本, 比如a能不能打b, 伤害多少, 放什么技能, 加buf多少 游戏的逻辑可以放 程序, 比如15毫秒一次轮训,a方的脚本逻辑run一次,b方的脚本逻辑run一次 卡牌对象可以是 c++ 的类,程序将类对象传给脚本, 脚本保存这个userdata,具体属性由脚本填,获取的时候也是从这个userdata获取。 脚本控制类对象的申请释放的时机, 具体的申请释放过程由程序做,如果脚本有漏掉的(申请释放不匹配的地方),最后一局战斗结束的时候,程序统一释放
我觉得要实现的话几种方案都可以实现,就想问一下哪种方案会比较好。 如果用脚本的话那应该是每张卡牌都用一个脚本吧。这样效率或者安全性之类的会不会有问题?[/quote] c++ 调 lua 的效率,这个可以实测, 我手头上也没有具体数据可以参考。 只是我们这边,游戏逻辑是在脚本里面,程序逻辑是在程序里面, 怎么区分“游戏逻辑” 和 “程序逻辑” 呢: 会随着策划方案的变动而变动的,就是游戏逻辑, 比如策划说这个技能今天是打前排3个人,明天又改成了打后排的两个人。 不随着策划方案的变动而变动的,就是程序逻辑,比如对象的创建释放,游戏局的开始结束要做的初始化工作,游戏局结束的时候资源的回收,游戏帧数的控制,网络数据收发,数据库存储。 这样 1、更新的时候比较方便, 因为更新脚本可以动态加载, 更新程序你只能停服维护。 2、脚本出错了(游戏逻辑出错了),不影响程序逻辑。 安全性,不知道楼主指的是不是代码的泄露这方面? 要知道脚本也是可以打包成2进制文件的,exe也是同样可以反汇编的。 是不是每张卡牌都用一个脚本? 分成不同的文件只能是看起来清晰一点,但是不同卡牌之间交互,好不好做,就具体情况具体分析了 比如 你要做两张卡牌之间的对战,类似function attack(card1, card2)这样的函数, 如果card1, card2是不同的类型,哪怕都是继承同一个基类,你在函数里面取他们的属性的时候肯定还是会涉及到需要子类独有的属性的情况,这时候就不是很方便。 [/quote] 很有道理,再挂一天看看别人怎么说,没人就准备结贴了。
树叶上的蜗牛 2014-08-05
  • 打赏
  • 举报
回复
Cwnd可以响应所有的消息,移动起来也方便,将需要画的画在里面也很方便,等等
树叶上的蜗牛 2014-08-05
  • 打赏
  • 举报
回复
就用从CWnd类派生出来就行了,还是比较方便的,属性什么的自己加
zilaishuichina 2014-08-05
  • 打赏
  • 举报
回复
卡牌的逻辑放 脚本, 比如a能不能打b, 伤害多少, 放什么技能, 加buf多少 游戏的逻辑可以放 程序, 比如15毫秒一次轮训,a方的脚本逻辑run一次,b方的脚本逻辑run一次 卡牌对象可以是 c++ 的类,程序将类对象传给脚本, 脚本保存这个userdata,具体属性由脚本填,获取的时候也是从这个userdata获取。 脚本控制类对象的申请释放的时机, 具体的申请释放过程由程序做,如果脚本有漏掉的(申请释放不匹配的地方),最后一局战斗结束的时候,程序统一释放

64,648

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧