DOMANDA Sudoku in C, modifica colori inseriti dal giocatore

sandro berdini

Nuovo Utente
4
0
salve a tutti, vorrei chiedere se qualcuno conosce un modo per cambiare il colore in un singolo elemento di una tabella in c fatta con le matrici…
ad esempio in un sudoku come posso colorare in un modo i numeri iniziali e in un altro modo quelli inseriti dal giocatore?
 

DispatchCode

Moderatore
Staff Forum
Utente Èlite
2,223
1,853
CPU
Intel I9-10900KF 3.75GHz 10x 125W
Dissipatore
Gigabyte Aorus Waterforce X360 ARGB
Scheda Madre
Asus 1200 TUF Z590-Plus Gaming ATX DDR4
HDD
1TB NVMe PCI 3.0 x4, 1TB 7200rpm 64MB SATA3
RAM
DDR4 32GB 3600MHz CL18 ARGB
GPU
Nvidia RTX 3080 10GB DDR6
Audio
Integrata 7.1 HD audio
Monitor
LG 34GN850
PSU
Gigabyte P850PM
Case
Phanteks Enthoo Evolv X ARGB
Periferiche
MSI Vigor GK30, mouse Logitech
Net
FTTH Aruba, 1Gb (effettivi: ~950Mb / ~480Mb)
OS
Windows 10 64bit / OpenSUSE Tumbleweed
Ciao e benvenuto!

Bhe, mi sembrano un pò poche le informazioni per poterti rispondere... dovresti dirci qualcosa di più, non sappiamo nemmeno se usi una GUI e quale libreria stai utilizzando.

Pubblica il codice, così possiamo vedere ciò che hai fatto, utilizzando il tag CODE. Qui c'è anche il regolamento della sezione.


EDIT: ho anche modificato il titolo.
 

sandro berdini

Nuovo Utente
4
0
questo è ciò che ho fatto per ora ma è ancora incompleto

C:
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
#include<string.h>
#include<stdbool.h>
#include<windows.h>
#include<conio.h>
#include <unistd.h>
void SetColor (unsigned short color)
    {
        HANDLE hCon=GetStdHandle (STD_OUTPUT_HANDLE);
        SetConsoleTextAttribute(hCon, color);
    }
    
    void COMPARE(int m[9][9],int CON[9][9])
{ int i,j;
    for(i=0;i<9;i++)
    {
        for(j=0;j<9;j++)
        {
            if(m[i][j]!=CON[i][j])
            {
                SetColor(4);
                printf("\nr: %i ; c: %i ERROR\n");
                SetColor(15);
            }
        }
            
    }
}

void cursoroff () 
    {
    HANDLE hOut = GetStdHandle(STD_OUTPUT_HANDLE);
    CONSOLE_CURSOR_INFO CCI;
    GetConsoleCursorInfo(hOut, &CCI);
    CCI.bVisible = false;
    SetConsoleCursorInfo(hOut, &CCI);
    }
void gotoxy( int column, int line ){
  COORD coord;
  coord.X = column;
  coord.Y = line;
  SetConsoleCursorPosition(
    GetStdHandle( STD_OUTPUT_HANDLE ),
    coord);
    }
void TITOLO();
int scelta();
void FACILE();
void MEDIO();
void EXTREME();
void CONTROLLO(int c[9][9],int N);
void CARICA(int m[9][9],int numeri);
void COPIATABELLA(int m[9][9],int copia[9][9]);
void SUDOKU(int m[9][9],int numeri,int copia [9][9],int CON[9][9] );
void TABELLA(int m[9][9],int copia[9][9]);
void COMPARE(int m[9][9],int CON[9][9]);

