Ir para conteúdo
Fórum Script Brasil
  • 0

[ Jogo NiM ] alguém pode dar uma força


mariogottinari

Pergunta

Boa tarde Galera, estou encalhado nesta condição. Alguém poderia ajudar como solucionar os dois pontos abaixo?

Atualmente meu jogo esta em um loop e não esta calculando/apresentando a rodada em andamento.
Obrigado!
 
Enunciado:Você deverá escrever um programa na linguagem Python, versão 3, que permita a uma "vítima" jogar o NIM contra o computador. O computador, é claro, deverá seguir a estratégia vencedora descrita acima.
 
Estrategia: consiste em deixar sempre múltiplos de (m+1) peças ao jogador oponente
 

Condições:

    • Uma função computador_escolhe_jogada que recebe, como parâmetros, os números n e m descritos acima e devolve um inteiro correspondente à próxima jogada do computador de acordo com a estratégia vencedora.
    • Uma função usuario_escolhe_jogada que recebe os mesmos parâmetros, solicita que o jogador informe sua jogada e verifica se o valor informado é válido. Se o valor informado for válido, a função deve devolvê-lo; caso contrário, deve solicitar novamente ao usuário que informe uma jogada válida.
    • Uma função partida que não recebe nenhum parâmetro, solicita ao usuário que informe os valores de n e m e inicia o jogo, alternando entre jogadas do computador e do usuário (ou seja, chamadas às duas funções anteriores). A escolha da jogada inicial deve ser feita em função da estratégia vencedora, como dito anteriormente. A cada jogada, deve ser impresso na tela o estado atual do jogo, ou seja, quantas peças foram removidas na última jogada e quantas restam na mesa. Quando a última peça é removida, essa função imprime na tela a mensagem "O computador ganhou!" ou "Você ganhou!" conforme o caso
Pendente:
    • Necessário analisar o melhor de 3 e encerrar o programa
    • printar na tela, print("**** Rodada %s ****" % rodada) a cada rodada
def computador_escolhe_jogada(n, m):
		
		if (n <= 1):
			rodada = 1
			rodada = rodada + 1
			print(" ")
			print("O computador tirou %s peça." % m)
			print("Fim do jogo! O computador ganhou!")
			print(" ")
			print("**** Rodada %s ****" %  rodada)

		print(" ")
		
		com_joga = ((n )%(m + 1))

		if (com_joga == 0):
			n = n - m
			print("O computador tirou %s peça." % m)
			print("Agora restam %s peças no tabuleiro." % n)
			usuario_escolhe_jogada(n, m)
		else:
			n = n - 1
			print("O computador tirou uma peça.")
			print("Agora restam %s peças no tabuleiro." % n)
			usuario_escolhe_jogada(n, m)

	
def usuario_escolhe_jogada(n, m):
	

		print(" ")
		n_user = int(input("Quantas peças você vai tirar? "))
		print("Voce tirou %s peças." % n_user)

			
		if (n_user <= m):
			n_pecas = n - n_user
			print(" ")
			print("Agora restam apenas %s peças no tabuleiro." % n_pecas)
			n = n_pecas
			computador_escolhe_jogada(n, m)
		else:
			while (n_user > m):
				print("Oops! Jogada inválida! Tente de novo.")
				print(" ")
				n_user = int(input("Quantas peças você vai tirar? "))
				if (n_user <= m):
					computador_escolhe_jogada(n, m)
			

def partida():
		
		n = int(input("Quantas peças? "))
		m = int(input("Limite de peças por jogada? "))
		com_joga = ((n )%(m + 1))
		if (com_joga == 1):
			print(" ")
			print("Computador Começa!!")
			computador_escolhe_jogada(n, m)
		else:
			print(" ")
			print("Voce começa!")
			usuario_escolhe_jogada(n, m)

rodada = 1

print("Bem-vindo ao jogo do NIM! Escolha:")
print(" ")
print("1 - para jogar uma partida isolada ")
tipo_jogo = int(input("2 - para jogar um campeonato "))
print(" ")

if ( tipo_jogo == 1 ):
	print("Voce escolheu partida isolada!")
if ( tipo_jogo == 2):
	print("Voce escolheu um campeonato!")
	print(" ")
	print("**** Rodada %s ****" % rodada)
	print(" ")
	partida()

 

Editado por mariogottinari
Link para o comentário
Compartilhar em outros sites

6 respostass a esta questão

