Blackjack II - Autenticação · Note-se que o jogador EA não pode aceder ao conjunto de cartas...

9
João Ascenso, version 1.0, 25/04/2016 1 Programação 2015/2016 Mestrado em Engenharia Electrotécnica e de Computadores (MEEC) Blackjack II Projeto de Programação – Entrega Final 1 Introdução O objetivo deste projeto é continuar o desenvolvimento do jogo de cartas blackjack mas desta vez utilizando também jogadores que não são humanos, isto é entidades artificiais para as quais é necessário programar a sua estratégia de jogo. Quanto mais eficiente for a estratégia de jogo da entidade artificial (EA) que vai jogar contra a casa maior é a probabilidade do jogador EA vencer o jogo do blackjack e ter mais lucro. Neste documento não vão ser detalhadas nenhumas regras do jogo blackjack, nem da forma como se calcula a pontuação ou o valor do dinheiro. Estas regras estão no enunciado do projeto – entrega intermédia. 2 Funcionamento O funcionamento do programa blackjack pode ser sumarizado da seguinte forma: Leitura dos ficheiros de configuração, ver Secção 5.

Transcript of Blackjack II - Autenticação · Note-se que o jogador EA não pode aceder ao conjunto de cartas...

JoãoAscenso,version1.0,25/04/2016 1

Programação2015/2016

MestradoemEngenhariaElectrotécnicaede

Computadores(MEEC)

BlackjackII

ProjetodeProgramaçao–EntregaFinal

1 Introdução

Oobjetivodesteprojetoécontinuarodesenvolvimentodojogodecartasblackjackmasdestavezutilizandotambémjogadoresquenãosãohumanos,istoéentidadesartificiaisparaasquaisénecessárioprogramarasuaestratégiadejogo.Quantomaiseficienteforaestratégiadejogodaentidadeartificial(EA)quevaijogarcontraacasamaioréaprobabilidadedojogadorEAvencerojogodoblackjacketermaislucro.

Nestedocumentonãovãoserdetalhadasnenhumasregrasdojogoblackjack,nemdaformacomosecalculaapontuaçãoouovalordodinheiro.Estasregrasestãonoenunciadodoprojeto–entregaintermédia.

2 Funcionamento

Ofuncionamentodoprogramablackjackpodesersumarizadodaseguinteforma:

• Leituradosficheirosdeconfiguração,verSecção5.

JoãoAscenso,version1.0,25/04/2016 2

• Talcomonaentregaintermédia,ojogadorpoderealizar4opções:o Hit–TeclaH:Recebeumacarta.o Stand–TeclaS:Passaojogoparaopróximojogador.o New–TeclaN:Novarondadojogo.o Quit–TeclaQ:Saidojogoeescreveoficheirodeestatísticas.

• Alémdasquatroopçõesacimadefinidas,devemacrescentarasseguintesopções:o Double – Tecla D: Duplica o valor da aposta, recebe exatamente mais uma carta e

compromete-seafazerstand,istoé,passaocontroloparaopróximojogador.o Surrender –TeclaR:Desistedo jogoea casa ficaapenascommetadedovalordaaposta

enquantoojogadorficacomoresto.o Bet– Tecla B: Esta opçãopode ser usada apenas quandoum jogo terminar (antes de ser

selecionada a opção N) sendo necessário ler do stdin o nome do jogador para o qual seaplicaoaumento/diminuiçãodaapostaeonovovalordaaposta.

• Quandoocorrerblackjack,ocontrolodevepassarautomaticamenteparaopróximojogador.• Asopçõesdoubleesurrenderapenaspodemserseleccionadaslogoapósteremsidodistribuídasas

cartas à casa e ao jogador. Note-se, assim, que não é possível escolher essas opções após umjogadorfazerhit.

• Caso não tenha sido escolhido double ou surrender, um jogador humano pode realizar váriospedidos de hit até que realize um pedido de stand usando sempre o teclado. Naturalmente, seexceder21pontosdeveocorrerbusteocontrolopassaparaopróximojogador.

• UmjogadorEA,talcomoumjogadorhumano,podefazerhit,stand,doubleousurrenderapartirdeumconjuntoderegraslidasdeumficheirodeconfiguração.Semprequefizerumaescolhadeveseradicionadoumatrasode1s.Estevalordeatrasopodesermodificadoatravésdasteclasdassetas,podendoseraumentado(tecladaseta②)oudiminuído(tecladaseta④).

