/* * Jogo Nim * feito por Juliana M Destro * data: 14 Mar 2012 * versao inicial, usa xor pra encontrar a vitoria */ import java.io.*; class JuNim { static BufferedReader inEntrada = new BufferedReader(new InputStreamReader(System.in)); static String[] jogadores1 = {"Usuario","Skynet"}; static String[] jogadores2 = {"Skynet","Usuario"}; //Inicia o jogo perguntando quantas fileiras e quantos palitos static void nim() { int nFileira = readInt ("\n.: NIM - Vence quem pegar o ultimo palito! :. \n \nEntre com o numero de fileiras\n"); int[] game = new int[nFileira]; // preenche as fileiras de acordo com a vontade do usuario for (int i = 0; i < nFileira; i++) { game[i] = readInt ("Qual o numero de palitos na fileira " + (i + 1) + " ?\n"); } int jogada = 0; int soma = -1; int atual = 0; int jogInicial = 0; while (jogInicial < 1 || jogInicial > 2) { jogInicial = readInt ("Quem comeca jogando? \n1 : Usuario \n2 : Computador\nDigite 1 ou 2:\n"); } if (jogInicial == 1) { while (soma !=0) { imprimeJogo(game); atual = jogada %2; System.out.println("\n\nQuem joga agora eh " + jogadores1[atual] + "\n"); if (atual == 0) jogaUsuario(game); else jogaSkynet(game); soma = 0; for (int i = 0; i < nFileira ; i++ ) soma += game[i]; //verifica se ainda tem alguma coisa em game jogada++;}; } else { while (soma !=0) { imprimeJogo(game); atual = jogada %2; System.out.println("\n\nQuem joga agora eh " + jogadores2[atual] + "\n"); if (atual == 0) jogaSkynet(game); else jogaUsuario(game); soma = 0; for (int i = 0; i < nFileira ; i++ ) soma += game[i]; //verifica se ainda tem alguma coisa em game jogada++; } } imprimeJogo(game); //imprime versao final do jogo if (atual == 0) System.out.println("\nVoce venceu. Sorte de principiante...\n"); else System.out.println("\nSkynet vence! *dancinha da vitoria*"); } //Jogada do Usuario static void jogaUsuario(int[] game) { int fileira = readInt ("De qual fileira voce quer retirar palitos?\n"); while (fileira < 0 || fileira > game.length) { //garante que o usuario nao vai escolher uma fileira invalida System.out.println("Fileira invalida, tente novamente"); fileira = readInt ("De qual fileira voce quer retirar palitos?\n"); } int palitos = readInt ("Quantos palitos voce quer retirar?\n"); while (palitos <= 0 || palitos > game[fileira-1]) { //garante que o usuario nao vai tirar zero palitos (= pula a vez) ou mais palitos do que tem na fileira System.out.println("Jogada invalida, tente novamente"); palitos = readInt ("Quantos palitos voce quer retirar?\n"); } game[fileira - 1] -= palitos; } //Jogada da Skynet static void jogaSkynet(int[] game) { int tamanho = game.length; int xor = 0; for (int i = 0; i < tamanho ; i++) xor ^= game[i]; //calcula o xor de game int fileira = 0; // encontra o movimento que leva a xor == 0 e executa int[] vitoria = new int[tamanho]; for(int i=0; i