{"id":1213,"date":"2021-09-22T14:21:01","date_gmt":"2021-09-22T17:21:01","guid":{"rendered":"http:\/\/www.galirows.com.br\/meublog\/programacao\/?p=1213"},"modified":"2021-09-22T14:21:09","modified_gmt":"2021-09-22T17:21:09","slug":"solicitacao-algoritmo-8-jogo-da-forca","status":"publish","type":"post","link":"http:\/\/www.galirows.com.br\/meublog\/programacao\/solicitacao-algoritmo-8-jogo-da-forca\/","title":{"rendered":"Solicita\u00e7\u00e3o de algoritmo 8 &#8211; jogo da forca"},"content":{"rendered":"\n<p>O pedido de algoritmo foi feito pelo Victor Costa, que est\u00e1 fazendo um jogo de forca e que tem como objetivo acertar a palavra secreta do jogo. O c\u00f3digo iniciado por ele faz pouca coisa, mas segue abaixo.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code lang=\"c\" class=\"language-c\">int main (void) {\n    int erros = 0;\n    char p_sec[100];\n    printf(\"JOGADOR 1  \\n\");\n    printf(\"Digite a palavra secreta:\");\n    scanf(\"%s\", &amp;p_sec);\n    printf(\"A palavra secreta e': %s\", p_sec);\n    printf(\"\\nA palavra tem %i caracteres\", strlen(p_sec));\n\n    \/\/ aqui eu queria esse tipo de confirma\u00e7\u00e3o que comentei\n\n    return 0;\n}<\/code><\/pre>\n\n\n\n<p>O c\u00f3digo apenas faz a leitura da palavra que ser\u00e1 a palavra que dever\u00e1 ser acertada.<\/p>\n\n\n\n<p>Na minha complementa\u00e7\u00e3o do algoritmo, eu inicialmente substitu\u00ed o uso do scanf() pelo fgets(), conforme pode ser visto na linha 6. O uso do fgets() acaba pegando o caractere de nova linha gerado ao pressionar a tecla enter, por isso minha contagem de quantidade de letras deve desconsiderar esse caractere, conforme fa\u00e7o na linha 7.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code lang=\"c\" class=\"language-c line-numbers\">#include &lt;stdio.h>\n\nint main (void) {\n    char p_sec[100], chute[100];\n    printf(\"Digite a palavra secreta: \");\n    fgets(p_sec, 100, stdin);\n    printf(\"A palavra tem %i caracteres\\n\", strlen(p_sec)-1);\n\n    printf(\"\\nQual a palavra secreta: \");\n    fgets(chute, 100, stdin);\n    if (strcmp (p_sec, chute) == 0) {\n        printf(\"ACERTOU!\");\n    } else {\n        printf(\"ERROU!\");\n    }\n\n    return 0;\n}<\/code><\/pre>\n\n\n\n<p>O projeto do Victor ainda n\u00e3o est\u00e1 maduro, mas o melhor seria buscar essa palavra secreta de um arquivo de texto, sorteando uma palavra e apenas mostrando quantas letras ela tem. Mas vamos ignorar o fato de que o usu\u00e1rio \u00e9 quem forneceu a palavra. Nesse sentido, meu algoritmo solicitou que o usu\u00e1rio digitasse uma palavra (linhas 9 e 10) e utilizou a fun\u00e7\u00e3o strcmp() para comprar essa nova palavra com a anterior. Se as duas palavras forem iguais, a fun\u00e7\u00e3o strcmp() retorna zero e isso indica a igualdade, conforme meu teste na linha 11. <\/p>\n\n\n\n<p>Logicamente, para um jogo seria mais interessante ter um la\u00e7o de repeti\u00e7\u00e3o permitindo ao usu\u00e1rio chutar v\u00e1rias palavras.<\/p>\n\n\n\n<p>Como o jogo assim est\u00e1 um pouco sem gra\u00e7a, complementei o c\u00f3digo para permitir ao usu\u00e1rio alguns chutes de letras e a indica\u00e7\u00e3o se a letra est\u00e1 na palavra ou n\u00e3o. Essa complementa\u00e7\u00e3o \u00e9 feita a partir a inser\u00e7\u00e3o do bloco <em>while<\/em> visto no c\u00f3digo abaixo. O <em>while<\/em> ir\u00e1 permitir ao usu\u00e1rio um certo n\u00famero de chutes de letras da palavra. No meu crit\u00e9rio, adotei que o usu\u00e1rio poder\u00e1 errar o <em>tamanho da string + 1<\/em> vezes. Ou seja, uma <em>string<\/em> com cinco letras, permitir\u00e1 ao usu\u00e1rio errar 6 letras at\u00e9 precisar realizar o chute da palavra secreta.<\/p>\n\n\n\n<p>O bloco <em>while<\/em> inicia solicitando a letra do usu\u00e1rio e lendo essa letra. Eu fiz a leitura da letra na linha 12 com o uso da fun\u00e7\u00e3o getchar(). Veja que na linha 13 tem outro getchar() e uso ele apenas para descartar o enter. Isso porque ao digitar uma letra e dar o enter, dois caracteres s\u00e3o lidos (a letra a o enter). Ent\u00e3o meu getchar() da linha 13 \u00e9 apenas para ler o enter e &#8220;descartar&#8221; ele. <\/p>\n\n\n\n<p>O la\u00e7o <em>for<\/em> na linha 15 \u00e9 respons\u00e1vel por percorrer a palavra secreta e verificar se a letra digitada pelo usu\u00e1rio \u00e9 encontrada na palavra secreta. Se a letra existir na palavra, ent\u00e3o o usu\u00e1rio \u00e9 avisado do acerto, caso contr\u00e1rio \u00e9 dito que a letra n\u00e3o existe na palavra e \u00e9 incrementado a quantidade de erros do usu\u00e1rio.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code lang=\"c\" class=\"language-c line-numbers\">#include &lt;stdio.h>\n\nint main (void) {\n    int erros = 0, i, acertou;\n    char p_sec[100], letra, chute[100];\n    printf(\"Digite a palavra secreta: \");\n    fgets(p_sec, 100, stdin);\n    printf(\"A palavra tem %i caracteres\\n\", strlen(p_sec)-1);\n\n    while (erros &lt; strlen(p_sec)) {\n        printf(\"Digite uma letra: \");\n        letra = getchar();\n        getchar();\n        acertou = 0;\n        for(i=0; i&lt;strlen(p_sec)-1;i++) {\n            if (letra == p_sec[i]) {\n                acertou = 1;\n                break;\n            }\n        }\n\n        if (acertou) {\n            printf(\"Acertou uma letra!\\n\");\n        } else {\n            printf(\"Essa letra nao faz parte da palavra!\\n\");\n            erros++;\n        }\n    }\n\n    printf(\"\\nQual a palavra secreta: \");\n    fgets(chute, 100, stdin);\n    if (strcmp (p_sec, chute) == 0) {\n        printf(\"ACERTOU!\");\n    } else {\n        printf(\"ERROU!\");\n    }\n\n    return 0;\n}<\/code><\/pre>\n\n\n\n<p>Ap\u00f3s serem fornecidos letras erradas em quantidade suficiente, o la\u00e7o <em>while<\/em> finaliza e pede ao usu\u00e1rio a palavra secreta, informando se o usu\u00e1rio errou ou acertou a palavra.<\/p>\n\n\n\n<p>Fazer jogos \u00e9 uma forma divertida e motivadora para exercitar a programa\u00e7\u00e3o. Eu fiz uma din\u00e2mica simples, mas que permite personaliza\u00e7\u00f5es e extens\u00f5es de formas para o funcionamento do jogo. Mesmo sem recursos gr\u00e1ficos, ainda seria poss\u00edvel mostrar quantas vezes as letras aparecem na palavra secreta, a posi\u00e7\u00e3o dessas letras, desconsiderar letras que j\u00e1 foram digitadas antes, <em>etc<\/em>. Usando a criatividade muita coisa ainda pode ser feita nesse jogo. <\/p>\n","protected":false},"excerpt":{"rendered":"<p>O pedido de algoritmo foi feito pelo Victor Costa, que est\u00e1 fazendo um jogo de forca e que tem como objetivo acertar a palavra secreta do jogo. O c\u00f3digo iniciado por ele faz pouca coisa, mas segue abaixo. O c\u00f3digo apenas faz a leitura da palavra que ser\u00e1 a palavra que dever\u00e1 ser acertada. Na [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_monsterinsights_skip_tracking":false,"_monsterinsights_sitenote_active":false,"_monsterinsights_sitenote_note":"","_monsterinsights_sitenote_category":0,"footnotes":""},"categories":[3],"tags":[36,52,23],"class_list":["post-1213","post","type-post","status-publish","format-standard","hentry","category-c","tag-for","tag-solicitacao-de-algoritmo","tag-string"],"aioseo_notices":[],"amp_enabled":true,"_links":{"self":[{"href":"http:\/\/www.galirows.com.br\/meublog\/programacao\/wp-json\/wp\/v2\/posts\/1213","targetHints":{"allow":["GET"]}}],"collection":[{"href":"http:\/\/www.galirows.com.br\/meublog\/programacao\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"http:\/\/www.galirows.com.br\/meublog\/programacao\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"http:\/\/www.galirows.com.br\/meublog\/programacao\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"http:\/\/www.galirows.com.br\/meublog\/programacao\/wp-json\/wp\/v2\/comments?post=1213"}],"version-history":[{"count":2,"href":"http:\/\/www.galirows.com.br\/meublog\/programacao\/wp-json\/wp\/v2\/posts\/1213\/revisions"}],"predecessor-version":[{"id":1215,"href":"http:\/\/www.galirows.com.br\/meublog\/programacao\/wp-json\/wp\/v2\/posts\/1213\/revisions\/1215"}],"wp:attachment":[{"href":"http:\/\/www.galirows.com.br\/meublog\/programacao\/wp-json\/wp\/v2\/media?parent=1213"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/www.galirows.com.br\/meublog\/programacao\/wp-json\/wp\/v2\/categories?post=1213"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/www.galirows.com.br\/meublog\/programacao\/wp-json\/wp\/v2\/tags?post=1213"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}