Enunciado do projecto de programação - Entrega Intermédia aqui.
Código exemplo para a interface gráfica disponível aqui - versão 14/03/2016.

Todos os projectos intermédios entregues devem compilar em Linux usando o seguinte comando: 

gcc BlackJackGUI.c -g -I/usr/local/include -Wall -pedantic -std=c99 -L/usr/local/lib -lm -lSDL2 -lSDL2_ttf -lSDL2_image -o blackjack

Nota: o local dos ficheiros include e das bibliotecas poderá variar conforme a versão do Linux usada (fazer "sdl2-config --cflags --libs" para descobrir os locais).

-------------

Enunciado do projecto de programação - Entrega final aqui (actualizado em 27/05/2016). 

Errata:
Secção 8.1, 1bullet, fase 2: Remoção de um jogador da mesa sempre que este fique sem dinheiro inserção de um jogador sempre que o utilizador o sinalizar (opção A) 
Secção 2: (tecla da seta cima) e (tecla da seta baixo).

Todos os projectos intermédios entregues devem compilar em Linux usando o seguinte comando: gcc *.c -g -I/usr/local/include -Wall -pedantic -std=c99 -L/usr/local/lib -lm -lSDL2 -lSDL2_ttf -lSDL2_image -o blackjack

Critérios de avaliação:
Fase 1: 12 valores (valor max.)
Fase 2: +8 valores (valor max.)
Bonus 1: +0.75 valores quando cada jogador possui uma pilha/fila de cartas (valor max.)
Bonus 2: +0.75 valores quando implementam correctamente a estratégia HI-LO. (valor max.)
O Bonus 2 apenas pode ser recebido se tiverem as funcionalidades da fase 1,2 e Bonus 1, correctamente implementadas.

Frequently Asked Questions


Existem ficheiros de configuração para testar o nosso programa ? Se sim, quais são ?
Ficheiro 1, Ficheiro 2 e Ficheiro 3

No ficheiro de configuração, os valores em cada linha que identifica o jogador estão separados por um caracter. Qual é ?
Estão separados pelo caracter '-' com o valor de 45.

Neste caso, não é possível usar o sscanf para separar os vários valores. Que função posso usar então ?
Usa a função strtok, a documentação está disponível aqui: http://www.cplusplus.com/reference/cstring/strtok/

Quantas listas vão ser necessárias ?
Uma lista para os jogadores, em que cada um jogador tem uma pilha(implementado em forma de lista) para as cartas. Também é necessário uma lista para o mega-baralho (cartas a distribuir) e uma pilha para as cartas da casa. 

Posso usar uma fila/lista em vez de uma pilha para representar as cartas que a casa e os jogadores recebem ?
Sim !

Posso usar vectores e matrizes 2D criados de uma forma estática ?
Não !

Como é que se pode efectuar o baralhar cartas numa lista ?
O baralhar cartas deve ser realizado removendo cartas de uma lista e respeitando sempre o algoritmo de Fisher-Yates (método original).

Na estratégia delineada na Figura 1, quando um jogador EA receber dois Ases, qual é a acção que se deve fazer ?
Podem escolher uma ação apropriada, por exemplo sempre hit. 

Quando é que pode ser escrito o ficheiro de estatísticas ?
Apenas quando o utilizador carregar no quit, após uma ronda acabar.

Como é que posso verificar se o meu programa libertou toda a memória alocada ?
valgrind --leak-check=yes myprog arg1 arg2

O Surrender conta como uma vitória, uma derrota ou um empate ?
Derrota !

O que significa Ds, Dh e Rh ?
Dh => Double se permitido, caso contrário hit
Ds => Double se permitido, caso contrário stand
Rh => Surrender se permitido, caso contrário hit

Como é que o programa vai ser chamado ?
Por exemplo: ./blackjack ficheiro_config_jogo.txt ficheiro_config_EAs.txt