1. ホーム
  2. java

[解決済み] テスト

2022-01-28 04:02:17

質問内容

そこで、Nim風のJavaゲームを作ることになったのですが...ほとんど作ることに成功したのですが...ただ、2つほど迷っていることがあるのです。

質問1:プログラムはうまく実行され、一度は実行されるのですが、コードを一度通した後、プログラムが終了してしまいます・・・なぜそうなってしまうのか、教えてください(間違ったループを使用しているのでしょうか)。

質問2:なぜプログラムは常にコンピュータをいわゆる"Smart Mode?"になるように選択するのでしょうか。

どんなことでもご相談ください。ありがとうございます :D

以下は私のコードです。

import java.util.*;
public class GameOfNim
{
    public static void main (String [] args)
    {
        Scanner in = new Scanner (System.in);
        Random num = new Random ();
        int numberLeft = num.nextInt(101-10) + 10;
        int computerMode = num.nextInt(1);
        int subtraction = numberLeft;
        boolean turn = num.nextBoolean();

        System.out.println ("The number you start out with is: " + numberLeft);

        if (computerMode == 0)
        {
            System.out.println ("The computer is in smart mode");
        }
        if (computerMode == 1)
        {
            System.out.println ("The computer is in dumb mode");
        }

        while (numberLeft > 1)
        {
            if (turn == true)
            {
                System.out.println ("It is your turn...");
                System.out.printf ("Please enter the number you wish to take from the pile (Remember it has to be less than " + numberLeft/2 + "): ");
                subtraction = in.nextInt();
                numberLeft -=subtraction;
                System.out.println ("The number left is " + numberLeft);
                turn = false;
            }
            if (turn ==false)
            {
                System.out.println ("It is the computer's turn...");
                if (computerMode == 0)
                {  
                    numberLeft = smartComputer(numberLeft);
                    System.out.println ("The number left is " + numberLeft);
                }

                if (computerMode == 1)
                {
                    numberLeft -= num.nextInt(numberLeft/2);
                    System.out.println ("The number left is " + numberLeft);
                }
                turn = true;
                return;
            }
        }

        if (numberLeft <= 1)
        {
            if (turn = false)
            {
                System.out.println ("You Win!");
            }  
            else
            {
                System.out.println ("You're horrible...you lost to a computer.");
            }  
        }
    }

    public static int smartComputer (int num)
    {
        int power = 2;        
        while (power < num) 
        { 
            power *=2;
        }
        power /= 2;
        num = power-1;
        return num;
    }
}

解決方法は?

からの ドキュメント のRandomを使用しています。

0(包含)と指定された値(排他的)の間で一様に分布する擬似ランダムなint値を返します。

Exclusive"とは、次のような意味です。 nextInt(n) である可能性のある整数を返します。 n-1 しかし ない である n . nextInt(n) があります。 n 0を含むさまざまな結果が考えられます。

簡単な修正方法は、それを nextInt(2) 2つのモードがあるためです。