int main()
{    int i,j,n,difficolta;
    gotoxy(52,8);
    printf("BENVENUTI NEL : ");
    TITOLO();
    difficolta=scelta();
    if(difficolta==1)
    {
        FACILE();
    }
    else if(difficolta==2)
    {
        MEDIO();
        
    }
    else if (difficolta==3)
    {
        EXTREME();
    }
    
}
void FACILE()
{    int M[9][9],NUM,C[9][9],n,COPIA[9][9],controllo[9][9];
    CARICA(M,NUM);
    CONTROLLO(C,n);
    TABELLA(M,COPIA);
    COPIATABELLA(M, COPIA);
    SUDOKU(M,NUM,COPIA,controllo);        
}
void MEDIO()
{
    
}
void EXTREME()
{
    
}
void CARICA(int m[9][9],int numeri)
{    int i,j,N;

    numeri=0;
    FILE *fr;
    srand(time(NULL));
    N=1;
       if (N==0)
   {
         fr=fopen("input0.txt","r");
   }
   else
    if (N==1)
    {
          fr=fopen("input1.txt","r");
    }
    else
    if (N==2)
    {
          fr=fopen("input2.txt","r");
    }
    else
    if (N==3)
    {
          fr=fopen("input3.txt","r");
    }
    else
    if (N==4)
    {
          fr=fopen("input4.txt","r");
    }
    else
    if (N==5)
    {
          fr=fopen("input5.txt","r");
    }
    else
    if (N==6)
    {
          fr=fopen("input6.txt","r");
    }
    else
    if (N==7)
    {
          fr=fopen("input7.txt","r");
    }
    else
    if (N==8)
    {
          fr=fopen("input8.txt","r");
    }
    else
    if (N==9)
    {
          fr=fopen("input9.txt","r");
    }
    else
    if (N==10)
    {
          fr=fopen("input10.txt","r");
    }
    if (N==11)
   {
         fr=fopen("input11.txt","r");
   }
   else
    if (N==12)
    {
          fr=fopen("input12.txt","r");
    }
    else
    if (N==13)
    {
          fr=fopen("input13.txt","r");
    }
    else
    if (N==14)
    {
          fr=fopen("input14.txt","r");
    }
    else
    if (N==15)
    {
          fr=fopen("input15.txt","r");
    }
    else
    if (N==16)
    {
          fr=fopen("input16.txt","r");
    }
    else
    if (N==17)
    {
          fr=fopen("input17.txt","r");
    }
    else
    if (N==18)
    {
          fr=fopen("input18.txt","r");
    }
    else
    if (N==19)
    {
          fr=fopen("input19.txt","r");
    }
    else
    if (N==20)
    {
          fr=fopen("input20.txt","r");
    }
    else
    if (N==21)
    {
          fr=fopen("input21.txt","r");
    }
    if (N==22)
   {
         fr=fopen("input22.txt","r");
   }
   else
    if (N==23)
    {
          fr=fopen("input23.txt","r");
    }
    else
    if (N==24)
    {
          fr=fopen("input24.txt","r");
    }
    else
    if (N==25)
    {
          fr=fopen("input25.txt","r");
    }
    else
    if (N==26)
    {
          fr=fopen("input26.txt","r");
    }
    else
    if (N==27)
    {
          fr=fopen("input27.txt","r");
    }
    else
    if (N==28)
    {
          fr=fopen("input28.txt","r");
    }
    else
    if (N==29)
    {
          fr=fopen("input29.txt","r");
    }
    else
    if (N==30)
    {
          fr=fopen("input30.txt","r");
    }
    else
    if (N==31)
    {
          fr=fopen("input31.txt","r");
    }
    else
    if (N==32)
    {
          fr=fopen("input32.txt","r");
    }
   for(i=0;i<9;i++)
   {
           for(j=0;j<9;j++)
           {
           fscanf(fr,"%i",&m[i][j]);
           numeri++;
       }
   }

    
}
void CONTROLLO(int CON[9][9], int N)
 {
     int i,j;
    FILE *fr;
    N==1;
   if (N==0)
   {
         fr=fopen("control0.txt","r");
   }
   else
    if (N==1)
    {
          fr=fopen("control1.txt","r");
    }
    else
    if (N==2)
    {
          fr=fopen("control2.txt","r");
    }
    else
    if (N==3)
    {
          fr=fopen("control3.txt","r");
    }
    else
    if (N==4)
    {
          fr=fopen("control4.txt","r");
    }
    else
    if (N==5)
    {
          fr=fopen("control5.txt","r");
    }
    else
    if (N==6)
    {
          fr=fopen("control6.txt","r");
    }
    else
    if (N==7)
    {
          fr=fopen("control7.txt","r");
    }
    else
    if (N==8)
    {
          fr=fopen("control8.txt","r");
    }
    else
    if (N==9)
    {
          fr=fopen("control9.txt","r");
    }
    else
    if (N==10)
    {
          fr=fopen("control10.txt","r");
    }
    else
    if (N==11)
   {
         fr=fopen("control11.txt","r");
   }
   else
    if (N==12)
    {
          fr=fopen("control12.txt","r");
    }
    else
    if (N==13)
    {
          fr=fopen("control13.txt","r");
    }
    else
    if (N==14)
    {
          fr=fopen("control14.txt","r");
    }
    else
    if (N==15)
    {
          fr=fopen("control15.txt","r");
    }
    else
    if (N==16)
    {
          fr=fopen("control16.txt","r");
    }
    else
    if (N==17)
    {
          fr=fopen("control17.txt","r");
    }
    else
    if (N==18)
    {
          fr=fopen("control18.txt","r");
    }
    else
    if (N==19)
    {
          fr=fopen("control19.txt","r");
    }
    else
    if (N==20)
    {
          fr=fopen("control20.txt","r");
    }
    else
    if (N==21)
    {
          fr=fopen("control21.txt","r");
    }
    else
    if (N==22)
   {
         fr=fopen("control22.txt","r");
   }
   else
    if (N==23)
    {
          fr=fopen("control23.txt","r");
    }
    else
    if (N==24)
    {
          fr=fopen("control24.txt","r");
    }
    else
    if (N==25)
    {
          fr=fopen("control25.txt","r");
    }
    else
    if (N==26)
    {
          fr=fopen("control26.txt","r");
    }
    else
    if (N==27)
    {
          fr=fopen("control27.txt","r");
    }
    else
    if (N==28)
    {
          fr=fopen("control28.txt","r");
    }
    else
    if (N==29)
    {
          fr=fopen("control29.txt","r");
    }
    else
    if (N==30)
    {
          fr=fopen("control30.txt","r");
    }
    else
    if (N==31)
    {
          fr=fopen("control31.txt","r");
    }
    else
    if (N==32)
    {
          fr=fopen("control32.txt","r");
    }
   for(i=0;i<9;i++)
   {
           for(j=0;j<9;j++)
           {
           fscanf(fr,"%i",&CON[i][j]);
       }
   }
 }
