Myho 2 Denunciar post Postado Agosto 20, 2007 E aew pessoal, to com um probleminha aqui... Criei um jogo da forca e ele ta rodando beleza, mas eu gostaria q quando a pessoal digitasse a palavra secreta, ela nao aparecesse na tela, q aparecesse uma mascara, igual quando digitamos uma senha.Palavra secreta : *******entendem?Eu nao tenhu a menor ideia de por onde começar.. nao sei se tem uma lib pra isso, ou se tenhu q criar. Quem puder ajudar agradeço, pelo menos com umas dicas =] Compartilhar este post Link para o post Compartilhar em outros sites
omar.pessoa 1 Denunciar post Postado Agosto 21, 2007 Ola amigo, assim fica um pouco dificil, mas o que você está usando? Que compilador? Dê mais informações.To aguardando. Compartilhar este post Link para o post Compartilhar em outros sites
Myho 2 Denunciar post Postado Agosto 21, 2007 Sim, eu tava pensando em edita isso pra por mais detalhes, vamos la:Uso o compilador Dev-cpp 4.9.9.2, mas a resposta tb pode ser para Visual C++ 2003, uso os dois.E seria uma CONSOLE APPLICATIONAchu que o resto esta claro, mas eu vo tenta explicar melhor.Supondo q 2 pessoas estejam jogando uma contra a outra o jogo da forca no mesmo PC, eu quero q quando alguem for digitar a palavra a ser adivinhada, ela nao ficasse na tela até dar ENTER, q aparecesse alguma mascara, tipo '*', ou espaço em branco mesmo. Queria esconder o q esta sendo digitado mesmo, igual quando digitamos uma senha.Pensei em usar uma variavel char, q armazenasse em um vetor através do getch e mostrasse na tela um outra char de mascara, mas teria q criar uma função caso o BACKSPACE seja pressionado... posso até criar, mas se alguem tem sabe um modo mais simples agradeço.(achu q confundi mais ainda... ) Compartilhar este post Link para o post Compartilhar em outros sites
omar.pessoa 1 Denunciar post Postado Agosto 22, 2007 Mudando de idéia... #include "stdafx.h"#include <conio.h>#include <stdio.h>#include <windows.h> void RetornaInicioLinha();int main(int argc, char* argv[]){ char cPalavra[30] = {0}; char cAst[30]={0}; int iTecla = getch(); int iInd = 0; while(iTecla != 13) { if(iTecla == 8)//BackSpace { iInd--; cPalavra[iInd] = 0; cAst[iInd]=0; } else { cPalavra[iInd] = (char)iTecla; cAst[iInd]='*'; iInd ++; } RetornaInicioLinha();//Retorna ao inicio da linha para limpar a linha printf(" ", cAst);//Limpa a linha, hehehe chuncho RetornaInicioLinha();//Retorna ao inicio da linha printf("%s", cAst);//Imprime os * iTecla = getch(); } return 0;}void RetornaInicioLinha(){ HANDLE hStdout; hStdout = GetStdHandle(STD_OUTPUT_HANDLE); CONSOLE_SCREEN_BUFFER_INFO csbiInfo; if (! GetConsoleScreenBufferInfo(hStdout, &csbiInfo)) printf("GetConsoleScreenBufferInfo"); csbiInfo.dwCursorPosition.X = 0; if (! SetConsoleCursorPosition(hStdout, csbiInfo.dwCursorPosition)) { printf("SetConsoleCursorPosition"); }}Acho que agora vai servir para você. Ao menos a lógica e as funções são essas. (console)Abraço. Compartilhar este post Link para o post Compartilhar em outros sites
Myho 2 Denunciar post Postado Agosto 23, 2007 Po cara, vlw mesmo por ajudar. Eu acabei criando uma rotina propria mesmo, mas concerteza sera muito util esse seu codigo, vi q posso da uma enxugada no meu. Alguns comandos q voce utilizou nunca tinha visto, aqueles dentro da função RetornaInicioLinha() e nem poderia usalos, trabalho de 1º semestre tem q fica nos comandos basicos mesmo. Vo posta o meu, caso voce (ou qualquer outra pessoa q queira ajudar ^^) tenha ideias pra deixa-lo mais enxuto, ou mais claro, estou aceitando. ****** Sempre lembrando q tem esse bug louco do forum, q ele nao aceita q se digite 'barra zero' no codigo, entao onde você ve '\' entenda '\ 0' soh q sem o espaço entre eles***** int shadow(char *p) // recebe um ponteiro de char, para modificar a palavra dentro do main{ char resp[50]; int i = 0; resp[0] = '\'; while (resp[i-1] != 13) // Enquanto nao apertar ENTER { cout << "Digite a palavra secreta: "; for (int j = 0; j < i; j++) { cout << (char)219; // aqui é o carcter q eu escolhi para mostras, poderia ser '*' pra ficar tipo senha } resp[i] = getch(); resp[i+1] = '\'; // sempre colocando um '\ 0' na proxima posição do vetor (sem isso deu bug loco aqui) if (((resp[i] >= 48) && (resp[i] <= 57)) || ((resp[i] >= 65) && (resp[i] <= 90)) || ((resp[i] >= 97) && (resp[i] <= 122))|| // esse bando de condição é pra soh permitir Letra e Numeros (ideias pra melhorar?) (resp[i] == 13) || (resp[i] == 8)) { system("cls"); if (resp[i] == 8) { if (i > 0 ) { i-=1; resp[i] =' ';i-=1;} // se a tecla for BACKSPACE, apaga e volta uma posição else { i = -1;} system("cls"); } i++; } else { system("cls");} } resp[i-1] = '\'; //coloca um '\ 0' de na ultima posição (fico feio esse monte de \ 0, mas soh assim q funciono ¬¬ strcpy(p,resp); // passa a palavra secreta pro vetor no MAIN Compartilhar este post Link para o post Compartilhar em outros sites
omar.pessoa 1 Denunciar post Postado Agosto 24, 2007 Opa... sem problemas amigo, o problema do "system("cls")", é que ele limpa a tela inteira. E com o SetConsoleCursorPosition você controla o buffer e limpa ou altera onde quiser.Valeu. Qualquer coisa estamos ai.Abraço. Compartilhar este post Link para o post Compartilhar em outros sites