goldspy98 Posted December 30, 2016 at 01:02 AM Report Share #601576 Posted December 30, 2016 at 01:02 AM (edited) 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. Edited December 30, 2016 at 02:26 AM by goldspy98 Link to comment Share on other sites More sharing options...
HappyHippyHippo Posted December 30, 2016 at 09:50 AM Report Share #601581 Posted December 30, 2016 at 09:50 AM sabes o que são framebuffers ? IRC : sim, é algo que ainda existe >> #p@p Portugol Plus Link to comment Share on other sites More sharing options...
goldspy98 Posted January 1, 2017 at 11:08 PM Author Report Share #601653 Posted January 1, 2017 at 11:08 PM (edited) Em 30/12/2016 às 09:50, HappyHippyHippo disse: sabes o que são framebuffers ? Não, pelo que percebi é uma parte da memoria dedicada a guardar a parte gráfica da aplicação, pesquisei como utiliza-los em C mas não encontrei nada que explica-se como realizar o que pretendo, no caso se percebi eu poderia mudar diretamente os valores no framebuffer, no entanto não percebi como é que ao usar framebuffers posso fazer como altere a cor de tantos em tanto tempo. Edited January 1, 2017 at 11:09 PM by goldspy98 Link to comment Share on other sites More sharing options...
HappyHippyHippo Posted January 2, 2017 at 05:44 PM Report Share #601679 Posted January 2, 2017 at 05:44 PM a ideia não é usar framebuffers, mas fazer algo do género tens um buffer com a info dos caracteres que de T em T "tempo" (frames) vais fazer refresh do que a consola apresenta dessa forma basta que o SetTimer actualize o framebuffer de T2 em T2 "tempo" IRC : sim, é algo que ainda existe >> #p@p Portugol Plus Link to comment Share on other sites More sharing options...
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now