void TABELLA(int m[9][9],int copia[9][9])
{ int i,j,x=0;
    printf("   0   1   2   3   4   5   6   7   8 ");
    for(i=0;i<9;i++)
    {if(i%3)
    {
    printf ("\n +---+---+---|---+---+---|---+---+---+\n |");    
    }
    else
    printf ("\n *===========|===========|===========*\n |");
          for(j=0;j<9;j++)
          {
        if(m[i][j]==0)
              { printf("   ");
              }
              else
              {  
                     printf(" %i ",m[i][j]);
              }
            
                
              if(j==2 || j==5)
              {
            printf("|");    
        }
        else
        printf("|");  
       }  
    }
    printf("\n *===========|===========|===========*");

}

void COPIATABELLA(int m[9][9],int copia[9][9])
{    int i,j;
    for(i=0;i<9;i++)
    {
        for(j=0;j<9;j++)
        {
            copia[i][j]=m[i][j];
        }
    }
}
 
void SUDOKU(int m[9][9],int numeri,int copia[9][9],int CON[9][9])
{int i,j,r,c,n; 
    do
    {
    numeri=0;
    printf("\nInserisci la riga:");
    scanf("%i",&r);
    printf("Inserisci la colonna:");
    scanf("%i",&c);
    printf("Quale numero vorresti mettere?");
    scanf("%i",&n);
    system("CLS");
    
    if(copia[r][c]==0)
    {
    m[r][c]=n;    
    m[i][j]=m[r][c];
    }
    for(i=0;i<9;i++)
    {
        for(j=0;j<9;j++)
        {
            if(m[i][j]!=0)
            numeri++;
        }
    }
    TABELLA(m, copia);
    }while(numeri!=81);
    COMPARE( m, CON);
}

