Em suma o que eu pretendo e não consegui realizar em C após varias horas de pesquisa e tentativas é que o texto Mastermind mude de cor de 3 em 3 segundos sem afetar o funcionamento do jogo, permitindo ao utilizador usar o menu do jogo, pois o pretendido é que ao sair do menu o texto seja removido e o timer destruido.
Boa noite,
Estou a desenvolver um jogo simples em C para Windows que funcione na linha de comandos, no meu do jogo ao iniciar apresento uma tela de boas-vindas com o nome do jogo escrito em ASCII gerado neste site http://www.patorjk.com/software/taag/, eu gostaria que a cor do texto mudasse para uma cor aleatório de tantos em tantos segundos, no caso já tenho o código para mudar a cor a funcionar, no entanto não estou a conseguir criar um Timer para mudar a cor de tantos em tantos segundos.
No caso estou a usar funções da biblioteca Windows.h para trabalhar com a linha de comandos.
void CALLBACK changeWelcomeColor ( HWND hwnd, UINT uMsg, UINT_PTR idEvent, DWORD dwTime ) {
FillConsoleOutputAttribute ( hStdout, FOREGROUND_BLUE, cCharsWritten, ( COORD ) { 0, 0 }, NULL );
}
void displayWelcome ( HANDLE hStdout ) {
static const char asciiTitle [ ] = "\n\
__ __ _ _ _\n\
| \\/ | | | (_) | |\n\
| \\ / | __ _ ___| |_ ___ _ __ _ __ ___ _ _ __ __| |\n\
| |\\/| |/ _` / __| __/ _ \\ '__| '_ ` _ \\| | '_ \\ / _` |\n\
| | | | (_| \\__ \\ || __/ | | | | | | | | | | | (_| |\n\
|_| |_|\\__,_|___/\\__\\___|_| |_| |_| |_|_|_| |_|\\__,_|\n";
LPDWORD cCharsWritten;
WriteConsole ( hStdout, asciiTitle, sizeof ( asciiTitle ), cCharsWritten, NULL );
SetTimer ( NULL, 0, 3 * 1000, changeWelcomeColor );
}
Este é o código que tenho momento, o que eu pretendo é que a função FillConsoleOutputAttribute seja executada de 3 em 3 segundos, no entanto este timer não pode interferir com o funcionamento do programa pois o menu tem de funcionar enquanto o timer é executado, por esse motivo eu tentei usar a função SetTimer para não interferir com o restante funcionamento do programa.
Nota que as variáveis hStdout e cCharsWritten da função FillConsoleOutputAttribute tem de ser passadas ao chamar o timer, algo que eu não consegui fazer, pesquisei varias formas de fazer isto mas a maioria das soluções são para C++ ou não funcionaram.
A parte da questão das variáveis não estarem definidas ao chamar a função existe um outra problema, pois eu testei o timer escrevendo umas letras e parece que o timer não funcionou.
Desde já agradeço o tempo disposto.
↧