找回密码
 立即注册

QQ登录

只需一步,快速开始

Ice

注册会员

1

主题

12

帖子

19

积分

注册会员

积分
19

活字格认证

QQ
最新发帖
Ice
注册会员   /  发表于:2011-4-9 14:44  /   查看:10194  /  回复:12
现马里奥打怪:马里奥生命为47,攻击为10,防御为5;怪物生命为11,攻击为10,防御为0;请问:战斗结束后,马里奥的生命值还剩多少?
抓住机遇,挑战自己!

12 个回复

倒序浏览
Dijkstra
论坛元老   /  发表于:2011-4-9 17:46:00
沙发
  1. mario.health - (int)((monster.attrack - mario.defence) *monster.health / (mario.attack - monster.defence))
复制代码
由公式的:47 - ( 10 - 5 )* 11 / ( 10 - 0 )= 37
回复 使用道具 举报
tbugs
中级会员   /  发表于:2011-4-10 00:37:00
板凳

回复 2# Dijkstra 的帖子

这应该是一条很不错的公式,顶分享!
路,在此绽放。
回复 使用道具 举报
Ice
注册会员   /  发表于:2011-4-10 20:35:00
地板
不对吧?马里奥第二次攻击怪物后,怪物就挂了!所以,马里奥攻击了两次,怪物只攻击了一次吧!第二次怪物就被打死了,还怎么攻击马里奥?
抓住机遇,挑战自己!
回复 使用道具 举报
Dijkstra
论坛元老   /  发表于:2011-4-10 21:55:00
5#
你改改不就行了
答案错了,是42
取整以后,丢掉小数部分
回复 使用道具 举报
Alex90
高级会员   /  发表于:2011-4-11 12:37:00
6#
  1.   private int FightEasy(Monster mon,Mario mario)
  2.         {
  3.             int value = 2;
  4.             //英雄每轮掉血量
  5.             int Dis_Monster = mario.Attack - mon.Defence;
  6.             //怪兽每轮掉血量
  7.             int Dis_Hero = mon.Attack - mario.Defence;
  8.             //如果英雄的攻击大于怪兽的防御并且怪兽的攻击小于英雄的防御,直接无视怪兽O(∩_∩)O~
  9.             if (mario.Attack > mon.Defence &amp;&amp; mon.Attack <= mario.Defence)
  10.             {
  11.                 return 2;
  12.             }
  13.             //如果英雄的攻击力小于怪兽的防御力并且怪兽的攻击力小于英雄的防御,战斗将无休止进行(+﹏+)~
  14.             else if (mario.Attack <= mon.Defence &amp;&amp; mon.Attack <= mario.Defence)
  15.             {
  16.                 return 10000;
  17.             }
  18.             //如果英雄的攻击小于怪兽的防御,怪兽的攻击大于英雄的防御,英雄被秒杀o(︶︿︶)o
  19.             else if (mario.Attack <= mon.Defence &amp;&amp; mon.Attack > mario.Defence)
  20.             {
  21.                 return 10000;
  22.             }
  23.             else//如果势均力敌,开始战斗~~o(>_<)o ~~
  24.             {
  25.                 while (mario.Health >= 0 &amp;&amp; mon.Health >= 0)
  26.                 {
  27.                     mon.Health -= Dis_Monster;
  28.                     if (mon.Health <= 0)
  29.                     {
  30.                         break;
  31.                     }
  32.                     mario.Health -= Dis_Hero;
  33.                     value += Dis_Hero;
  34.                     if (mario.Health <= 0)
  35.                     {
  36.                         return 10000;
  37.                     }
  38.                 }
  39.                 return value;
  40.             }
  41.         }
