jotaelle 0 Denunciar post Postado Novembro 25, 2008 Galera, desde que conheci o C++ acompanho o forum com dicas, tuto é show e agora preciso de um help. Estou com um código rodando no DEV C++ mas ainda falta colocar uma condição para quando a pessoa digitar um caracter errado mais de uma vez, não contar como erro e informar o jogador que o caracter é invalido "digite outro" e também logo no início queria que quando a palavra fosse digitada não aprecesse na tela logo no início. Tem tbem um trecho no código (lá no switch) foi um amigo que ajudou no "case 4 : corpo[3] = '\\';" e no case 6 : corpo[5] = '\\'; porque tem que usar 2 barras? Segue //Bibliotecas #include <conio.h> #include <ctype.h> #include <stdio.h> #include <stdlib.h> #include <windows.h> //Variáveis Globais char palavra[65]; char npalavra[65]; char erros[30]; char corpo[7]; int nerros /*NUMERO DE ERROS*/ , nacertos /*NUMERO DE ACERTOS*/, tam /*TAMANHO DA PALAVRA*/; //Protótipo das Funções void titulo(); void entrada(); void tela(); void mostrapalavra(); #define AZUL 3 #define AMARELO 6 #define BRANCO 7 #define NEGRITO 8 #define VERMELHO 4 #define VERDE 10 #define ESCURO 1 #define PRETO 3 HANDLE hConsoleHandle = GetStdHandle(STD_OUTPUT_HANDLE); //Função relacionada a cor <windows.h> //Início do Programa int main() { char opt; do { titulo(); entrada(); tela(); printf(" Jogar novamente? (s/n): "); opt = toupper(getche()); } while(opt == 'S'); titulo(); printf("\n -------------Pressione qualquer tecla para sair...\n"); getch(); return(0); } void entrada() { int cont; tam = 0; printf(" Digite uma palavra (Maximo de 64 caracteres: \n"); gets (palavra); while(palavra[tam] != 0) tam++; nacertos = 0; nerros = 0; for(cont = 0; cont < 30; cont++) erros[cont] = '\0'; for(cont = 0; cont < 65; cont++) npalavra[cont] = '_'; for(cont = 0; cont < 6; cont++) corpo[cont] = ' '; } void titulo() { system("color 2"); system("cls"); system("cls"); printf(" ===================JOGO DA FORCA==================\n"); printf(" ==================================================\n"); SetConsoleTextAttribute(hConsoleHandle, VERDE); printf("\n"); } void tela() //Terceira função - Jogo { int fimjogo = 0, cont, acertou = 0; char c; while(fimjogo == 0) { titulo(); mostrapalavra(); printf(" Digite uma letra: "); c = getch(); for(cont = 0; cont < tam; cont++) if(toupper© == toupper(palavra[cont])) { if(toupper© != npalavra[cont]) { npalavra[cont] = toupper©; nacertos++; } acertou = 1; } if(!acertou) { erros[nerros] = toupper©; nerros++; switch(nerros) { case 6 : corpo[5] = '\\'; case 5 : corpo[4] = '/'; case 4 : corpo[3] = '\\'; case 3 : corpo[2] = '/'; case 2 : corpo[1] = '|'; case 1 : corpo[0] = 'O'; } } if((nacertos == tam) || (nerros == 6)) fimjogo = 1; acertou = 0; } titulo(); mostrapalavra(); cont = 0; while(palavra[cont] != 0) palavra[cont] = toupper(palavra[cont++]); if(nacertos == tam) printf(" PARABENS!! VOCE ACERTOU A PALAVRA ", palavra); else printf(" VOCE PERDEU... A PALAVRA ERA ", palavra); SetConsoleTextAttribute(hConsoleHandle, AZUL); printf("%s\n", palavra); SetConsoleTextAttribute(hConsoleHandle, AZUL); } void mostrapalavra() { int cont; SetConsoleTextAttribute(hConsoleHandle, AMARELO); printf(" /-----\\ %s \n", erros); printf(" | |\n"); printf(" | %c\n", corpo[0]); printf(" | %c%c%c\n", corpo[2], corpo[1], corpo[3]); printf(" | %c %c\n", corpo[4], corpo[5]); printf(" |\n"); printf(" |"); SetConsoleTextAttribute(hConsoleHandle, AZUL); for(cont = 0; cont < tam; cont++) printf(" %c", npalavra[cont]); printf("\n\n"); } Compartilhar este post Link para o post Compartilhar em outros sites
quitZAUMMM 18 Denunciar post Postado Novembro 26, 2008 tem q usar 2 barras para aparecer 1 soh no printf.. é pq senaum ele pode confundir como uma tecla de escape.. e outra, para ver c o cara digitar uma letra errada denovo, soh usar um vetor contendo as letras tentadas.. no laboratorio de codigos fontes, eu fiz um joguinho da forca, da uma olhada lah.. []s Compartilhar este post Link para o post Compartilhar em outros sites
jotaelle 0 Denunciar post Postado Novembro 29, 2008 Poderia alterar o código para eu testar, fiz uns testes com o vetor e não deu certo ele não vai para o próximo na nerros. E em relação a não mostrar a palavra quando ela é digitada, tem alguma sugestão!!! Desde já obrigado if(!acertou) { erros[nerros] = toupper©; letrast[nerros] = toupper©; if(letrast[nerros] = erros[nerros]) printf("Caracter já digitado, digite outro"); else nerros++; switch(nerros) { case 6 : corpo[5] = '\\'; case 5 : corpo[4] = '/'; case 4 : corpo[3] = '\\'; case 3 : corpo[2] = '/'; case 2 : corpo[1] = '|'; case 1 : corpo[0] = 'O'; } } Compartilhar este post Link para o post Compartilhar em outros sites
quitZAUMMM 18 Denunciar post Postado Dezembro 2, 2008 bom... a logica dos erros [e a seguinte.. o cara digita uma letra, ai você compara essa letra com um vetor q contera outras letras digitadas, c a letra naum for encontrada joga ela no vetor, c for encontrada conta como erro. 'e simples.. e de mascarar a palavra, como eu disse de uma pesquisada lah no laboratorio de codigos fontes q tem codigo q faz isso.. []s Compartilhar este post Link para o post Compartilhar em outros sites