int scelta()
{    char controllo;
    int selezione=1;
    int scelta=0;
    do{
    system("CLS");
    gotoxy(49,28+selezione);  //selezione c la variabile che segue le frecce su e giu
    printf("%c",(char)26);
    gotoxy(52,8);
    printf("BENVENUTO NEL:\n ");
    TITOLO();
    gotoxy(50,25);
    printf("MENU' DI SCELTA");
     gotoxy(50,29);
    printf("FACILE");
    gotoxy(50,31);
    printf("MEDIO");
    gotoxy(50,33);
    printf("EXTREME");
    controllo=getch();  
    if ((int)controllo==80 && selezione!=5) selezione=selezione+2; //mi muovo con i tasti freccia giu (80) saltando una riga
    if ((int)controllo==72 && selezione!=1) selezione=selezione-2; //o freccia su (72) saltando una riga
    if ((int)controllo==13) scelta=1; //quando clicco invio significa che ho scelto
    }while (scelta!=1);
    system("CLS");
    if (selezione==1) return 1;
    if (selezione==3) return 2;
    if (selezione==5) return 3;
    
}
void TITOLO()
{
    
gotoxy(21,10);
SetColor(170);
printf("000000");
gotoxy(21,11);
printf("00");
gotoxy(21,12);
printf("00");
gotoxy(21,13);
printf("00");
gotoxy(21,14);
printf("00");
gotoxy(21,15);
printf("000000");
gotoxy(25,16);
printf("00");
gotoxy(25,17);
printf("00");
gotoxy(25,18);
printf("00");
gotoxy(25,19);
printf("00");
gotoxy(21,20);
printf("000000");
    
    
gotoxy(29,10);
printf("00");
gotoxy(29,11);
printf("00");
gotoxy(29,12);
printf("00");
gotoxy(29,13);
printf("00");
gotoxy(29,14);
printf("00");
gotoxy(29,15);
printf("00");
gotoxy(29,16);
printf("00");
gotoxy(29,17);
printf("00");
gotoxy(29,18);
printf("00");
gotoxy(29,19);
printf("00");
gotoxy(31,20);
printf("0000000");
gotoxy(38,19);
printf("00");
gotoxy(38,18);
printf("00");
gotoxy(38,17);
printf("00");
gotoxy(38,16);
printf("00");
gotoxy(38,15);
printf("00");
gotoxy(38,14);
printf("00");
gotoxy(38,13);
printf("00");
gotoxy(38,12);
printf("00");
gotoxy(38,11);
printf("00");
gotoxy(38,10);
printf("00");

gotoxy(42,10);
printf("0000000");
gotoxy(42,11);
printf("00");
gotoxy(42,12);
printf("00");
gotoxy(42,13);
printf("00");
gotoxy(42,14);
printf("00");
gotoxy(42,15);
printf("00");
gotoxy(42,16);
printf("00");
gotoxy(42,17);
printf("00");
gotoxy(42,18);
printf("00");
gotoxy(42,19);
printf("00");
gotoxy(42,20);
printf("000000000");
gotoxy(49,11);
printf("00");
gotoxy(50,12);
printf("00");
gotoxy(51,13);
printf("00");
gotoxy(52,14);
printf("00");
gotoxy(53,15);
printf("00");
gotoxy(53,16);
printf("00");
gotoxy(52,17);
printf("00");
gotoxy(51,18);
printf("00");
gotoxy(50,19);
printf("00");
gotoxy(49,20);
printf("00");

gotoxy(59,10);
printf("000000");
gotoxy(57,11);
printf("00");
gotoxy(57,12);
printf("00");
gotoxy(57,13);
printf("00");
gotoxy(57,14);
printf("00");
gotoxy(57,15);
printf("00");
gotoxy(57,16);
printf("00");
gotoxy(57,17);
printf("00");
gotoxy(57,18);
printf("00");
gotoxy(57,19);
printf("00");
gotoxy(59,20);
printf("000000");
gotoxy(65,19);
printf("00");
gotoxy(65,18);
printf("00");
gotoxy(65,17);
printf("00");
gotoxy(65,16);
printf("00");
gotoxy(65,15);
printf("00");
gotoxy(65,14);
printf("00");
gotoxy(65,13);
printf("00");
gotoxy(65,12);
printf("00");
gotoxy(65,11);
printf("00");
gotoxy(69,10);
printf("00");
gotoxy(69,11);
printf("00");
gotoxy(69,12);
printf("00");
gotoxy(69,13);
printf("00");
gotoxy(69,14);
printf("00");
gotoxy(69,15);
printf("00");
gotoxy(69,16);
printf("00");
gotoxy(69,17);
printf("00");
gotoxy(69,18);
printf("00");
gotoxy(69,19);
printf("00");
gotoxy(69,20);
printf("00");
gotoxy(70,15);
printf("00");
gotoxy(71,14);
printf("00");
gotoxy(72,13);
printf("00");
gotoxy(73,12);
printf("00");
gotoxy(74,11);
printf("00");
gotoxy(75,10);
printf("00");
gotoxy(70,15);
printf("00");
gotoxy(71,16);
printf("00");
gotoxy(72,17);
printf("00");
gotoxy(73,18);
printf("00");
gotoxy(74,19);
printf("00");
gotoxy(75,20);
printf("00");


gotoxy(79,10);
printf("00");
gotoxy(79,11);
printf("00");
gotoxy(79,12);
printf("00");
gotoxy(79,13);
printf("00");
gotoxy(79,14);
printf("00");
gotoxy(79,15);
printf("00");
gotoxy(79,16);
printf("00");
gotoxy(79,17);
printf("00");
gotoxy(79,18);
printf("00");
gotoxy(79,19);
printf("00");
gotoxy(81,20);
printf("0000000");
gotoxy(88,19);
printf("00");
gotoxy(88,18);
printf("00");
gotoxy(88,17);
printf("00");
gotoxy(88,16);
printf("00");
gotoxy(88,15);
printf("00");
gotoxy(88,14);
printf("00");
gotoxy(88,13);
printf("00");
gotoxy(88,12);
printf("00");
gotoxy(88,11);
printf("00");
gotoxy(88,10);
printf("00");
SetColor(7);
}
 
