- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我开始在 Everquest TDD Kata ( Github Link) 上编写代码,并且我正在参与
Feature: Character Ability Modifiers Modify Attributes
As a character I want to apply my ability modifiers improve my capabilities in combat so that I can vanquish my enemy with extreme prejudice
add Strength modifier to:
- attack roll and damage dealt
- double Strength modifier on critical hits
但我不知道我的数学在我的考试中是否正确。使用 NUnit 的 TestCaseSource 我有以下测试
[TestFixture]
public class CharacterAbilityTests
{
[TestCaseSource("StrengthAbilityTestCases", Category = "Character Strength Tests")]
public int StrengthAbiltyAddsModifierToAttackRollAndDamage(Character hero, int hitroll)
{
var enemy = new Character();
Assert.That(hero.Attack(enemy, hitroll), Is.True);
return enemy.HitPoints;
}
private static IEnumerable<TestCaseData> StrengthAbilityTestCases
{
get
{
yield return My.Hero.WithStrength(12).RollsHitOf(9).LeavesEnemyWithHitPoints(3);
yield return My.Hero.WithStrength(14).RollsHitOf(8).LeavesEnemyWithHitPoints(2);
yield return My.Hero.WithStrength(16).RollsHitOf(7).LeavesEnemyWithHitPoints(1);
yield return My.Hero.WithStrength(19).RollsHitOf(6).LeavesEnemyWithHitPoints(0);
yield return My.Hero.WithStrength(20).RollsHitOf(5).LeavesEnemyWithHitPoints(-1);
yield return My.Hero.WithStrength(12).RollsHitOf(20).LeavesEnemyWithHitPoints(2);
yield return My.Hero.WithStrength(14).RollsHitOf(20).LeavesEnemyWithHitPoints(0);
yield return My.Hero.WithStrength(16).RollsHitOf(20).LeavesEnemyWithHitPoints(-2);
yield return My.Hero.WithStrength(19).RollsHitOf(20).LeavesEnemyWithHitPoints(-4);
yield return My.Hero.WithStrength(20).RollsHitOf(20).LeavesEnemyWithHitPoints(-6);
}
}
private class My
{
private Character hero;
private int hitRoll;
public static My Hero { get { return new My(); } }
private My() { hero = new Character(); }
public My WithStrength(int strength){hero.Strength = strength;return this;}
public My RollsHitOf(int hitRoll) { this.hitRoll = hitRoll; return this; }
public TestCaseData LeavesEnemyWithHitPoints(int expectedHitPoints)
{
var testCaseData = new TestCaseData(hero, hitRoll)
{
HasExpectedResult = true,
ExpectedResult = expectedHitPoints,
TestName = $"Hero with Stength of {hero.Strength} rolling a {hitRoll} Should leave enemy with {expectedHitPoints} Hit points"
};
return testCaseData;
}
}
}
我所有处理关键命中的测试都失败了(最后 5 个测试)问题是我不确定我的数学是否正确。这是我的攻击方法:(请注意,我之前的所有测试目前都通过了)
public class Character
{
public string Name { get; set; }
public Alignment Alignment { get; set; }
public int ArmorClass { get; private set; }
public int HitPoints { get; private set; }
public bool IsDead { get { return HitPoints <= 0; } }
public Ability Strength { get; set; }
public Ability Dexterity { get; set; }
public Ability Constitution { get; set; }
public Ability Wisdom { get; set; }
public Ability Intelligence { get; set; }
public Ability Charisma { get; set; }
public Character()
{
ArmorClass = 10;
HitPoints = 5;
Strength = 10;
Dexterity = 10;
Constitution = 10;
Wisdom = 10;
Intelligence = 10;
Charisma = 10;
}
public bool Attack(Character enemy, int hitRoll)
{
var damage = 0;
var modifier = IsCritHit(hitRoll) ? Strength.Modifier * 2 : Strength.Modifier;
var isEnemyHit = IsCritHit(hitRoll) || (enemy.ArmorClass <= (hitRoll + modifier));
if (!isEnemyHit) return false;
damage = 1 + modifier;
if (IsCritHit(hitRoll)) damage *= 2;
enemy.TakeDamage(damage);
return true;
}
private static bool IsCritHit(int hitRoll)
{
return hitRoll == 20;
}
public void TakeDamage(int damage)
{
HitPoints-= damage;
}
}
public class Ability
{
public int Score { get; private set; }
public int Modifier { get; private set; }
private Ability(int score)
{
Score = score;
Modifier = (int)(Math.Floor((Score - 10) / 2.0));
}
public override string ToString()
{
return $"{Score} [{Modifier}]";
}
public static implicit operator int(Ability ability)
{
return ability.Score;
}
public static implicit operator Ability(int score)
{
return new Ability(score);
}
}
编辑
我忘记了 AC 和 HP 的魔法数字分别是 10 和 5。它们来自 Kata 的规范。
编辑 2.0
这是我 5 次失败测试中第一个的输出
Test Name: Hero with Stength of 12 [1] rolling a 20 Should leave enemy with 2 Hit points
Test FullName: EmptyProject.Tests.CharacterAbilityTests.Hero with Stength of 12 [1] rolling a 20 Should leave enemy with 2 Hit points
Test Source: D:\Users\Robert\Source\Repos\EverCraft-Kata\dotNet\src\EmptyProject.Tests\CharacterAbilityTests.cs : line 14
Test Outcome: Failed
Test Duration: 0:00:00.012
Result StackTrace:
at NUnit.Framework.Internal.Commands.TestMethodCommand.Execute(TestExecutionContext context)
at NUnit.Framework.Internal.Commands.TestActionCommand.Execute(TestExecutionContext context)
Result Message:
Expected: 2
But was: -1
编辑希望最终
我想我的意思是问它应该是 (baseDamage
+strengthModifier
) * 2,还是 (baseDamage
*2 ) + strengthModifier
?
最佳答案
您的 .LeavesEnemyWithHitPoints(2)
是错误的。应该是-1。
这段代码:
var damage = 0;
var modifier = IsCritHit(hitRoll) ? Strength.Modifier * 2 : Strength.Modifier;
var isEnemyHit = IsCritHit(hitRoll) || (enemy.ArmorClass <= (hitRoll + modifier));
if (!isEnemyHit) return false;
damage = 1 + modifier;
if (IsCritHit(hitRoll)) damage *= 2;
enemy.TakeDamage(damage);
当 Strength.Modifier
为 1 时,您的 modifier
计算在重击时产生 2。这意味着 damage = 1 + modifier
是 3。因为你掷出了重击,所以伤害加倍使你的总 damage
= 6。如果敌人的总 HP 是 5你打了他 6,他应该有 -1 HP。
我不知道这是否是正确的 DnD 计算(不记得了)
关于c# - 不确定如何在 DnD Kata 中添加强度修饰符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34864142/
我创建了一个用户可以添加测试的字段。这一切运行顺利我只希望当用户点击(添加另一个测试)然后上一个(添加另一个测试)删除并且这个显示在新字段中。 所有运行良好的唯一问题是点击(添加另一个字段)之前添加另
String[] option = {"Adlawan", "Angeles", "Arreza", "Benenoso", "Bermas", "Brebant
关闭。这个问题不符合Stack Overflow guidelines .它目前不接受答案。 这个问题似乎不是关于 a specific programming problem, a softwar
我正在努力将 jQuery 滚动功能添加到 nav-tab (Bootstrap 3)。我希望用户能够选择他们想要的选项卡,并在选项卡内容中有一个可以平滑滚动到 anchor 的链接。这是我的代码,可
我正在尝试在用户登录后再添加 2 个 ui 选项卡。首先,我尝试做一个之后。 $('#slideshow').tabs('remove', '4'); $("#slideshow ul li:last
我有一个包含选择元素的表单,我想通过选择添加和删除其中一些元素。这是html代码(这里也有jsfiddle http://jsfiddle.net/txhajy2w/):
正在写这个: view.backgroundColor = UIColor.white.withAlphaComponent(0.9) 等同于: view.backgroundColor = UICo
好的,如果其中有任何信息,我想将这些列添加到一起。所以说我有 账户 1 2 3 . 有 4 个帐户空间,但只有 3 个帐户。我如何创建 java 脚本来添加它。 最佳答案 Live Example H
我想知道是否有一种有效的预制算法来确定一组数字的和/差是否可以等于不同的数字。示例: 5、8、10、2,使用 + 或 - 等于 9。5 - 8 = -3 + 10 = 7 + 2 = 9 如果有一个预
我似乎有一个卡住的 git repo。它卡在所有基本的添加、提交命令上,git push 返回所有内容为最新的。 从其他帖子我已经完成了 git gc 和 git fsck/ 我认为基本的调试步骤是
我的 Oracle SQL 查询如下- Q1- select hca.account_number, hca.attribute3, SUM(rcl.extended_amou
我正在阅读 http://developer.apple.com/iphone/library/documentation/iPhone/Conceptual/iPhoneOSProgrammingG
我正在尝试添加一个“加载更多”按钮并限制下面的结果,这样投资组合页面中就不会同时加载 1000 个内容,如下所示:http://typesetdesign.com/portfolio/ 我对 PHP
我遇到这个问题,我添加了 8 个文本框,它工作正常,但是当我添加更多文本框(如 16 个文本框)时,它不会添加最后一个文本框。有人遇到过这个问题吗?提前致谢。 Live Link: JAVASCRIP
add/remove clone first row default not delete 添加/删除克隆第一行默认不删除&并获取正确的SrNo(例如:添加3行并在看到问题后删除SrNo.2)
我编码this ,但删除按钮不起作用。我在控制台中没有任何错误.. var counter = 0; var dataList = document.getElementById('materi
我有一个类似数组的对象: [1:数组[10]、2:数组[2]、3:数组[2]、4:数组[2]、5:数组[3]、6:数组[1]] 我正在尝试删除前两个元素,执行一些操作,然后将它们再次插入到同一位置。
使用的 Delphi 版本:2007 你好, 我有一个 Tecord 数组 TInfo = Record Name : String; Price : Integer; end; var Info
我使用了基本的 gridster 代码,然后我声明了通过按钮添加和删除小部件的函数它工作正常但是当我将调整大小功能添加到上面的代码中时,它都不起作用(我的意思是调整大小,添加和删除小部件) 我的js代
title 323 323 323 title 323 323 323 title 323 323 323 JS $(document).keydown(function(e){
我是一名优秀的程序员,十分优秀!