• 0
Sign in to follow this  
mariogottinari

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

Question

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()

 

Edited by mariogottinari

Share this post


Link to post
Share on other sites

6 answers to this question

Recommended Posts

  • 0

falta apenas duas coisas

acrescentar a função partida() para começar um jogo isolado, e fazer o reconhecimento do fim da partida

Share this post


Link to post
Share on other sites
  • 0
Guest

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

Share this post


Link to post
Share on other sites
  • 0
Guest

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

 

Share this post


Link to post
Share on other sites
  • 0
Guest

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

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Sign in to follow this