Ultima modifica da un moderatore:

DispatchCode

Moderatore
Staff Forum
Utente Èlite
2,223
1,853
CPU
Intel I9-10900KF 3.75GHz 10x 125W
Dissipatore
Gigabyte Aorus Waterforce X360 ARGB
Scheda Madre
Asus 1200 TUF Z590-Plus Gaming ATX DDR4
HDD
1TB NVMe PCI 3.0 x4, 1TB 7200rpm 64MB SATA3
RAM
DDR4 32GB 3600MHz CL18 ARGB
GPU
Nvidia RTX 3080 10GB DDR6
Audio
Integrata 7.1 HD audio
Monitor
LG 34GN850
PSU
Gigabyte P850PM
Case
Phanteks Enthoo Evolv X ARGB
Periferiche
MSI Vigor GK30, mouse Logitech
Net
FTTH Aruba, 1Gb (effettivi: ~950Mb / ~480Mb)
OS
Windows 10 64bit / OpenSUSE Tumbleweed
Per il colore puoi fare come stai già facendo, richiamando la funzione che setta il colore prima della stampa a video. Hai provato in questo modo?

Comunque le funzioni non andrebbero scritte in maiuscolo, così come le variabili. Ho visto a colpo d'occhio qualche errore, un pò troppi per un codice così lungo... ho il sospetto non sia mai stato compilato, o che se lo è stato ci sono poi errori in seguito.