Posts Recomendados

  • 0

Amigo. Eu tinha feito esse jogo há alguns dias atrás e ontem andei implementando algumas coisas nele.

Mas se der uma olhada no código vai saber como "reduzir" o código de acordo com a sua necessidade

Segue o código todo do jogo:

#include "stdio.h"
#include "conio.h"
#include "windows.h"
#include "time.h"


int tecla();
void title();
void sair();
void menu();
int partida();
int usuarioEscolheJogada(int n, int m);
int computadorEscolheJogada(int n, int m);
int campeonato();



int tipoJogo = 0;


int tecla()
{
	int varTecla;

	while (1)
	{
		if (_kbhit())
		{
			varTecla = _getch();

			return varTecla;
		}
	}
}

void title()
{
	printf("\n\n\t   ===========================\n");
	printf("\t   BEM-VINDO AO JOGO DO NIN!!!");
	printf("\n");
	printf("\t   ===========================\n\n");
}

void sair()
{
	int c;
	int lugar = 0;
	system("cls");

	printf("\n\tVoce deseja jogar novamente?\n\n");
	printf("\n\t\t[  Sim  ]\n"
		"\t\t   não   \n\n\n");


	while (1)
	{
		if (_kbhit())
		{
			system("cls");
			printf("\n\tVoce deseja jogar novamente?\n\n");
			c = tecla();

			if (c == 80)  //apertou para baixo
			{
				lugar++;
				if (lugar > 1)
				{
					lugar = 0;
				}
			}
			if (c == 72)   //apertou para cima
			{
				lugar--;
				if (lugar < 0)
				{
					lugar = 1;
				}
			}
			if (c == 75)   //apertou para direita
			{
				lugar++;
				if (lugar > 1)
				{
					lugar = 0;
				}
			}
			if (c == 77)  //apertou para esquerda
			{
				lugar--;
				if (lugar < 0)
				{
					lugar = 1;
				}
			}
			if (c == 13)  //apertou [enter]
			{
				if (lugar == 0)
				{
					menu();
				}
				else if (lugar == 1)
				{
					system("cls");
					printf("\n\n\t     Voce saiu do jogo!!!\n\n\n\n\n");
					Sleep(2800);
					exit(0);
				}
			}

			if (lugar == 0)
			{
				printf("\n\t\t[  Sim  ]\n"
					"\t\t   não   \n\n\n");
			}
			if (lugar == 1)
			{
				printf("\n\t\t   Sim   \n"
					"\t\t[  não  ]\n\n\n");
			}
		}
	}
}

void menu()
{
	int c;
	int lugar = 0;
	
	system("title Jogo do NIN");

	//system("color 17");

	system("cls");

	title();
	
	printf("\n\t  [   Disputar uma partida   ]\n"
		     "\t     Disputar um campeonato\n"
			 "\t           Instrucoes         \n"
			 "\t              Sair         \n");

	while (1)
	{
		if (_kbhit())
		{
			system("cls");
			title();
			c = tecla();

			if (c == 80) // apertou para baixo
			{
				lugar++;
				if (lugar > 3)
				{
					lugar = 0;
				}
			}

			if (c == 72) // apertou para cima
			{
				lugar--;
				if (lugar < 0)
				{
					lugar = 3;
				}
			}

			if (c == 75) //apertou para direita
			{
				lugar++;
				if (lugar > 3)
				{
					lugar = 0;
				}
			}

			if (c == 77) //apertou para esquerda
			{
				lugar--;
				if (lugar < 0)
				{
					lugar = 3;
				}
			}

			if (c == 13) //apertou [enter]
			{
				if (lugar == 0)
				{
					printf("\n\tVOCE ESCOLHEU UMA PARTIDA ISOLADA!\n\n");
					tipoJogo = 0;
					Sleep(1500);
					system("cls");
					printf("\n\n\t==== PARTIDA INICIADA ====\n\n\n");
					partida();
				}

				else if (lugar == 1)
				{
					printf("\n\t   VOCE ESCOLHEU UM CAMPEONATO!\n\n");
					tipoJogo = 1;
					Sleep(1500);
					system("cls");
					campeonato();
				}
				else if (lugar == 2)
				{
					printf("\n\n\n\t         O jogo consiste em definir uma quantidade de pecas\n"
						"\t   para o tabuleiro e tambem definir um limite de pecas que\n"
						"\t   podem ser retiradas por jogada. O  vencedor  sera aquele\n"
						"\t   que retirar as ultimas pecas do tabuleiro.\n\n");
					
					printf("\n\t   ");
					system("pause");

					system("cls");

					menu();
				}
				else
				{
					system("cls");
					printf("\n\n\t     Voce saiu do jogo!!!\n\n\n\n\n");
					Sleep(2800);
					exit(0);
				}
			}

			if (lugar == 0)
			{
				printf("\n\t  [   Disputar uma partida   ]\n"
					"\t     Disputar um campeonato\n"
					"\t           Instrucoes         \n"
					"\t              Sair         \n");
			}

			if (lugar == 1)
			{
				printf("\n\t      Disputar uma partida   \n"
					"\t  [  Disputar um campeonato  ]\n"
					"\t           Instrucoes         \n"
					"\t              Sair         \n");
			}

			if (lugar == 2)
			{
				printf("\n\t      Disputar uma partida    \n"
					"\t     Disputar um campeonato   \n"
					"\t  [        Instrucoes        ]\n"
					"\t              Sair            \n");
			}

			if (lugar == 3)
			{
				printf("\n\t      Disputar uma partida    \n"
					"\t     Disputar um campeonato   \n"
					"\t           Instrucoes         \n"
					"\t  [           Sair           ]\n");
			}
		}
	}

}


