n° 219
Novembre 2017
Dicembre 13, 2017, 07:09:43 *
Benvenuto! Accedi o registrati.
Hai dimenticato l'e-mail di attivazione?

Accesso con nome utente, password e durata della sessione
Notizia:
 
   Indice   Linux Windows Techassistance Gameassistance videogame hardware Aiuto Ricerca Agenda Downloads Accedi Registrati  


* Messaggi recenti
Messaggi recenti
Pagine: [1]   Vai giù
  Stampa  
Autore Discussione: Esiste un modo per leggere e visualizzare pixel nella finestra console ?  (Letto 1867 volte)
0 utenti e 1 Utente non registrato stanno visualizzando questa discussione.
beppo63
Jr. Member
**

Karma: +0/-102
Scollegato Scollegato

Messaggi: 97


Mostra profilo
« inserita:: Febbraio 23, 2017, 12:30:48 »

Salve ho fatto questo programmino in C che simula l'effetto neve con uno scroll.
Però chiedo a qualcuno che lo sa se ce uno o più modi per far si che la neve del programmino cada senza scatti , magari leggendo i pixel del carattere o stringa  , oppure disegnando direttamente uno o più pixel sulla finestra console .
Ringrazio anticipatamente !
Codice:
#include <windows.h>    // Win32 Header File
#include <stdio.h>
void gotoxy(int x, int y);
void visibilita_cursore();
char stringaverticale[26][81];
int     Screen (int,int,int);
int main()
{
    srand(time(NULL));
    int b=0,w,k,d,v,temporaneo=0,flagcasuale=0;
    int x=0;
    int y=1;
    int h;
    int riga = 1; //Valore della riga dove cominciare a leggere le 24 righe
    int num_casuale1=0;
    int num_casuale2=0;

visibilita_cursore(); //disabilita la visibilita del cursore
//for(k=0;k<=702;k++){printf("%d",k);}
//printf("Z");
inizio:
    /*Lettura contenuto dello schermo*/
    for(d=0; d<=23; d++) //Conta 24 righe
    {
        for(w=1; w<=80; w++) //Conta le caselle della riga
        {
            b=Screen(riga,w,0); //Lettura valore in coordinata corrente
            stringaverticale[d][w-1]=b; //Immagazzinamento valori schermo in stringa bidimensionale
        }
        riga++; //Incrementa la riga da leggere per screen()
    }
    stringaverticale[d-1][w-2]='\b';
_sleep(1500);
    /*Stampa contenuto dello schermo*/
    for(v=0; v<=23; v++)
    {
        for(w=0; w<=79; w++)
        {
            gotoxy(x++,y);
            printf("%c",stringaverticale[v][w]);

        }
        x=0;
        y++;
    }

    riga=1;
    x=0;
    y=1;
_sleep(150); //ciclo di attesa
 gotoxy(0,0);
for(k=0;k<=79;k++){printf(" ");} //Cancella prima linea
    flagcasuale=0+rand()%2; //generazione numero casuale

    num_casuale1=1+rand()%79; //generazione numero casuale

temporaneo=num_casuale1;
//Riempimento prima linea
if(flagcasuale==0)for(h=0; h<=79; h++)
    {

        gotoxy (0+num_casuale1,0);
        printf("%c",'*');

    }
num_casuale2=1+rand()%79; //generazione numero casuale

if(temporaneo!=num_casuale2+1&&temporaneo!=num_casuale2-1)for(h=0; h<=79; h++)
    {

        gotoxy (0+num_casuale2,0);
        printf("%c",'*');


    }
continuo:
    goto inizio;
    return 0;
}

int Screen (int y,int x,int mode)
{
    HANDLE  hConsole = GetStdHandle(STD_OUTPUT_HANDLE);
    DWORD Slen;
    COORD Coord;
    WORD  Attr;
    char  Char[2];
    Coord.X=x-1;
    Coord.Y=y-1;
    ReadConsoleOutputCharacterA(hConsole,Char,1,Coord,&Slen);
    ReadConsoleOutputAttribute(hConsole,&Attr,1,Coord,&Slen);
    if(mode)
        return  Attr;
    return  Char[0];
}
void gotoxy(int x, int y)
{
    HANDLE HConsole;
    CONSOLE_SCREEN_BUFFER_INFO ConsoleInfo;
    HConsole = GetStdHandle(STD_OUTPUT_HANDLE);
    ConsoleInfo.dwCursorPosition.X = x;
    ConsoleInfo.dwCursorPosition.Y = y;
    SetConsoleCursorPosition(HConsole,ConsoleInfo.dwCursorPosition);
}

void visibilita_cursore()
{
    HANDLE hConsoleOutput;
CONSOLE_CURSOR_INFO structCursorInfo;
hConsoleOutput = GetStdHandle( STD_OUTPUT_HANDLE );
structCursorInfo.dwSize = 1;
structCursorInfo.bVisible = FALSE;
SetConsoleCursorInfo( hConsoleOutput, &structCursorInfo );
}
Registrato
oregon
Jr. Member
**

Karma: +22/-6
Scollegato Scollegato

Messaggi: 239


