Jogo de truco programado em C++ para Windows para a matéria de Programação e Desenvolvimento de Software II pelos alunos Giovanni, Guilherme, Henrique e Vítor do curso de Engenharia de Sistemas da UFMG.
O jogo foi programado para ter o prompt de comando, ou o Windows PowerShell como sua HMI(Human Machine Interface. O jogo é construído com base nas regras do truco mineiro, sendo este sempre de 4 jogadores podendo ser:
-
Um humano e três bots
-
Dois humanos ,no mesmo time, e dois bots.
-
Dois humanos, em times diferentes, e dois bots.
O truco mineiro utiliza um baralho para jogo sem as cartas oito, nove, dez e coringa, o que totaliza 40 cartas para o jogo. As quatro cartas de maior valor no truco mineiro se chamam manilhas e são, nessa ordem:
- Quatro de paus, conhecida como zap
- Sete de copas
- Ás de Espadas, conhecida como espadilha.
- Sete de Ouros
Para as outras cartas a relação de valor é a seguinte:
- 3 todos os naipes
- 2 todos os naipes
- ÁS todos os naipes, exceto espada que é manilha
- K todos os naipes
- J todos os naipes
- Q todos os naipes
- 7 somente paus e espada
- 6 todos os naipes
- 5 todos os naipes
- 4 todos os naipes, exceto paus que é o zap
No início da partida as cartas são embaralhadas e logo após isso cada jogador recebe três cartas que compôem sua mão. Em seguida alguém joga uma carta. Depois que um jogador deposita uma carta na mes seu adversário deve faze-lo até que todos tenham feito, após isso a rodada é finalizada. O jogador ou dupla que jogou a carta de maior valor ganha a rodada. A dupla ou jogador que ganhar duas rodadas leva a partida e recebe dois pontos.
Após o fim de uma partida uma nova é iniciada e esse processo se repete até que alguém junto um total de 12 pontos. Quando alguém soma 12 pontos este jogador vence o jogo e todos tem os pontos zerados.
A cada dois jogos ganhos por alguém, marca-se uma cada. Isso faz cm que zere-se todos os pontos do jogo.
Quanto duas cartas são de mesmo valor ocorre empate, caso aconteça na primeira rodada cada jogador deve mostrar a primeira carta que possui, a de maior valor ganha. Caso as duas tenham o mesmo valor os jogadores devem mostrar a terceira carta que tem em mãos.Quando o empate ocorre após a primeira rodada ganha quem ganhou a primeira rodada.
Ao pedir truco o jogador está pedindo para que o valor de pontos da partida suba de dois para quatro. O oponente tem as seguintes opções aceitar ou correr. Caso aceite a partida começa a valer 4 pontos, caso decida correr perde a partida automaticamente. O oponente têm a opção ainda de pedir para subir mais ainda o valor da partida pedindo seis, o que aumenta o valor da partida para oito pontos. Quando o jogador corre no seis ele perde a partida que estava valendo 4 pontos. Ele tem como opção oedir o nove que sobe o valor da partida para dez.A lógica se repete com o doze que sobe o valor do jogo para doze pontos.
De forma a garantir um código mais limpo e versátil criamos nosso jogo com Orientação a Objetos, utilizando tanto classes da Standart Library do C++ (STL), quanto classes criadas por nós. As classes criadas por nós foram implementadas em arquivos diferentes do main sendo cada classe implementada em seu própio .h.
É necessário baixar todos os arquivos presentes nesse repositório em uma mesma pasta e fazer o seguinte comando no cmd ou terminal utilizado (ex Powershell):
g++ truco.cpp
Tad criado para armazenar os dados que compôem uma carta sendo eles seu valor e seu naipe.
É o construtor, recebe um valor e um naipe como parãmetros e cria um card usando-os.
Recebe: Int, String
Retorna: Nada
Retorna o naipe da carta.
Recebe: Nada
Retorna: String
Retorna o valor da carta
Recebe: Nada
Retorna: Int
Retorna qual a carta em questão no formato:"nome" de "naipe".
Recebe: Nada
Retorna: String
Retorna o conteúdo da variável nome
Recebe: Nada
Retorna: String
Retorna o valor guardado na variável número.
Recebe: Nada
Retorna: Char
Retorna o valor na variável naipe:
Recebe: Nada
Retorna: Char
Retorna true se as cartas forem de pontuação equivalente. Utiliza o operator>.
Recebe: Const Card&
Retorna: bool
Retorna verdadeiro se a carta em questão for maior em pontuação que a carta passada como parâmetro, leva em consideração manilhas.
Recebe: Const Card&
Retorna: bool
Armazena um vector de cards que compôem o baralho da partida.
Define a distribuição probabilística para o embaralhamento do vector que contém as cartas.
Recebe: Int;
Retorna: Int;
Pega os doze primeiros cards do vector Deck e os distribui em quatro vectors para servirem de mãos para os players.
Recebe: Vector
Retorna: Nada
Embaralha o vector de cards em função da distribuição representada por myrandom. Logo após chama a função create_hand.
Recebe: Vector
Retorna: Nada
É o construtor do deck que gera um vector de cards em ordem e logo depois utiliza a função shuflle para embaralha-las.
Recebe: Nada
Retorna: Nada
Aramzena os dados do jogador como sua mão e o número de rodadas ganhas
Soma mais um inteiro i a variavel pontos do player.
Recebe: Int
Retorna: Nada
Retorna o número de pontos do player.
Recebe: Nada
Retorna: Int
Soma um ao número de quedas ganhas pelo jogador.
Recebe: Nada
Retorna: Nada
Retorna o número de quedas ganhas pelo player.
Recebe: Nada
Retorna: Nada
Método virtual, restorna um espaço em branco
Recebe: Nada
Retorna: String
Retorna o card referente a posição i escolhida do vetor.
Recebe: Int
Retorna: Card
Método virual. Não retorna nada.
Recebe: Nada
Retorna Nada
Retorna o card na posição zero do vetor da mão do jogador
Recebe: Int
Retorna: Nada
Retorna o valor da variável is_bot.
Recebe: Nada
Retorna: Bool
Método virtual, retorna 0.
Recebe: Nada
Retorna: Int
Método virtual, retorna 0.
Recebe: Nada
Retorna: Int
Classe derivada de player, possui funções para tomada de decisão durante o jogo
É o contrutor da classe human, armazena o nome esolhido pelo jogador na variável id e armazena a mão do jogador no vector de cards que compôem a mão do jogador.
Recebe: String, Deck
Retorna: Nada
Joga a carta selecionada pelo jogador retirando-a da mão do mesmo.
Recebe: Int
Retorna: Card
Permite que o jogador peça truco.
Recebe: Bool
Retorna:Int
Permite que o jogador aceite ou recuse o pedido de truco que foi feito por outro player.
Recebe: Bool
Retorna: Int
Permite que o jogador desista da partida, encerrando-a.
Recebe: Bool
Retorna Nada
Retorna a id do jogador, O nome escolhido por ele no início do jogo.
Recebe:Nada
Retorna:String
Atualize a mão do jogador, com suas novas cartas e zera suas quedas.
Recebe: Deck
Retorna: Nada
Classe derivada de player, possui funções que definem o comportamento do bot, que jogará contra ou com o player humano, ao longo do jogo.
É o contrutor da classe bot, armazena o número referente ao bot na variável id e armazena a mão no vector de cards que compôem a mão do jogador.
Recebe: Deck
Retorna: Nada
Seleciona randômicamente a carta a ser jogada pelo bot retirando-a da mão do mesmo e a levando ao Round. Recebe:Nada
Retorna: Card
Decide randômicamente se o bot pedirá troco.
Recebe:Nada
Retorna:Int
Decide randômicamente se o bot aceita ou não o pedido de truco. Recebe: Nada
Retorna: Int
Decide randômicamente se o bot desiste do jogo.
Recebe: Round
Retorna Nada
Retorna "Bot" + id.
Recebe:Nada
Retorna:String
Retorna a id do bot. O seu número de crição.
Recebe:Nada
Retorna: Int
Retorna o tamanho da mão do jogador.
Recebe: Retorna
Retorna: Int
Armazena todas as informações que definem uma rodada de um jogo de truco e os metódos para permitir que o fluxo de jogo ocorra.
È o construtor de Round, gera uma nova rodada definindo a ordem de início do jogo e quem sãos os jogadores
Recebe: Int, Vector<player * > *
Retorna: Nada
Roda a sequência de passos e executa as operações corretas para que se jogue uma rodada de truco.
Recebe: Nada
Retorna: Nada
Apaga o vector mesa excluindo os cards jogados naquela rodada.
Recebe: Nada
Retorna: Nada
Retorna o vector mesa.
Recebe: Nada
Retorna: Vector
Faz a sequência de avaliçôes necessárias para que se defina o número de pontos que valem a partida agora.
Recebe: Int
Retorna: Nada
Roda a sequência de passos e executa as operações corretas para que se jogue uma queda de truco.
Recebe: Nada
Retorna: Nada
Executa o papel de front-end do código contendo todas as funcionalidades de HMC (Human Machine Communication) do programa.
É o construtor de menu.Gera a tela inicial do jogo.
Recebe: Nada
Retorna: Nada
Captura o número de jogadores que o jogo terá e retorna quantos são bots e quantos são humanos.
Recebe: Nada
Retorna: Int, Int.
Apaga tudo que está na tela usando o comando CLEAR do windows.
Recebe: Nada
Retorna: Nada
Desenha a tela do jogo com as informações necessárias para que se entenda o que está acontecendo.
Recebe: Vector , int
Retorna: Nada
Por manipular as cartas do jogo.
Atuliaza a mão de todos os jogadores com novas cartas quando chamada.
Recebe: Deck
Retorna: Nada
-
Um jovem com hábito de jogar truco usa o jogo para melhorar suas habilidades.
-
Uma pessoa que se encontra esperando a hora de sair usa o jogo para sua distração.
-
Um jogador semi-profissional usa a aplicação para praticar suas habilidades no jogo.
-
Um grupo de amigos usa o software para diversão em grupo.
-
Uma pessoa em um trajeto demorado usa o truco digital para passar o tempo
-
Um estudante usa o jogo como distração durante uma aula entediante.