Per dire, a CONTROLLO() passi la variabile 'n', che non è stata inizializzata, quindi non verranno eseguiti gli IF di quella funzione e "fr" sarà non inizializzato (non avrai un handle, quindi dovresti avere errore in lettura).
In questa stessa funzione stai bypassando, penso per test, il valore di N (che ripeto, non andrebbe in maiuscolo) ma appunto, non essendo stata inizializzata la variabile da parte del chiamante non entrerai in nessuno degli IF. Il bypass a cui mi riferisco è N==1;, che è sbagliato in quanto non stai assegnando ma facendo una comparazione (quindi appunto, il valore di N non cambia).

Anche la selezione dei file potresti rivederla, rimuovendo tutti quegli if. ?
 
  • Mi piace
Reazioni: Andretti60

sandro berdini

Nuovo Utente
4
0
Se uso la funzione SetColor il programma colora tutta la tabella e non solo i numeri che mi interessano.
Il programma è fatto un po' male perché ora mi sto concentrando sul testare se funzionano la tabella e l'inserimento dei numeri.
N dovrebbe avere valore 1 perché sto prendendo in esempio un solo file, più avanti assegnerò un numero random da 0 a 32
 

M1n021

Nuovo Utente
143
68
Ciao, ma il programma di preciso in cosa consiste? E' un risolutore oppure consente semplicemente all'utente di giocare sfruttando uno schema la cui soluzione è da considerarsi nota?
 

sandro berdini

Nuovo Utente
4
0
É un programma che permette all’utilizzatore di giocare a sudoku con schede e soluzioni pre impostate
Post unito automaticamente:

avrei anche un’altra domanda, dato che vorrei sfoltire un po’ il programma togliendo tutti gli if: c’è un modo che mi permetta di leggere una cosa del tipo “input.n” in cui n è una variabile? Non so se mi spiego, vorrei associare una stringa ad una variabile numerica
 
Ultima modifica:

DispatchCode

Moderatore
Staff Forum
Utente Èlite
2,223
1,853
CPU
Intel I9-10900KF 3.75GHz 10x 125W
Dissipatore
Gigabyte Aorus Waterforce X360 ARGB
Scheda Madre
Asus 1200 TUF Z590-Plus Gaming ATX DDR4
HDD
1TB NVMe PCI 3.0 x4, 1TB 7200rpm 64MB SATA3
RAM
DDR4 32GB 3600MHz CL18 ARGB
GPU
Nvidia RTX 3080 10GB DDR6
Audio
Integrata 7.1 HD audio
Monitor
LG 34GN850
PSU
Gigabyte P850PM
Case
Phanteks Enthoo Evolv X ARGB
Periferiche
MSI Vigor GK30, mouse Logitech
Net
FTTH Aruba, 1Gb (effettivi: ~950Mb / ~480Mb)
OS
Windows 10 64bit / OpenSUSE Tumbleweed
Se uso la funzione SetColor il programma colora tutta la tabella e non solo i numeri che mi interessano.
Il programma è fatto un po' male perché ora mi sto concentrando sul testare se funzionano la tabella e l'inserimento dei numeri.
N dovrebbe avere valore 1 perché sto prendendo in esempio un solo file, più avanti assegnerò un numero random da 0 a 32

L'unica soluzione che mi viene in mente è usare ASCII escape codes . Non tutti i terminali li supportano, verifica bene su wiki e in rete.

Per avere N=1 devi solo correggere togliendo la N. Ma bada bene che quando userai il parametro della funzione dovrai correggere il codice però.
 

Entra

oppure Accedi utilizzando
Discord Ufficiale Entra ora!

Discussioni Simili