游戏开发论坛

 找回密码
 立即注册
搜索
楼主: 到处捣乱

[讨论] 问个战斗模型方面的简单问题.

[复制链接]

32

主题

782

帖子

1772

积分

金牌会员

吐槽机器

Rank: 6Rank: 6

积分
1772
QQ
发表于 2010-4-23 16:22:00 | 显示全部楼层

Re:问个战斗模型方面的简单问题.

lz算法的问题在于每点速度在不同阶段不同对手的情况下获利不同,所以会导致价值模糊

建议算法改成
F(A)=速度A*共用系数+random(100)
F(B)=速度B*共用系数+random(100)
再比较F(A)与F(B)的大小,数值大的先出手,共用系数由速度属性的取值范围来定,同时取决于你想让随机部分占多大比重

32

主题

782

帖子

1772

积分

金牌会员

吐槽机器

Rank: 6Rank: 6

积分
1772
QQ
发表于 2010-4-23 16:26:00 | 显示全部楼层

Re:问个战斗模型方面的简单问题.

继续,未命中和闪避如果确定要做成2个数据的话,那就还是用两次随机吧,random(100)<=32,这种算法问题很大

其实没必要做成2个,命中和闪避直接做成对抗属性就好了

32

主题

1519

帖子

2334

积分

金牌会员

Rank: 6Rank: 6

积分
2334
发表于 2010-4-23 16:26:00 | 显示全部楼层

Re:问个战斗模型方面的简单问题.

看到10楼时我还想说点什么,结果看到了11楼,于是,水一下吧。。。

6

主题

399

帖子

408

积分

中级会员

Rank: 3Rank: 3

积分
408
发表于 2010-4-23 16:27:00 | 显示全部楼层

Re:问个战斗模型方面的简单问题.

嗯,直接做成对抗属性就好了。

2

主题

5

帖子

5

积分

新手上路

Rank: 1

积分
5
 楼主| 发表于 2010-4-23 16:46:00 | 显示全部楼层

Re:问个战斗模型方面的简单问题.

对抗属性的 公式怎么做啊?

0

主题

8

帖子

8

积分

新手上路

Rank: 1

积分
8
发表于 2010-4-23 17:50:00 | 显示全部楼层

Re:问个战斗模型方面的简单问题.

...看看...学习借鉴

69

主题

2031

帖子

2356

积分

金牌会员

Rank: 6Rank: 6

积分
2356
发表于 2010-4-23 18:18:00 | 显示全部楼层

Re:问个战斗模型方面的简单问题.

把总数值分为三个属性。
分别是速度、敏捷、攻击。
速度代表出招顺序,敏捷代表躲避的概率,攻击代表伤血的量。
每次由玩家自行分配三种数值的比例。
战斗规则为:
首先进行速度相减,有差。
则以第一方的敏捷减去这个差值,为其躲避掉攻击的概率。若系统随机值在概率以外,则攻击成功,其伤血量与分配的攻击力相关。
若在概率以内,攻击失败,对方会反击,其反击值会根据对方全敏捷状态计算躲避概率,成功,则伤血、反之,进入下一回合。

若速度相平,则以敏捷只差代替速度只差。
若速度、敏捷均持平,则进入下一回合。

演示,A23,B20.
第一轮:A(10,8,5)
        B( 9 ,8,5)
A速度为先,余值为1,即攻击B时,B敏捷为7。若成功,B伤血5,若失败,B反击,A敏捷为8,成功伤血5,失败进入下一轮。

第二轮:A(9,9,5)
        B(9,8,5)
A敏捷高1,攻击,B敏捷为1,成功,B伤血5;失败,B反击,A敏捷为9,成功伤5,失败进入下一轮。

第三轮:A(9,9,5)
        B(9,9,4)
速度与敏捷平,直接进入下一轮。

突然想到这个设计,但不知道有没有意义。

30

主题

422

帖子

433

积分

中级会员

Rank: 3Rank: 3

积分
433
发表于 2010-4-24 00:29:00 | 显示全部楼层

Re:问个战斗模型方面的简单问题.

我说一个模型,大家看看效果如何:
2人的速度用来表示每回合积累的速度总量。
每回合各自在自己当时的速度总量范围内随机一个值,大的出手。然后各自从总量中扣除当前随机值。

a:23, b:20

a.Speed = 23;
b.Speed = 20;
a.totalSpeed = 0;
b.totalSpeed = 0;
while(!end())
{
   // 1
   a.totalSpeed += a.Speed;
   b.totalSpeed += b.Speed;
   // 2
   a.cur = rand()%a.totalSpeed;
   b.cur = rand()%b.totalSpeed;
   // 3
   a.totalSpeed -= a.cur;
   b.totalSpeed -= b.cur;
   // 4
   if (a.cur > b.cur)
      a.Run();
   else if (a.cur < b.cur)
      b.Run();
   else
      NoopRound();
}

9

主题

97

帖子

97

积分

注册会员

Rank: 2

积分
97
发表于 2010-4-24 00:59:00 | 显示全部楼层

Re:问个战斗模型方面的简单问题.

对抗属性的意思就是我的命中率是80%而你的躲闪是20%的话
我命中你的概率就是(80-20)%
如果我没理解错的话..

29

主题

487

帖子

953

积分

高级会员

Rank: 4

积分
953
发表于 2010-4-24 09:53:00 | 显示全部楼层

Re:问个战斗模型方面的简单问题.

一样事情还一样,别和命中扯上关系,出手是出手,命中是命中.

按照LZ的想法稍微修正下,

假设A和B PK
A的敏捷是20 而B的敏捷是25

那么A.speed = random(20,100)
    b.speed = random(25,100)

这样由于A的敏捷低于B 随机到的数值A.speed高于B.speed来说概率就少一些。
同样这么设计了,就会影响到你敏捷的成长公式.
后来你发现后面那个100这个值也许还需要通过计算得出.至于什么方式就看你的游戏了.
当然你也可以按照自己的思路找出一条.
以上只是建议.
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

作品发布|文章投稿|广告合作|关于本站|游戏开发论坛 ( 闽ICP备17032699号-3 )

GMT+8, 2025-8-15 10:54

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表