• Nofinaldecadajogoénecessárioatualizarovalormonetáriocomquecadajogadorfica.Podemserusadosvalorescomvírgulaflutuantecomapenasumacasadecimal.

• Ateclanovojogoapenastemefeitoquandotodasascartasestiveremdistribuídas.

• Nofinaldecadarondapodeserinseridoumnovojogadordamesanumaposiçãolivre,escolhendoateclaAeselecionandoo lugarondesepretendeadicionaro jogadoratravésdorato.Osdadosdonovojogadordevemserlidosatravésdostdin.

• Quandoumjogador(sejaEAouhumano)nãotivermaisdinheiroparaapostardeveserremovidodamesa.

• Oprograma sópode ser terminadono final de cada rondado jogopressionandoa tecla q.Nestasituaçãooficheirodeestatísticasdeveserescrito.Esteficheirodeveincluirestatísticasdejogadoresquetenhamsidoremovidosdamesaporqualquermotivo.

Ocomportamentodacasaé igualaoqueestavadefinidonaentrega intermédia.Noentanto,acasadeveefectuarstandsemprequetenhamaisdoque16pontos,mesmoquetenhaumÀsnasuamão.Quandonãohouver mais cartas do baralho para distribuir devem ser carregados o mesmo número de baralhosinicialmente lidos do stdin. Em nenhuma situação podem carregar novos baralhos sem que as cartas adistribuirtenhamsidoesgotadas.

JoãoAscenso,version1.0,25/04/2016 3

O jogo deve funcionar em qualquer uma das seguintes situações: 1) só com jogadores EA; 2) só comjogadoreshumanos;e3)comjogadoresEAehumanos.

3 Entidadesartificiais

Asentidadesartificiaispretendemsimularumjogadorperitoemblackjack.UmaestratégiadejogoeficienteaumentaaprobabilidadedojogadorEAganharojogodoblackjack, istoé,deganharmaisdinheiroàcasa.Note-sequeo jogadorEAnãopodeacederaoconjuntodecartaspordistribuirnemsaberacartadacasaqueestácomafacevoltadaparabaixo.Resumindo,ojogadorEAdeveimplementaraestratégiadelineadanaFigura1.

Figura1:Regrasblackjackparaaimplementaçãodeumaestratégiaganhadora.

NaFigura1,Hcorrespondeahit,Scorrespondeastand,Dh/DscorrespondeadoubleeRhcorrespondeasurrender. As colunas correspondem ao valor da carta a descoberto da casa (dealer) e as linhascorrespondemaovaloracumuladodasduascartasqueojogadorEApossui.ComopodeobservarnaFigura1,existemduastabelas,umaparaocasodenenhumacartadojogadorEAserumÁs(hard)eoutraparaocasodeumaoumaiscartasseremumÁs(soft).

Implementaçãoopcional

UmjogadorEAtambémpodeusarumaestratégiadecontarcartaseassimganharvantagememrelaçãoaoutrosjogadores.AestratégiadecontagemmaispopularéaestratégiaHi-Loqueconsisteemcontarcadacartaquesejadistribuídaatribuindoumvalorparacadatipodecartadistribuído:

• Ás,Rei,Dama,Valetee10valem-1

• 7,8e9valem0• 2,3,4,5e6valem+1

JoãoAscenso,version1.0,25/04/2016 4

Naturalmente,cartascombaixovalordevemvalermais,umavezqueéprovávelqueaseguirvenhamcartascom elevado valor (por exemplo Ás) e cartas com alto valor devem valor menos, uma vez que é maisprovávelqueaseguirvenhamcartasdemenorvalor.