复制代码
回复 使用道具 举报
quab1
高级会员   /  发表于:2011-4-12 01:01:00
7#
葡萄城的程序里面抠出来的
  1.         private static int Fight(INode mario, INode monster, ref string message)
  2.         {
  3.             int hp1 = mario.Health;
  4.             int hp2 = monster.Health;
  5.             int ap1 = mario.Attack;
  6.             int ap2 = monster.Attack;
  7.             int dp1 = mario.Defence;
  8.             int dp2 = monster.Defence;

  9.             if (ap1 <= dp2)
  10.             {
  11.                 message = "由于攻击力太低,无法战胜怪物。";
  12.                 return 0;
  13.             }

  14.             while (hp1 > 0 &amp;&amp; hp2 > 0)
  15.             {
  16.                 if (ap1 > dp2)
  17.                 {
  18.                     hp2 -= (ap1 - dp2);
  19.                 }
  20.                 if (hp2 > 0)
  21.                 {
  22.                     if (ap2 > dp1)
  23.                     {
  24.                         hp1 -= (ap2 - dp1);
  25.                     }
  26.                 }
  27.             }

  28.             if (hp1 <= 0)
  29.             {
  30.                 message = "被怪物杀死了。";
  31.                 return 0;
  32.             }

  33.             return hp1;
  34.         }
复制代码
另外分享下我程序里的:

  1.             if (this.Attack <= monster.Defence)
  2.             {
  3.                 ret.Clear();
  4.             }
  5.             else if (this.Defence >= monster.Attack)
  6.             {
  7.                 this.CopyTo(ret);
  8.             }
  9.             else
  10.             {
  11.                 // hurt1是打怪物一次掉的血,hurt2是被怪物打一次掉的血
  12.                 int hurt1 = this.Attack - monster.Defence;
  13.                 int hurt2 = monster.Attack - this.Defence;

  14.                 // time1是打死怪物的次数,time2是被怪物打死的次数
  15.                 int time1 = (monster.Health / hurt1) + (((monster.Health % hurt1) > 0) ? 1 : 0 );
  16.                 int time2 = (this.Health / hurt2) + (((this.Health % hurt2) > 0) ? 1 : 0);

  17.                 // 打怪物次数多于被打次数,自己先死
  18.                 if (time1 > time2)
  19.                 {
  20.                     ret.Clear();
  21.                 }
  22.                 else
  23.                 {
  24.                     this.CopyTo(ret);
  25.                     ret.Health -= (hurt2 * (time1 - 1));
  26.                 }
  27.             }
复制代码
垃圾代码的创造者。。。
回复 使用道具 举报
quab1
高级会员   /  发表于:2011-4-12 01:03:00
8#
  1.             if (this.Attack <= monster.Defence)
  2.             {
  3.                 ret.Clear();
  4.             }
  5.             else if (this.Defence >= monster.Attack)
  6.             {
  7.                 this.CopyTo(ret);
  8.             }
  9.             else
  10.             {
  11.                 // hurt1是打怪物一次掉的血,hurt2是被怪物打一次掉的血
  12.                 int hurt1 = this.Attack - monster.Defence;
  13.                 int hurt2 = monster.Attack - this.Defence;
  14.                 // time1是打死怪物的次数,time2是被怪物打死的次数
  15.                 int time1 = (monster.Health / hurt1) + (((monster.Health % hurt1) > 0) ? 1 : 0 );
  16.                 int time2 = (this.Health / hurt2) + (((this.Health % hurt2) > 0) ? 1 : 0);
  17.                 // 打怪物次数多于被打次数,自己先死
  18.                 if (time1 > time2)
  19.                 {
  20.                     ret.Clear();
  21.                 }
  22.                 else
  23.                 {
  24.                     this.CopyTo(ret);
  25.                     ret.Health -= (hurt2 * (time1 - 1));
  26.                 }
  27.             }
复制代码
垃圾代码的创造者。。。
回复 使用道具 举报
Dijkstra
论坛元老   /  发表于:2011-4-12 14:29:00
9#
我觉得没有必要写个函数来做这个工作,只要判断mario的剩余血量就行了,
  1. if((monster.attrack - mario.defence) * (int)(monster.health / (mario.attack - monster.defence))&gt; mario.health){return false;}
复制代码
回复 使用道具 举报
lwj901111
新手上路   /  发表于:2011-4-12 16:43:00
10#
LS的好厉害,感谢分享!
回复 使用道具 举报
12下一页
您需要登录后才可以回帖 登录 | 立即注册
返回顶部