int main()
{
	srand(time(NULL));
	
	menu();

	return 0;
}


int partida()
{
	char *limparBuffer, *c;
	int n, m;
	int jogada;
	int pecas = 0;

	while (pecas == 0)
	{
		printf("INFORME A QUANTIDADE DE PECAS: ");
		scanf("%d", &n);
		scanf("%c", &limparBuffer);
		
		printf("INFORME QUAL E O LIMITE DE PECAS POR JOGADA: ");
		scanf("%d", &m);
		scanf("%c", &limparBuffer);

		if (m >= n || m <= 0 || n <= 0)
		{
			printf("\nEscolha invalida! A quantidade de pecas deve ser maior do que o limite\n\n");
			pecas = 0;
		}
		else
		{
			break;
		}
	}

	int computadorJoga = 0;
	
	if (n % (m + 1) == 0)
	{
		computadorJoga = 0;
		printf("Voce comeca\n");
	}
	else
	{
		computadorJoga = 1;
		printf("Computador comeca\n");
	}

	while (n > 0)
	{
		if (!computadorJoga)
		{
			jogada = usuarioEscolheJogada(n, m);
			printf("Voce tirou %d pecas do tabuleiro\n", jogada);
			computadorJoga = 1;
		}
		else
		{
			jogada = computadorEscolheJogada(n, m);
			printf("\nUsing IA...\n\n");
			Sleep(1000);
			printf("Computador tirou %d pecas do tabuleiro\n", jogada);
			computadorJoga = 0;
		}
		
		n = n - jogada;

		if (!n)
		{
			break;
		}

		printf("RESTAM %d PECAS NO TABULEIRO\n", n);

	}

	if (!computadorJoga)
	{
		printf("\nComputador ganhou!\n\n");

		scanf("%c", &c);
		
		if (tipoJogo == 0)
		{
			printf("\n\t\t  FIM DE JOGO!\n\n");

			Sleep(3000);

			sair();
		}
		return 0;
	}
	else
	{
		printf("\nVoce ganhou!\n\n");

		scanf("%c", &c);
		
		if (tipoJogo == 0)
		{
			printf("\n\t\t  FIM DE JOGO!\n\n");

			Sleep(3000);

			sair();
		}
		return 1;
	}

}




int usuarioEscolheJogada(int n, int m)
{
	int jogada = 0;
	char *c;
	
	while (jogada == 0)
	{
		printf("Quantas pecas ira tirar?: ");
		scanf("%d", &jogada);
		scanf("%c", &c);

		if (jogada < 0 || jogada > m)
		{
			printf("Jogada invalida\n");
			jogada = 0;
		}
	}

	return jogada;
}





int computadorEscolheJogada(int n, int m)
{
	int quantia = rand() % m; 

	if (n <= m)
	{
		return n;
	}
	else if (quantia > 0)
	{
		return quantia;
	}

	return m;

}