Àmedidaqueas cartas sãodistribuídas énecessário actualizar a contagemdas cartas (valor cumulativo),somando ou subtraindo de acordo com o valor atribuído à carta distribuída. Sempre que for necessárioefetuarumadecisão(istoé,decidirovalordaaposta)énecessáriodividiressevaloracumuladopelonúmerodebaralhosaindanãodistribuídos.Quantomaior foressevalor,maiselevadadeveseraapostaequantomenor foressevalor,maisbaixadeve seraaposta. Tipicamente,por cadavalorde+1o jogadorEAdeveduplicarovalordaapostaconsideradamínima(lidadoficheirodeconfiguração),istoé,seaapostamínimaforN,paravaloresde+1,+2,+3,+4,+5,aapostadeveser2N,4N,8N,10Ne12N.OusodestaestratégiavaiseravaliadocomoprogramaafuncionarapenascomjogadoresEA.

4 EstruturasdeDados

Nodesenvolvimentodestejogo,éobrigatórioobedeceremàsseguintesregras:

• Umacartadeveseridentificadaatravésdeumaestruturadedadosquetenhapelomenosocódigodacarta(de1a13)eonaipe.

• Nãopodemserusadosvectoresnemmatrizesdetiposdedadoselementares(int,char,float,etc.)pararepresentaremumqualquerconjuntodecartasouconjuntodejogadores.

• Devemusar uma lista (escolhamo tipode listamais adequado)para representaremos jogadoresquenumdadomomentoestãoaparticiparnojogo.

• Tambémdevemusarumalistapararepresentaroconjuntodecartasadistribuirpelacasa.• Apenaspodemusarumvectordeestruturaspararepresentaremascartasqueosjogadoreseacasa

possuem.Note-sequevaisernecessárioumvectorparacadajogador.

• Opcionalmente, podem usar uma pilha para representarem as cartas que o jogador e a casapossuem. Neste caso, a lista de jogadores deve estar ligada a uma pilha de cartas através deponteiros.

• Devemrepresentarporumamatriz2DasaçõesqueosjogadoresEAdevemfazer(verFigura1).

Tambéméimportantesalientarqueoprogramadesenvolvidodeveráserestruturadoemmúltiplosficheirosquepermitamumaorganizaçãoadequadadocódigo.

5 LeituradeFicheiros

Ofuncionamentodo jogodeveserditadoporumconjuntodeparâmetros lidosatravésdeumficheirodeconfiguraçãousandofunçõesapropriadas(verFigura2):

• Número de baralhos de 52 cartas que vai ser utilizado pela casa. Podem ser usados entre 4 e 8baralhos.

• Númerodejogadoresquevãoparticiparnojogo.Estevalordeveestarcompreendidoentre1e4.• Paracadajogadordevemindicar:

JoãoAscenso,version1.0,25/04/2016 5

o Seojogadoréhumano(HU)ouéumaentidadeartificial(EA)o Nome do jogador. O nome é representado por uma string com tamanho máximo de 8

caracteres.o Valor inicial de dinheiro com que cada jogador começa. Não devem ser aceites valores

inferioresa10esuperioresa500.o Valordaapostainicialdecadajogador.Nuncapoderásersuperiora25%dovalorinicialde

dinheiroqueojogadorpossuieinferiora2euros.

Figura2:Sintaxedoficheirodeconfiguraçãodojogo.

O funcionamento das entidades artificiais deve ser ditado por um conjunto de regras que estãorepresentadas por um formato matricial e que indicam como é que a entidade artificial vai jogar. Estasregrasdevemtambémestarnumficheiroquedeveserlidonoiníciodoprograma.

Os nomes dos dois ficheiros devem ser lidos através do argumento da funçãomain, o que significa quequandooprogramaéexecutadoénecessárioindicardoisficheiros:oficheirodeconfiguraçãoeoficheirodeestratégiadosjogadoresEA.

6 EscritadeFicheiros

Talcomonaentregaintermédia,énecessárioescreverumficheiroqueindiquenofinaldojogoaseguinteinformaçãoparacadajogadordoblackjack:

• Nomeetipodojogador• Númerodejogosqueganhou,empatououperdeu.

• Valormonetáriocomqueojogadorficounofinal• Valormonetárioqueacasaganhououperdeu

7 AspetoGráfico

Devem usar o código da entrega intermédia para mostrar as cartas da casa e do jogador. Este códigonecessitade seradaptadopara sepoderemusar listasemvezdevectoresematrizesbidimensionais.Porcimadaáreareservadaacadajogador(ondesãomostradasascartasdistribuídas)énecessáriomostrar:

• Nomedojogador

JoãoAscenso,version1.0,25/04/2016 6

