在龙与地下城中,几乎所有的事情都是由滚动的模具决定的。通常,如果滚动大于或等于指定值,则尝试执行任何您想做的操作都会成功,否则会失败。最常见的是,一个20边模具(又名d20)是用来滚动的.
其他时候,使用技能挑战系统。它类似于上面描述的简单的系统,但成功取决于运动员(S)是否成功,在失败一定次数之前,个人滚动一定次数。例如,这位球员(S)可能试图用有限数量的锁头在一扇门上撬开多个锁。单个成功的滚动表示成功地选择了其中的一个锁,单个失败的滚动表示断锁。总体上的成功意味着在打开所有锁签之前成功地打开所有的锁。
此外,某些辊可以是临界辊。在d20上,滚动1是一个关键的失败,导致整个挑战立即失败(在上面的例子中,球员(S)可能会意外地提醒后卫)。滚动一个20是一个关键的成功,结果立即成功的整个挑战(在上面的例子中,球员(S)可能会找到一组钥匙的锁,消除了挑选他们的需要)。在关键滚动的情况下,挑战立即结束,结果决定,无论以往的成功和失败的数目。
在这个挑战中,你会遇到困难,需要成功的次数,失败的次数。您必须模拟玩家尝试挑战,并输出结果。
3整数,表示单个滚动成功所必须满足或超过的值、挑战成功所需的成功次数以及挑战失败的次数。只要您指定要使用的顺序和格式,输入的顺序和格式就无关紧要。困难在1到20之间,包括在内,成功和失败的数目都在1到100之间。
每个d20滚动的结果(按顺序排列为整数),以及挑战的总体结果(一个真实性/falsey值)。格式并不重要,只要单个结果是有序的,总体结果要么出现在所有单个滚动之前,要么出现在所有单个滚动之后(例如,您不能在滚动的中间输出总体结果),并且指定您使用的输出格式,并一致使用它。
输入:
12 5 3 (difficulty successes failures)
输出:
15 (success, 1-0)
10 (failure, 1-1)
5 (failure, 1-2)
16 (success, 2-2)
12 (success, 3-2)
15 (success, 4-2)
19 (success, 5-2)
True (overall success)
输入:
15 2 3 (difficulty failures successes)
输出:
0 (overall failure)
15 (success, 1-0)
12 (failure, 1-1)
13 (failure, 1-2)
输入:
5 5 10 (successes failures difficulty)
输出:
11 (success, 1-0)
5 (failure, 1-1)
20 (critical success)
1 (overall success)
输入:
3 10 3 (failures difficulty successes)
输出:
12 (success, 1-0)
11 (success, 2-0)
1 (critical failure)
False (overall failure)
发布于 2015-12-16 01:54:53
谢谢Pietu1998保存的字节
from random import*
def g(a,b,c):
s,z=[],[c,b]
while z[0]*z[1]:d=randint(1,20);z[a<d]-=[1,z[a<d]][d in[1,20]];s+=[d]
return[z[0]]+s
很简单,也许可以得到更多的金牌,但是我们需要一些东西来解决这个问题。在网上试试。
发布于 2015-12-17 22:15:28
f=->(v,s,f){p(r=rand(20)+1)<2?f=0:r>19?s=0:r<v ?f-=1:s-=1while s*f>0
p s<1}
基本迭代解示例运行:
f[12, 5, 3]
可能产出:
11
17
8
14
7
false
您可以看到它在IDEONE 这里上运行。
发布于 2015-12-16 13:54:06
Sub P(d,s,f):k=1
Do While x<s And v<f:r=Int(20*Rnd()+1)
If r=20 Then x=s
If r=1 Then v=f
If r>=d Then: x=x+1: Else: v=v+1
Debug.Print r:Loop:If v>=f Then k=0
Debug.Print k:End Sub
示例输出
P 12,5,3
18
2
19
8
11
0
输出的最后一个数字将是0
表示False
,1
表示True
。每个卷用换行符隔开。这使用了构建在RNG rnd()
中的VBA,这是众所周知的不是那么随意,但这应该尽可能地满足需求。
Sub P(d,s,f)
k=1
Do While x<s And v<f 'Keep Rolling while Current Successes and Failures are less then the Maximum Allowed
r=Int(20*Rnd()+1) 'Creates a Randomish Number between 1 and 20
If r=20 Then x=s 'Checks for Crit Success
If r=1 Then v=f 'Checks for Crit Failure
If r>=d Then: x=x+1: Else: v=v+1 'Increments Current Success or Fails
Debug.Print r 'Prints (Could us MSGBOX, it is shorter)
Loop
If v>=f Then k=0 'Checks & Changes Total Outcome to False
Debug.Print k 'Prints (Could us MSGBOX, it is shorter)
End Sub
https://codegolf.stackexchange.com/questions/66707
复制相似问题