Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Nim game - specify winner

Tags:

java

import java.util.Scanner;
/**
 *@author Andy 
 *@verison 21.11.2012
 */
public class NimGame
{
public static void main (String[] args)
{
    System.out.println ("**********      Hello Welcome to the game Nim           *********");
    System.out.println ("               The game is relatively simple....        ");
    System.out.println ("               This is a game for two players.          "); 
    System.out.println ("            There is a heap containing 10 to 20 stones.");
    System.out.println ("           Players take turns to remove 1-4 stones     "); 
    System.out.println ("           The player who removes the last stone wins. ");
    System.out.println ("******************************************************************");

    Scanner scan = new Scanner (System.in);
    int heapSize = 15;
    int stones = 0;
    boolean nextInteger = false;
    boolean lessThanFour = false;
    String player1 = "Player 1";
    String player2 = "Player 2";
    String player = player1;

    System.out.println ("The number of stones currently in the heap is :- " + heapSize);
    System.out.println();

    while (heapSize > 0)
    {

        nextInteger = false;
        lessThanFour = false;
        System.out.println (player + ":" + "how many stones will you take from the heap?");
        System.out.println();
        while (nextInteger == false && lessThanFour == false)
        {

            if (scan.hasNextInt())
            {
                nextInteger = true;
                stones = scan.nextInt();

                if (stones <=4 && stones >0)
                {
                    System.out.println();
                    System.out.println ("You picked " + stones);
                    heapSize = (heapSize - stones);
                    if (heapSize >= 0)
                    {
                    System.out.println();
                    System.out.println ("There are " + heapSize + "stones left");  
                    System.out.println();
                    lessThanFour = true;
                    System.out.println();
                    if (player.equals(player1))
                    {
                        player = player2;
                    }
                    else

                    {
                        player = player1;
                    }



                }

                else 

                {
                    System.out.println ("Bad input, please try again");
                    nextInteger = false;
                    scan.nextLine();
                }
            }

            else 

            {
                System.out.println ("Bad input, please try again");
                scan.nextLine();
            }


        }
    }
}
}
}

I dunno how to implement a way to specify player 1 or player 2 being the winner once the sizeheap (number of stones left) reaches 0. Any help would be appreciated. Also when the sizeheap reaches a negative number, it will display 'bad input' but then any other number inserted after that also displays 'bad input.'

Thanks!

like image 264
user1554786 Avatar asked Nov 04 '22 10:11

user1554786


1 Answers

Basically, you just need to rewrite if (heapSize >= 0) so it displays a win message:

if (heapSize > 0) {...} else { ...win... }

Here's the critical part, fixed, streamlined a bit, and edited:

if (stones <= 4 && stones > 0) {
    System.out.println ("\nYou picked " + stones);
    heapSize = (heapSize - stones);

    if (heapSize > 0) {
        System.out.println ("\nThere are " + heapSize + " stones left\n\n");  

        // Could use a ternary operator here:
        // player = (player.equals(player1) ? player2 : player1);

        if (player.equals(player1)) {
            player = player2;
        }
        else {
            player = player1;
        }
    }
    else {
        if (player.equals(player1)) {
            System.out.println("Player 1 wins!");
        }
        else {
            System.out.println("Player 2 wins!");
        }       
    }
}

Further tips:

  • You can just use a newline \n instead of an System.out.println().
  • The lessThanFour flag is probably unnecessary
like image 197
Ben Avatar answered Nov 12 '22 16:11

Ben