• Valordaaposta• Númerodepontos correspondentesàs cartasquecada jogadorpossuiouBJ,BUpara indicarque

ocorreublackjackoubust,respetivamente.

Doladodireitodaaplicação(espaçoembranco)énecessáriomostrar:

• Nome(primeiros8caracteres)etipodecadajogador.• Valoractualdodinheirodecadajogador.Ovalordaapostadeveserdescontadosemprequeuma

novarondasejainiciada.

Tal como na entrega intermédia, devemmostrar qual é o jogador que se encontra a jogar, por exemplodesenhandoaáreadejogodessejogadorcomoutracor.

8 DesenvolvimentodoJogo

Tambéméfundamentalqueosalunoscumpramasregrasqueseseguemnodesenvolvimentodojogo.

8.1 DesenvolvimentoFaseado

Odesenvolvimentodesteprojetodeveráserfeitodeumaformafaseada,devendoosalunosgarantirquetodasasfuncionalidadescodificadasatéaomomentoestãoafuncionarcorretamente.

Épreferívelumprogramaqueimplementapoucasfuncionalidades,masquefuncionamcorretamente,doqueumprogramatotalmentedesenvolvidomasque

fazmuitopouco.

Assimsugerem-seosseguintespassos,pelaordemapresentada,pararealizaçãodoprojeto,organizadosemduasfases.

Fase1:

No final desta fase, as funcionalidadesda entrega intermédiadevemestar correctamente implementadasrecorrendo a estruturas de dados, listas ligadas e usando um ficheiro de configuração. Desta forma, énecessáriorealizarasseguintestarefas:

• InicializaçãodabibliotecaSDLecriaçãodainterfacegráfica.• Criaçãodasestruturasdedadosnecessáriaspararepresentarascartasdojogadoredacasa.• Leituradoficheirodeconfiguraçãonecessárioaofuncionamentodoprograma.• Implementaçãodafunçãobaralharcartasusandoumalistaligadadecartas.• Recorrendoaocódigorealizadodoprojetointermédio:

o Adaptarasopçõeshit,stand,newandquit.o Verificarseocorreubustoublackjack.o Calcularospontosdeumconjuntodecartas.o Calcularodinheirocomquecadajogadorficanofinaldecadaronda.o Verificartodoocontrolodojogo,porexemplo,adistribuiçãodecartasparaosjogadorese

casa.

JoãoAscenso,version1.0,25/04/2016 7

• Atualizaçãodainterfacegráfica,modificandoasfunçõesfornecidasparaquerecebamcomoentradaaslistasdecartas.

• ImplementaçãodasfuncionalidadesgráficasdefinidasnaSecção7.• Escritadoficheirocomosresultadosdosjogos.

Fase2

Nofinaldesta fasedevemestar implementadasasnovas funcionalidadeseo funcionamentodo jogocomentidadesartificiais(EA),quesegueumconjuntoderegrasdefinidasnoficheirodeestratégia.

• Remoçãodeumjogadordamesasemprequeestefiquesemdinheiroousemprequeoutilizadorosinalizar(opçãoA).

• Implementaçãodasopçõesdouble,surrenderebet.• LeituradoficheirodeconfiguraçãocomaestratégiadejogoparaosjogadoresEA.• ImplementaçãodofuncionamentodojogocomjogadoresEAdeacordocomaestratégiadefinida.• ImplementaçãodoatrasonosjogadoresEAbemcomooreconhecimentodasteclasdassetas.• Implementaçãodaestratégiahi-lowparareceberabonificação.

Osalunosdeverãogarantirarobustezdaaplicaçãoverificandotodososcasosdeerro(porexemploquandoumparâmetrodeentradanãosejaválido).

8.2 Documentação

O código produzido pelos alunos deverá ser comentado. Os comentários presentes no código deverãoexplicitar e explicar o funcionamento da aplicação assim como as decisões tomadas. As seguintes regrasdevemsercumpridas:

• Ocódigodevesercomentadosemprequerealizealgumaoperaçãonãoóbvia.• Oscomentáriosdevemserclaros,gramaticalmentecorretoseusandofrasessimples.• Adeclaraçãodetodasasvariáveiseconstantesdeveseracompanhadadeumcomentáriocomuma

