我正在尝试在java中创建一个棒球模拟游戏。我正在利用'pitches'的实例作为我系统的迭代。在此范围内,我有几种不同的结果可能性。命中,小姐(打击),犯规球(没有效果)。我创建了一个来自另一个类的玩家阵列,这些玩家可以阅读我设计的玩家的特定属性。我目前正在尝试使用的唯一属性是击球手的力量和他们的一致性。我使用随机数生成一定数量,并根据该值所在的位置确定它是球还是罢工。 “球”逻辑简单而有效;但是,我只接受击球手的球数。我坚持如何实现罢工概率(错过挥杆)的逻辑或关于球场罢工的命中。我用于播放器的构造函数如下:
Player a = new Player(false, false, true, 10, 20, 0.75, true, null);
你可以忽略false和true和null,只需要注意数字 第一个数字(10)表示速度,不相关。 第二个数字(20)表示功率。 第三个表示击球手的一致性。
如果这可能令人困惑或过于基本,我很抱歉,我只编写了一个多月的编程。非常感谢所有的帮助。目前唯一适合我的打印看起来有点像
Press 'p' to initiate pitches
p
Ball count is: (0,0)
Ball count is: (0,0)
Ball count is: (0,0)
Ball count is: (0,0)
Ball!
Ball count is: (1,0)
Ball count is: (1,0)
Ball!
Ball count is: (2,0)
Ball count is: (2,0)
Ball count is: (2,0)
Ball!
Ball count is: (3,0)
我不明白为什么这个节目只是识别球而不是描述什么是打印什么都没有,我认为这是一个犯规球(但它不打印我的陈述)
请帮忙,非常感谢你!
import java.util.Scanner;
public class Game {
public static void main(String[] args) {
System.out.println("Press 'p' to initiate pitches");
Scanner kb = new Scanner(System.in);
String s = kb.nextLine();
if(s.equalsIgnoreCase("p"))
{
int ball = 0;
int strike = 0;
//10 instances of pitches
for(int i = 0; i < 10; i++)
{
double number = Math.random();
if(number > 0.5)
{
ball++;
if(ball == 4)
{
System.out.println("Ball four, take your base");
break;
}
System.out.print("Ball!");
}
else if(strike() == true)
{
{
if(isMiss() == true)
{
System.out.print(" Strike!");
strike++;
}
else if(isFoul() == true)
{
System.out.println("Foul ball!");
}
}
if(strike == 3)
{
System.out.print(" Player struck out!");
break;
}
}
else
{
if(isHit() == true)
{
System.out.println("The ball was hit!");
System.out.println(isHit());
break;
}
}
System.out.println(" Ball count is: " + "(" + ball + "," + strike + ")");
}
}
}
public static boolean strike()
{
if(isMiss() == true)
{
return true;
}
else if(isFoul() == true)
{
return false;
}
else if(isHit() == true)
{
return true;
}
return false;
}
public static boolean isHit()
{
double probability = Math.random();
Player a = new Player(false, false, true, 10, 20, 0.75, true, null);
if(a.power > 5)
{
if(a.consistency > 0.5)
{
if(probability > 3 && probability < 6)
{
return false;
}
if(probability > 6 && probability < 9)
{
return false;
}
if(probability > 9 && probability < 12)
{
return true;
}
return true;
}
System.out.println("The ball was hit!");
}
return false;
}
public static boolean isMiss()
{
double probability = Math.random();
Player a = new Player(false, false, true, 10, 20, 0.75, true, null);
if(a.power > 5)
{
if(a.consistency > 0.5)
{
if(probability > 3 && probability < 6)
{
return true;
}
if(probability > 6 && probability < 9)
{
return false;
}
if(probability > 9 && probability < 12)
{
return false;
}
return false;
}
}
return false;
}
public static boolean isFoul()
{
double probability = Math.random();
Player a = new Player(false, false, true, 10, 20, 0.75, true, null);
if(a.power > 5)
{
if(a.consistency > 0.5)
{
if(probability > 3 && probability < 6)
{
return false;
}
if(probability > 6 && probability < 9)
{
return true;
}
if(probability > 9 && probability < 12)
{
return false;
}
}
}
return false;
}
答案 0 :(得分:0)
罢工:
if (Math.random() > consistency) { /* strike! */ }
你可能想要一个持续的犯规球机会(比如如果他们击球,他们有10%的机会犯规球:
else if (Math.random() < 0.1) { ... }
同样的力量,但可能乘以0.3(因为本垒打是罕见的):
if (Math.random() < power * 0.3) { ... }
请注意,要使这些工作正常,您的一致性和功效变量必须是小数。
例如,50%的一致性为0.5。 20%的一致性为0.2。类似地,1是最大功率量,0真的很弱。 介于0.5之间。
答案 1 :(得分:0)
我建议您使用调试器来逐步执行代码,因为有许多部分对我没有意义,我无法使用Player类运行您的代码(我无法弥补它,因为它没有没有意义;)
没有意义的代码部分是
double probability = Math.random();
所以概率是[0,1}之间的数字
if(probability > 3 && probability < 6) // always false.
if(probability > 6 && probability < 9) // always false
if(probability > 9 && probability < 12) // always false.
// prints the ball was hit but returns `false` to isHit
System.out.println("The ball was hit!");
}
return false;