奇怪的BASIC数学公式

Kly*_*ter 5 math obfuscation basic formula deobfuscation

我喜欢转换旧的BASIC游戏 - 我碰到了一个有这个奇怪公式的游戏.目前我在Pascal写作,但我可以用任何语言写.在通过代码搜索后,我无法找到这个var是否在使用,但仍然想知道BASIC当天使用的数学快捷方式是什么样的.

d1 = 1-(( 0.23 + random / 10 ) * (-(d <= 50 )))

d1是虚拟var,d= sub的深度

我将其分解为步骤,发现该部分(-(d <= 50))导致我的编译失败.

有人可以对它有所了解吗?

小智 4

-(d <= 50) 应该,据我所知(布尔值 -> int 转换),如果 d <= 50,则返回 -1;如果 d > 50,则返回 0。总之,如果 d > 50,乘法的右侧部分将相等为 0,因此 d1 将等于 1。您应该使用 else 或三元构造来编写它(下面类似于 C 的伪代码):

d1 = (d > 50) ? 1 : 1.23 + random / 10;
Run Code Online (Sandbox Code Playgroud)

逐步解释:

d1 = 1-(( 0.23 + random / 10 ) * (-(d <= 50 )))
Run Code Online (Sandbox Code Playgroud)

然后

if ( d <= 50 )
  d1 = 1-(( 0.23 + random / 10 ) * (-TRUE)))
else
  d1 = 1-(( 0.23 + random / 10 ) * (-FALSE)))
Run Code Online (Sandbox Code Playgroud)

然后

if ( d <= 50 )
  d1 = 1-(( 0.23 + random / 10 ) * (-1)))
else
  d1 = 1-(( 0.23 + random / 10 ) * (-0)))
Run Code Online (Sandbox Code Playgroud)

然后

if ( d <= 50 )
  d1 = 1 - (( 0.23 + random / 10 ) * -1))
else
  d1 = 1 - (( 0.23 + random / 10 ) * 0))
Run Code Online (Sandbox Code Playgroud)

然后

if ( d <= 50 )
  d1 = 1 - (-( 0.23 + random / 10 ))
else
  d1 = 1 - (0)
Run Code Online (Sandbox Code Playgroud)

然后

if ( d <= 50 )
  d1 = 1 + ( 0.23 + random / 10 );
else
  d1 = 1;
Run Code Online (Sandbox Code Playgroud)

然后,最后

d1 = (d > 50) ? 1 : 1.23 + random / 10;
Run Code Online (Sandbox Code Playgroud)