Mostra profilo
« Risposta #1 inserita:: Febbraio 23, 2017, 10:14:30 »

Non puoi usare le funzionalità "a caratteri" della console ma dovrai gestire la grafica di Windows e le sue API.
Un esempio può essere questo

Codice:
#include <windows.h>
#include <iostream>
#include <cmath>

using namespace std;

#define PI 3.14

int main()
{
    HWND myconsole = GetConsoleWindow();
    HDC mydc = GetDC(myconsole);

    int pixel =0;

    COLORREF COLOR= RGB(255,255,255);

    for(double i = 0; i < PI * 4; i += 0.05)
    {
        SetPixel(mydc,pixel,(int)(50+25*cos(i)),COLOR);
        pixel+=1;
    }

    ReleaseDC(myconsole, mydc);
    cin.ignore();
    return 0;
}

ma dovrai studiare tutto quello che ti serve dalla documentazione MS
Registrato
beppo63
Jr. Member
**

Karma: +0/-102
Scollegato Scollegato

Messaggi: 97


Mostra profilo
« Risposta #2 inserita:: Febbraio 24, 2017, 02:48:23 »

code blocks mi da l'errore :
C:\Users\gi\Desktop\pixel.cpp|14|error: 'GetConsoleWindow' was not declared in this scope|

devc++ mi da :
C:\Users\gi\AppData\Local\Temp\ccsgfFjP.o   pixel.cpp:(.text+0x90): undefined reference to `__imp_SetPixel'
Registrato
oregon
Jr. Member
**

Karma: +22/-6
Scollegato Scollegato

Messaggi: 239


Mostra profilo
« Risposta #3 inserita:: Febbraio 24, 2017, 04:09:11 »

Aggiungi

#define _WIN32_WINNT 0x0500

prima di

#include <windows.h>

con Code Blocks.

Se puoi usare Visual Studio, è meglio.

DevC++ non lo considero neanche ...
Registrato
beppo63
Jr. Member
**

Karma: +0/-102
Scollegato Scollegato

Messaggi: 97


Mostra profilo
« Risposta #4 inserita:: Febbraio 24, 2017, 05:42:53 »

Adesso codeblocks mi da :
C:\Users\gi\Desktop\pixel.o:pixel.cpp|| undefined reference to `SetPixel@16'|

Comunque se non riesco a risolvere il problema , come faccio a procurarmi visual studio ?
Registrato
oregon
Jr. Member
**

Karma: +22/-6
Scollegato Scollegato

Messaggi: 239


Mostra profilo
« Risposta #5 inserita:: Febbraio 24, 2017, 06:13:35 »

Con CodeBlocks devi linkare la libreria gdi32.dll

http://stackoverflow.com/questions/5862757/how-do-i-link-to-a-library-with-codeblocks/5881751#5881751

Per Visual Studio, usa google e cerca il download della versione Community gratuita da Microsoft
Registrato
beppo63
Jr. Member
**

Karma: +0/-102
Scollegato Scollegato

Messaggi: 97


Mostra profilo
« Risposta #6 inserita:: Febbraio 24, 2017, 06:14:00 »

Ho risolto !
Dopo aver aggiunto la riga da te suggerita , ho cercato su internet e ho trovato come fare per risolvere .
il link è :
http://stackoverflow.com/questions/5862757/how-do-i-link-to-a-library-with-codeblocks/5881751#5881751

Ho semplicemente aggiunto "gdi32" nella cartella linker setting che si trova nel menù a tendina Setting ->compiler e debugger .
Registrato
beppo63
Jr. Member
**

Karma: +0/-102
Scollegato Scollegato

Messaggi: 97


Mostra profilo
« Risposta #7 inserita:: Febbraio 24, 2017, 06:15:30 »

IN OGNI MODO GRAZIE !!!
Registrato
oregon
Jr. Member
**

Karma: +22/-6
Scollegato Scollegato

Messaggi: 239


Mostra profilo
« Risposta #8 inserita:: Febbraio 24, 2017, 06:57:15 »

Hai "risolto" esattamente con il link che ti ho suggerito 30 secondi prima?Che?!?
Registrato
Max.Riservo
Global Moderator
Sr. Member
*****

Karma: +24/-0
Scollegato Scollegato

Messaggi: 850



Mostra profilo
« Risposta #9 inserita:: Febbraio 24, 2017, 09:03:53 »

Hai "risolto" esattamente con il link che ti ho suggerito 30 secondi prima?Che?!?

25 secondi per essere precisi  Ghigno
Registrato

I Moderatori invitano tutti gli Utilizzatori del forum a prendere visione del REGOLAMENTO e a rispettarlo.
beppo63
Jr. Member
**

Karma: +0/-102
Scollegato Scollegato

Messaggi: 97


Mostra profilo
« Risposta #10 inserita:: Febbraio 24, 2017, 10:30:36 »

Si ho risolto con lo stesso metodo !
Grazie comunque Oregon !
Registrato
Pagine: [1]   Vai su
  Stampa  
 
Vai a:  

Copyright © 2017 Edizioni Master SpA. p.iva : 02105820787

Tutti i diritti di proprietà letteraria e artistica riservati. - Privacy



powered by Simple Machines