int campeonato()
{
	char *c;
	int i, vencedor;
	int usuario = 0, computador = 0;

	for (i = 0; i < 3; i++)
	{
		system("cls");

		
		printf("\n\n\t==== RODADA %d ====\n\n\n", i + 1);
		

		vencedor = partida();

		if (vencedor)
		{
			usuario++;
		}
		else
		{
			computador++;
		}
	}

	system("cls");

	printf("\n\n\tPLACAR FINAL: Voce %d x %d Computador\n\n", usuario, computador);

	printf("\n\t\t  FIM DE JOGO!");

	Sleep(4000);

	sair();

	scanf("%c", &c);

}

 

Só uma correção. Para o computador ficar "imbatível" tem q mudar na função da jogada do computador. Seria assim:

int quantia = n % (m + 1);

Nesse caso a função citada fika assim:

int computadorEscolheJogada(int n, int m)
{
	int quantia = n % (m + 1);

	if (n <= m)
	{
		return n;
	}
	else if (quantia > 0)
	{
		return quantia;
	}

	return m;

}

 

Só uma correção. Para o computador ficar "imbatível" tem q mudar na função da jogada do computador. Seria assim:

int quantia = n % (m + 1);

Nesse caso a função citada fika assim:

int computadorEscolheJogada(int n, int m)
{
	int quantia = n % (m + 1);

	if (n <= m)
	{
		return n;
	}
	else if (quantia > 0)
	{
		return quantia;
	}

	return m;

}

 

Outra coisa... vai ser preciso adaptar o código para o Python, pois ele está na Linguagem C

Outra coisa... vai ser preciso adaptar o código para o Python, pois ele está na Linguagem C

Link para o comentário
Compartilhar em outros sites

  • 0

Mas... para facilitar a vida d vocês segue o código em Python. É importante entender bem o q está acontecendo no código senão não vão aprender nada. Fikar na base do copia e cola não leva ninguém a aprender a programar!

def campeonato():

    usuario = 0
    computador = 0
    
    rodada = 1

    for i in range(1, 4):

        print(" ")
        print("****** Rodada", i, "******")
        print(" ")

        vencedor = partida()
        
        if (vencedor == 1):
            usuario += 1
        else:
            computador += 1

            print("Placar final: Você", usuario, "X", computador, "Computador")



def usuario_escolhe_jogada(n, m):

    print("Sua vez!")

    jogada = 0

    while jogada == 0:
        jogada = int(input("Quantas peças irá tirar?: "))

        if jogada > n or jogada < 1 or jogada > m:
            jogada = 0

    return jogada




def computador_escolhe_jogada(n, m):

    print("Vez do computador")

    if n <= m:
        return n

    else:
        quantia = n % (m + 1)

        if quantia > 0:
            return quantia

        return m





def partida():

    n = int (input("Quantas peças?: "))
    m = int (input("Qual o limite de peças por jogada?: "))

    is_computer_turn = False

    if n % (m + 1) == 0:
        is_computer_turn = False
        print("Você começa")
    elif n % (m + 1) != 0:
        is_computer_turn = True
        print("Computador começa")
             
    
    while n > 0:
        
        if (is_computer_turn):
            jogada = computador_escolhe_jogada(n, m)
            is_computer_turn = False
            print("Computador tirou", jogada, "peças")
        else:
            jogada = usuario_escolhe_jogada(n, m)
            is_computer_turn = True
            print("Você tirou", jogada,"peças")
                
        n = n - jogada
            
        print("Restam apenas", n,"peça(s) no tabuleiro")

    
    if is_computer_turn:
        print("Você ganhou!")
        return 1
    else:
        print("Computador ganhou!")
        return 0




tipo_jogo = 0

print("Bem Vindo ao Jogo NIN! Escolha: ")
print(" ")
print("1 = Para jogar uma partida")
print("2 = Para jogar um campeonato")

while tipo_jogo == 0:

    tipo_jogo = int(input("Sua opçao: "))

    if tipo_jogo == 1:
        print("Você escolheu uma partida!")
        partida()
        break
    elif tipo_jogo == 2:
        print("Você escolheu um campeonato!")
        campeonato()
        break
    else:
        print("Opção inválida")
        tipo_jogo = 0

 

Link para o comentário
Compartilhar em outros sites

  • 0

Peço desde já desculpas por ter postado o código do jogo em C. Me passou despercebida a questão de que era um jogo para o Python.

Inclusive sei e fiz esse curso a que vocês estão se referindo. hehe

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152k
    • Posts
      651,8k
×
×
  • Criar Novo...