blackjack ii - autenticação · note-se que o jogador ea não pode aceder ao conjunto de cartas...
TRANSCRIPT
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