Nim Game - Pick a Winner

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 don’t know how to implement a way to indicate player 1 or player 2, who is the winner, after the size value (the number of remaining stones) reaches 0. Any help would be appreciated. In addition, when the sizeheap value reaches a negative number, it displays a “bad input”, but then any other number inserted after that also displays a “bad input”.

Thanks!

+4
source share
1 answer

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

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

Here's the critical part, fixed, streamlined, 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!"); } } } 

Additional tips:

  • You can simply use the new line \n instead of System.out.println() .
  • lessThanFour flag probably not needed
+2
source

Source: https://habr.com/ru/post/1447850/


All Articles