2017-09-18 39 views
1

我正在创建一个Battleship Console应用程序。 我希望系统能够随机挑选重型攻击或轻微攻击,这样玩家有机会获胜,系统也是如此。这是我的代码。如何随机化两个功能的结果

玩家和敌人的健康都被设置为“30”

public void eHeavyAttack() 
    { 
     Console.Clear(); 
     Random r = new Random(); 
     int rInt = r.Next(1, 7); 
     Player_Health = Player_Health - rInt; 
     Console.WriteLine("The enemy has dealt " + rInt + " damage!"); 
     Console.WriteLine("Your health is now at " + Player_Health + " health!"); 
     Console.ReadKey(); 
    } 

    public void eMinorAttack() 
    { 
     Console.Clear(); 
     Random r = new Random(); 
     int rInt = r.Next(0, 4); 
     Player_Health = Player_Health - rInt; 
     Console.WriteLine("The enemy has dealt " + rInt + " damage!"); 
     Console.WriteLine("Your health is now at " + Player_Health + " health!"); 

    } 
+1

此代码的问题是什么? –

+0

没有问题我只想知道是否有办法让系统随机选择其中一个。 –

+0

我注意到你现有的代码是交叉关注点:你的逻辑改变了玩家状态('Player_Health')也直接写入控制台输出 - 并且使用'Console.Clear'改变了'Console'全局状态 - 这使得它很难推理你的功能。尽量减少副作用。这意味着您的应用程序代码将很容易移植到其他环境中,例如网络应用程序或游戏控制台。 – Dai

回答

3

可以使用Random类为。

首先,创建和初始化实例:

if (rnd.Next(2) == 1) { 
    eMinorAttack(); 
} else { 
    eHeavyAttack(); 
} 

如果你想偏向于两个一个可能性:

Random rnd = new Random(); 

根据以下两种方法之一在调用Next然后调用攻击类型,产生一个更大的随机数,并以所需的百分比概率对照某个边界进行检查。例如,如果您希望五次攻击中的大约两次很重,请更改上面的代码,如下所示:

if (rnd.Next(5) < 3) { 
    eMinorAttack(); 
} else { 
    eHeavyAttack(); 
}