2

javaで野球シミュレーションゲームを作ろうとしています。システムの反復として「ピッチ」のインスタンスを利用しています。この中で、結果にはいくつかの異なる可能性があります。ヒット、ミス(ストライク)、ファウルボール(ノーエフェクト)。私が設計したプレーヤーの特定の属性を読み取る別のクラスからプレーヤーの配列を作成しました。私が現在活用しようとしている唯一の属性は、打者のパワーと一貫性です。乱数を使用して特定のものを生成し、その値がどこにあるかに応じて、それがボールかストライクかを決定します。「ボール」ロジックはシンプルで効果的に機能します。ただし、打者のボール数しか受け取っていません。私' m は、ストライク (ミス スイング) またはストライクであるピッチに関してヒットの確率のロジックを実装する方法に固執しました。プレーヤーに使用しているコンストラクターは次のようになります

Player a = new Player(false, false, true, 10, 20, 0.75, true, null); 

false と true と null は無視できます。最初の数字 (10) が速度を示していることに注意してください。関連性はありません。2 番目の数字 (20) は電力を示します。3つ目は、打者の一貫性を示します。

これが紛らわしかったり初歩的すぎたりするかもしれないことをお詫びします。私はプログラミングを始めて 1 か月ちょっとしか経っていません。すべての助けをいただければ幸いです。現在、私のために印刷する唯一のものは少し似ています

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;
}
4

2 に答える 2

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;
于 2012-11-08T09:53:21.900 に答える
0

For strikes:

if (Math.random() > consistency) { /* strike! */ }

You might want a constant foul ball chance (like if they hit the ball, they have a 10% chance of foul ball:

else if (Math.random() < 0.1) { ... }

And same for power, but maybe multiply it by 0.3 (since home runs are rare):

if (Math.random() < power * 0.3) { ... }

Note that for these to work, your consistency and power variables have to be decimals.

For example, 50% consistency would be 0.5. 20% consistency would be 0.2. Similarly, 1 is the maximum amount of power and 0 is really weak. 0.5 would be in between.

于 2012-11-08T09:51:19.527 に答える