brevedescriçãodeparaqueservem.• Cadablocodecódigo(seleçãoourepetição)deveserprecedidodeumbrevecomentárioexplicativo.• Todososprogramasdevemterumcomentárioinicialqueidentifique,nomínimo,otrabalho,oseu

autor,ofimaquesedestinaeadataderealização.

8.3 Indentação

Umpontofundamentalnaorganizaçãodeescritadecódigoéaindentação,istoé,organizaçãohierárquicadaslinhasdecódigo,deacordocomâmbitoondeelasseencontram.Aindentaçãodeixaocódigofontedoprogramamais organizado,mais legível, fácil de entender e demodificar, sendo uma parte essencial dotrabalho.

8.4 EstruturadoCódigo

TodososprogramasemCdevempossuiramesmaestruturagenérica,compostapelasseguintessecções:

• Blocodecomentários.• Diretivas#include.

JoãoAscenso,version1.0,25/04/2016 8

• Constantesglobaisevariáveisglobais(casosejamnecessárias).• Declaraçãodefunções.• Funçãomain().• Definiçãodefunções.

Comoregrageraldeveconsiderarqueasfunçõesdevemcabernumúnicoecrã,istoé,devemternomáximocercade30linhas.Tambémdevecumprirasseguintesregras:

• Inicializesempreasvariáveisnasuadeclaração.• Testeavalidadedosparâmetrosrecebidosporumafunção.• Declareconstanteseeviteusarnúmerosnocorpodasfunções.• Eviterepetiçõesdecódigo,usefunções,ciclos,etc.• Eviteousodevariáveisglobais.• Nãousegoto.• Escrevacódigosimpleseclaroqueumcolegaseupossaperceber!

8.5 Compilação

OcompiladorausarnaexecuçãodoprojetoéogccemambienteLinux.Osprojetosquenãocompilem,i.e.que tenham erros de sintaxe, não serão avaliados.A existência de avisos durante a fase de compilaçãopoderá ser indício da existência de problemas no código. Estes deverão ser eliminados corretamente ouignoradoscomcuidadoextremo.

8.6 DecisõesdoProjeto

Comoemqualquerprojetodeinformática,ofuncionamentodoprogramanãoestátotalmentedefinidonoenunciado, existindo algumas ambiguidades e omissões. Para resolver essas omissões os alunos deverãotomaralgumasdecisõesaquandododesenvolvimentodoprojeto.Estasdecisõesdevemserfundamentadas,semnuncaircontraodefinidonoenunciado.

8.7 BibliotecaSDL

Durante o desenvolvimento deste projeto devera ser usada a biblioteca SDL2. A aplicação deverá sercompiladausandoasbibliotecasSDL2,SDL2_image,SDL2_ttf.Maisinformaçãodisponívelaqui:

• http://wiki.libsdl.org/APIByCategory• https://wiki.libsdl.org/FrontPage

9 Submissão

Os alunos deverão submeter o código desenvolvido através do sistema FENIX até 20 de Maio. Devementregar o código correspondente ao programa desenvolvido, nomeadamente os ficheiros de texto comextensão.ce.heosficheirosdeconfiguraçãousados.Nãoutilizeumprocessadordetexto(e.g.Word)paraformataroseuprograma.

JoãoAscenso,version1.0,25/04/2016 9

10 Plágio

Os trabalhos serãoobjetodeumsistemadedeteçãodeplágio.Osalunospodemconversarentre si paradiscutirpossíveissoluçõesparaalgumproblemaquetenhammasnãopodempartilharcódigofonte.Nestaentregafinal,oprojectodeveserrealizadoemgruposdedoisalunos!Seumacópiafordetetadatodososalunosenvolvidosnacópiaserãopenalizados.

11 Avaliação

Aavaliaçãodoprojetoteráemcontadiversosparâmetros:

• Funcionalidadesimplementadas• Usocorrectodasestruturasdedados

• Criaçãodelistas,filasoupilhasdeformaadequadaaosobjetivosdoprojeto• EficiênciaequalidadedaimplementaçãodosjogadoresEA• Qualidadedocódigoproduzido�

• Estruturaçãodaaplicação�

• Comentárioselegibilidadedocódigo�

• Tratamentodeerros