Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 12
  1. #1

    [C] Applicazione Console

    Sto costruendo un giochino che funziona in modalità console...
    La grafica è gestita interamente mediante caratteri ascii immagazzinati in una matrice che viene stampata a schermo riga per riga come se fosse una stringa.
    Mi servirebbero due cose...

    1) Esiste una funzione che mi permette di acquisire un carattere non bloccante? Nel senso: non come una getchar() o getc() che attende finchè l'utente immette un carattere, ma una funzione che controlli "al volo" se c'è un carattere, altrimenti passi oltre... Non ne ho trovate nella libreria standard

    2) C'è un modo per fare scomparire il cursore quando stampo la schermata? C'è un fastidioso sfarfallio che non riesco a eliminare

    Grazie

  2. #2
    Risposta 1:

    getch(); non stampa il carattere a video
    getche(); stampa il carattere a video...

    Su alcuni compilatori sono standard in stdio.h
    in altri devi includere conio.h o conio.c !!!!

  3. #3
    Per Cursore intenti il '_' dell'inserimento del Carattere ???

  4. #4
    Utente di HTML.it L'avatar di Alex'87
    Registrato dal
    Aug 2001
    residenza
    Verona
    Messaggi
    5,802
    ke tipo di gioco?
    SpringSource Certified Spring Professional | Pivotal Certified Enterprise Integration Specialist
    Di questo libro e degli altri (blog personale di recensioni libri) | ​NO M.P. TECNICI

  5. #5

    Polling tastiera c

    Allora per quanto riguarda l'attesa di un carattere non bloccante cioé che non blocca l'esecuzione del programma bisogna usare una tecnica, quella del polling.


    Il polling consiste nel attendere un interrupt da parte del sistema operativo leggendo registri dedicati.Quindi a te non resta altro da fare che leggere un valore presente in un registro apposito e vedere se contiene il dato o no, se lo contiene significa che è stato premuto un tasto dalla tastiera altrimenti continui con il tuo codice.

    Questo è l'aspetto teorico ovviamente e pretico per quanto riguarda l'assembler, ma per il c prova in questo post:

    http://groups.google.it/groups?hl=it....it%26rnum%3D1

    Spero di esserti stato di aiuto

    CIaux
    The_Lince

  6. #6
    ...devi utilizzare le API.

    se utilizzi windows, questo codice va benone.
    codice:
    /* main.c */
    
    #include <stdio.h>
    #include <windows.h>
    #include "my_console.h"
    
    VOID ProcessKey ();
    
    int main()
    {
        ShowConsoleCursor(false);
        while(1)
            ProcessKey ();
        
        return 0;
    }
    
    VOID ProcessKey ()
    {
         if (GetKeyState (VK_LEFT) < 0)
              printf("LEFT ") ;
         if (GetKeyState (VK_RIGHT) < 0)
              printf("RIGHT ");
         if (GetKeyState (32) < 0)
              printf("SPACE ");
    }
    codice:
    /* my_console.h */
    
    #include <windows.h>
    
    
    void ShowConsoleCursor(bool Show)
    {
        int Size=25;
        _CONSOLE_CURSOR_INFO CurInfo;
    
        if(Size<=0)
    	Size=1;
        if(Size>100)
    	Size=100;
    
        CurInfo.dwSize = Size;
        CurInfo.bVisible = Show;
    	
        SetConsoleCursorInfo(GetStdHandle(STD_OUTPUT_HANDLE),&CurInfo);
    }
    ...Terrible warlords, good warlords, and an english song

  7. #7
    In conio.c / conio.h
    c'e' una funzione che rileva se un tasto e' stato premuto...

    kbhit()

    es.
    while (!kbhit()) {
    muovi la pallina
    }
    key = getch();

    printf ("Hai premuto il tasto %d", key);

  8. #8

    Re: [C] Applicazione Console

    Originariamente inviato da zaknafein

    1) Esiste una funzione che mi permette di acquisire un carattere non bloccante? Nel senso: non come una getchar() o getc() che attende finchè l'utente immette un carattere, ma una funzione che controlli "al volo" se c'è un carattere, altrimenti passi oltre... Non ne ho trovate nella libreria standard
    con kbhit() non credo si possa fare...

    es: non devo per forza immettere un INPUT (scanf(), getch(), getchar(), getche() etc... etc...)
    per far passare il focus all'istruzione succesiva...
    ...Terrible warlords, good warlords, and an english song

  9. #9
    Per ora il programma è questo. Come potete vedere spesso si vede il cursore '_' e non è che sia un gran bello spettacolo.

    Inoltre ho bisogno di specificare un paio di tasti almeno che mi permettano di spostare la pallina in orizzontale, ma se uso una getch() o simili il programma si ferma attendendo per passare alle istruzioni successive.

    E' possibile solo mediante API? Il problema è che dovrei scriverlo in una versione Win32 e una Linux...

    PS: ho provato a usare il listato consigliato da Jonny_Deep ma quando compilo mi da un errore su questa linea: _CONSOLE_CURSOR_INFO CurInfo;
    Devo includere qualche altra llibreria? Non conosco le API di Win32

  10. #10
    Originariamente inviato da zaknafein
    PS: ho provato a usare il listato consigliato da Jonny_Deep ma quando compilo mi da un errore su questa linea: _CONSOLE_CURSOR_INFO CurInfo;
    Devo includere qualche altra llibreria? Non conosco le API di Win32
    Ho controllato, l'errore lo ricevi perchè
    le API di Win32 che ho utilizzato (per il cursore) sono di tipo BOOL... quindi utilizzabili con il C++ ma non con il C.
    Per non ricevere l'errore devi compilare il progetto con un compilatore C++ (come progetto C++) e non C.

    Ora comunque cerco... qualche API ad hoc per il C.
    ...Terrible warlords, good warlords, and an english song

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.