Судоку на C выкладываю исходный код и игру - C (СИ)

Узнай цену своей работы

Формулировка задачи:

#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#include <windows.h>
#include <time.h>

int sudoku[9][9];
int x,y;
bool povtor[9][9];
bool lg=true;
bool kg=false;
HANDLE hConsole = GetStdHandle(STD_OUTPUT_HANDLE);
 
void gotoxy(int x, int y)
{
    HANDLE hConsole = GetStdHandle(STD_OUTPUT_HANDLE);
    COORD coord = {x, y};
    SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), coord);
    SetConsoleTextAttribute(hConsole, 12);
    return;
}
 
void zapolnenie()
{
    FILE* f;
    int kolichestvo;
    int num;
    f = fopen("sudoku.txt", "r");
    if (!f)
    {
        printf("ЋиЁЎЄa!");
        getch();
        exit(0);
    }
    fscanf(f, "%i", &kolichestvo);
    num = rand() % kolichestvo + 1; 
    for(int k = 0; k < num; k++)
    {
        for(int i=0;i<9;i++)
            for(int j=0;j<9;j++)
                fscanf(f, "%i", &sudoku[j][i]);
    }
    fclose(f);
 
    for(int i=0;i<9;i++)
        for(int j=0;j<9;j++)
            if(sudoku[i][j]==0)
                povtor[i][j]=true;
            else 
                povtor[i][j]=false;
}
 
void pechat()
{
    HANDLE hConsole = GetStdHandle(STD_OUTPUT_HANDLE);
    SetConsoleTextAttribute(hConsole, 15);
  printf("\n\n");
  SetConsoleTextAttribute(hConsole,14);
  printf("                    ЙНННЛНННЛНННЛНННЛНННЛНННЛНННЛНННЛННН»\n");
  SetConsoleTextAttribute(hConsole,15 );
  SetConsoleTextAttribute(hConsole,14);
  printf("                    є");SetConsoleTextAttribute(hConsole,15 );printf("   є   є   ");SetConsoleTextAttribute(hConsole,14);printf("є");SetConsoleTextAttribute(hConsole, 15 );printf("   є   є   ");SetConsoleTextAttribute(hConsole,14);printf("є   ");SetConsoleTextAttribute(hConsole,15);printf("є   є   ");SetConsoleTextAttribute(hConsole,14);printf("є\n");
  printf("                    М");SetConsoleTextAttribute(hConsole,15 );printf("НННОНННОННН");SetConsoleTextAttribute(hConsole,14);printf("О");SetConsoleTextAttribute(hConsole,15 );printf("НННОНННОННН");SetConsoleTextAttribute(hConsole,14);printf("О");SetConsoleTextAttribute(hConsole,15 );printf("НННОНННОННН");SetConsoleTextAttribute(hConsole,14);printf("№\n");
  printf("                    є");SetConsoleTextAttribute(hConsole,15 );printf("   є   є   ");SetConsoleTextAttribute(hConsole,14);printf("є");SetConsoleTextAttribute(hConsole, 15 );printf("   є   є   ");SetConsoleTextAttribute(hConsole,14);printf("є   ");SetConsoleTextAttribute(hConsole,15);printf("є   є   ");SetConsoleTextAttribute(hConsole,14);printf("є\n");
  printf("                    М");SetConsoleTextAttribute(hConsole,15 );printf("НННОНННОННН");SetConsoleTextAttribute(hConsole,14);printf("О");SetConsoleTextAttribute(hConsole,15 );printf("НННОНННОННН");SetConsoleTextAttribute(hConsole,14);printf("О");SetConsoleTextAttribute(hConsole,15 );printf("НННОНННОННН");SetConsoleTextAttribute(hConsole,14);printf("№\n");
  printf("                    є");SetConsoleTextAttribute(hConsole,15 );printf("   є   є   ");SetConsoleTextAttribute(hConsole,14);printf("є");SetConsoleTextAttribute(hConsole, 15 );printf("   є   є   ");SetConsoleTextAttribute(hConsole,14);printf("є   ");SetConsoleTextAttribute(hConsole,15);printf("є   є   ");SetConsoleTextAttribute(hConsole,14);printf("є\n");
  printf("                    МНННОНННОНННОНННОНННОНННОНННОНННОННН№\n");
  printf("                    є");SetConsoleTextAttribute(hConsole,15 );printf("   є   є   ");SetConsoleTextAttribute(hConsole,14);printf("є");SetConsoleTextAttribute(hConsole, 15 );printf("   є   є   ");SetConsoleTextAttribute(hConsole,14);printf("є   ");SetConsoleTextAttribute(hConsole,15);printf("є   є   ");SetConsoleTextAttribute(hConsole,14);printf("є\n");
  printf("                    М");SetConsoleTextAttribute(hConsole,15 );printf("НННОНННОННН");SetConsoleTextAttribute(hConsole,14);printf("О");SetConsoleTextAttribute(hConsole,15 );printf("НННОНННОННН");SetConsoleTextAttribute(hConsole,14);printf("О");SetConsoleTextAttribute(hConsole,15 );printf("НННОНННОННН");SetConsoleTextAttribute(hConsole,14);printf("№\n");
  printf("                    є");SetConsoleTextAttribute(hConsole,15 );printf("   є   є   ");SetConsoleTextAttribute(hConsole,14);printf("є");SetConsoleTextAttribute(hConsole, 15 );printf("   є   є   ");SetConsoleTextAttribute(hConsole,14);printf("є   ");SetConsoleTextAttribute(hConsole,15);printf("є   є   ");SetConsoleTextAttribute(hConsole,14);printf("є\n");
  printf("                    М");SetConsoleTextAttribute(hConsole,15 );printf("НННОНННОННН");SetConsoleTextAttribute(hConsole,14);printf("О");SetConsoleTextAttribute(hConsole,15 );printf("НННОНННОННН");SetConsoleTextAttribute(hConsole,14);printf("О");SetConsoleTextAttribute(hConsole,15 );printf("НННОНННОННН");SetConsoleTextAttribute(hConsole,14);printf("№\n");
  printf("                    є");SetConsoleTextAttribute(hConsole,15 );printf("   є   є   ");SetConsoleTextAttribute(hConsole,14);printf("є");SetConsoleTextAttribute(hConsole, 15 );printf("   є   є   ");SetConsoleTextAttribute(hConsole,14);printf("є   ");SetConsoleTextAttribute(hConsole,15);printf("є   є   ");SetConsoleTextAttribute(hConsole,14);printf("є\n");
  printf("                    МНННОНННОНННОНННОНННОНННОНННОНННОННН№\n");
  printf("                    є");SetConsoleTextAttribute(hConsole,15 );printf("   є   є   ");SetConsoleTextAttribute(hConsole,14);printf("є");SetConsoleTextAttribute(hConsole, 15 );printf("   є   є   ");SetConsoleTextAttribute(hConsole,14);printf("є   ");SetConsoleTextAttribute(hConsole,15);printf("є   є   ");SetConsoleTextAttribute(hConsole,14);printf("є\n");
  printf("                    М");SetConsoleTextAttribute(hConsole,15 );printf("НННОНННОННН");SetConsoleTextAttribute(hConsole,14);printf("О");SetConsoleTextAttribute(hConsole,15 );printf("НННОНННОННН");SetConsoleTextAttribute(hConsole,14);printf("О");SetConsoleTextAttribute(hConsole,15 );printf("НННОНННОННН");SetConsoleTextAttribute(hConsole,14);printf("№\n");
  printf("                    є");SetConsoleTextAttribute(hConsole,15 );printf("   є   є   ");SetConsoleTextAttribute(hConsole,14);printf("є");SetConsoleTextAttribute(hConsole, 15 );printf("   є   є   ");SetConsoleTextAttribute(hConsole,14);printf("є   ");SetConsoleTextAttribute(hConsole,15);printf("є   є   ");SetConsoleTextAttribute(hConsole,14);printf("є\n");
  printf("                    М");SetConsoleTextAttribute(hConsole,15 );printf("НННОНННОННН");SetConsoleTextAttribute(hConsole,14);printf("О");SetConsoleTextAttribute(hConsole,15 );printf("НННОНННОННН");SetConsoleTextAttribute(hConsole,14);printf("О");SetConsoleTextAttribute(hConsole,15 );printf("НННОНННОННН");SetConsoleTextAttribute(hConsole,14);printf("№\n");
  printf("                    є");SetConsoleTextAttribute(hConsole,15 );printf("   є   є   ");SetConsoleTextAttribute(hConsole,14);printf("є");SetConsoleTextAttribute(hConsole, 15 );printf("   є   є   ");SetConsoleTextAttribute(hConsole,14);printf("є   ");SetConsoleTextAttribute(hConsole,15);printf("є   є   ");SetConsoleTextAttribute(hConsole,14);printf("є\n");
  printf("                    ИНННКНННКНННКНННКНННКНННКНННКНННКНННј\n");

  for(int i=0;i<9;i++)
        for(int j=0;j<9;j++)
            if(sudoku[i][j]!=0)
            {
                gotoxy(i*4+22,j*2+3);
                printf("%i",sudoku[i][j]);
            }
        
}
void proverka()
{
    bool digit[9];
    bool oshibka;
    for(int i=0;i<9;i++)
    {
        oshibka=false;
        for(int j=0;j<9;j++)
            digit[j]=false;
        for(int j=0;j<9;j++)
        {
            if(sudoku[i][j]==0)
            {   
                oshibka=true;
                x=i;
                y=j;
                break;
            }
            if(digit[sudoku[i][j]-1]==true)
            {   
                oshibka=true;
                x=i;
                y=j;
                break;
            }
            digit[sudoku[i][j]-1]=true;
        }
        if(oshibka) break;
    }
    if(!oshibka)
    {
        for(int i=0;i<9;i++)
        {
            oshibka=false;
            for(int j=0;j<9;j++)
                digit[j]=false;
            for(int j=0;j<9;j++)
            {
                if(sudoku[j][i]==0)
                {   
                    oshibka=true;
                    x=i;
                    y=j;
                    break;
                }
                if(digit[sudoku[j][i]-1]==true)
                {   
                    oshibka=true;
                    x=i;
                    y=j;
                    break;
                }
                digit[sudoku[j][i]-1]=true;
            }
            if(oshibka) break;
        }
    }
    if(oshibka==true)
    {
        gotoxy(0,0);
        if(lg==true) 
        {
            SetConsoleTextAttribute(hConsole,6|10); 
            printf("ЋиЁЎЄ\xa0 ў бва®ЄҐ(%i) бв®«ЎжҐ(%i)     ",y+1,x+1);
        }
        if(kg==true)    
        {
            SetConsoleTextAttribute(hConsole,6|10); 
            printf("Error in column(%i) row(%i)            ",y+1,x+1);
        }
        gotoxy(x*4+22,y*2+3);
        return;
 
    }
        if(kg==true) 
        {
            gotoxy(0,0);
            SetConsoleTextAttribute(hConsole,6|10);
            printf("                                        ");
            printf("You won ! Excelent!");
        }
        if(lg==true) 
        {
            gotoxy(0,0);
            SetConsoleTextAttribute(hConsole,6|10);
            printf("                                        ");
            printf("‚л Ї®ЎҐ¤Ё«Ё ! ‚Ґ«ЁЄ®«ҐЇ*® !");
        }

}
 
void cell(char c,int x, int y)///заполнение одной ячейки
{
    HANDLE hConsole = GetStdHandle(STD_OUTPUT_HANDLE);
    if(povtor[x][y]==true)
    {
        sudoku[x][y]=c-0x30;
        SetConsoleTextAttribute(hConsole, 8|3);
        printf("%c",c);
        gotoxy(x*4+22,y*2+3);
    }
            
}
bool vvod()
{
    
    while(true)
    {
        int cc1 = getch();

        if(cc1=='1' | cc1=='2' | cc1=='3' | cc1=='4' | cc1=='5' | cc1=='6' | cc1=='7' | cc1=='8' | cc1=='9') 
                cell(cc1,x,y);  

        if(cc1==224)
        {
            
            int cc2=getch();
            switch(cc2)
            {
                 case 72://вверх
                    if(y!=0) y--; ////или if(y>0) y--;
                    break;
                 case 80://вниз
                    if(y<8) y++;
                      break;
                 case 75://влево
                    if(x>0) x--;
                      break;
                 case 77://вправо
                    if(x!=8) x++;
                      break;
            }
 
           gotoxy(x*4+22,y*2+3);
                
         }
        if(cc1==13) break;
        if(cc1==32)
        {
            zapolnenie();
            gotoxy(0,0);
            pechat();
        }
        if(cc1==27) return(true);
        
        if (cc1 == 'l')
        {
            if (lg == true)
            {
                lg = false;
                kg = true;
            }
            else
            {
                lg = true;
                kg = false;
            }
        }

        HANDLE hConsole = GetStdHandle(STD_OUTPUT_HANDLE);
        if(kg==true) 
        {
                gotoxy(59,3);
                printf("                     ");
                gotoxy(59,5);   
                printf("                     ");
                gotoxy(59,7);
                printf("                     ");
                gotoxy(59,9); 
                printf("                     ");
                gotoxy(59,11);
                printf("                     ");
                gotoxy(59,15);
                printf("                     ");
                gotoxy(59,17);
                printf("                     ");
                gotoxy(59,19);
                printf("                     ");
                gotoxy(59,3);SetConsoleTextAttribute(hConsole,6|10);    
                printf("Move(\x18,\x19,\x1a,\x1b)");
                gotoxy(59,5);SetConsoleTextAttribute(hConsole,6|10);        
                printf("Change(Space)");
                gotoxy(59,7);SetConsoleTextAttribute(hConsole,6|10);
                printf("Language(L)");
                gotoxy(59,9);SetConsoleTextAttribute(hConsole,6|10);
                printf("Check(Enter)");
                gotoxy(59,11);SetConsoleTextAttribute(hConsole,6|10);   
                printf("Exit(Esc)");
                gotoxy(59,15);SetConsoleTextAttribute(hConsole,7|9);    
                printf("Sudoku v 2.3");
                gotoxy(59,17);SetConsoleTextAttribute(hConsole,7|9);    
                printf("20 december 2012");
                gotoxy(59,19);SetConsoleTextAttribute(hConsole,7|9);
                printf("All rights reserved");
                gotoxy(x*4+22,y*2+3);
                
        }
        if(lg==true) 
        {
            gotoxy(59,3);
            printf("                     ");
            gotoxy(59,5);   
            printf("                     ");
            gotoxy(59,7);
            printf("                     ");
            gotoxy(59,9); 
            printf("                     ");
            gotoxy(59,11);
            printf("                     ");
            gotoxy(59,15);
            printf("                     ");
            gotoxy(59,17);
            printf("                     ");
            gotoxy(59,19);
            printf("                     ");
            gotoxy(59,3);SetConsoleTextAttribute(hConsole,6|10);    
            printf("“Їа*ў«Ґ*ЁҐ(\x18,\x19,\x1a,\x1b)");
            gotoxy(59,5);SetConsoleTextAttribute(hConsole,6|10);        
            printf("‘¬Ґ*Ёвм(Џа®ЎҐ«)");
            gotoxy(59,7);SetConsoleTextAttribute(hConsole,6|10);    
            printf("џ§лЄ(L)");
            gotoxy(59,9);SetConsoleTextAttribute(hConsole,6|10);    
            printf("Џа®ўҐаЄ*(Enter)");
            gotoxy(59,11);SetConsoleTextAttribute(hConsole,6|10);   
            printf("‚л室(Esc)");
            gotoxy(59,15);SetConsoleTextAttribute(hConsole,7|9);    
            printf("‘㤮Єг ўҐабЁп 2.3");
            gotoxy(59,17);SetConsoleTextAttribute(hConsole,7|9);    
            printf("20 ¤ҐЄ*Ўап 2012");
            gotoxy(59,19);SetConsoleTextAttribute(hConsole,7|9);
            printf("‚ᥠЇа*ў* §*йЁйҐ*л");
            gotoxy(x*4+22,y*2+3);
                
        }
    }
    
    return(false);
    
}
 
int main(int argc, char* argv[])
{
    HANDLE hConsole = GetStdHandle(STD_OUTPUT_HANDLE);
        gotoxy(59,3);SetConsoleTextAttribute(hConsole,6|10);    
        printf("“Їа*ў«Ґ*ЁҐ(\x18,\x19,\x1a,\x1b)");
        gotoxy(59,5);SetConsoleTextAttribute(hConsole,6|10);        
        printf("‘¬Ґ*Ёвм(Џа®ЎҐ«)");
        gotoxy(59,7);SetConsoleTextAttribute(hConsole,6|10);    
        printf("џ§лЄ(L)");
        gotoxy(59,9);SetConsoleTextAttribute(hConsole,6|10);    
        printf("Џа®ўҐаЄ*(Enter)");
        gotoxy(59,11);SetConsoleTextAttribute(hConsole,6|10);   
        printf("‚л室(Esc)");
        gotoxy(59,15);SetConsoleTextAttribute(hConsole,7|9);    
        printf("‘㤮Єг ўҐабЁп 2.3");
        gotoxy(59,17);SetConsoleTextAttribute(hConsole,7|9);    
        printf("20 ¤ҐЄ*Ўап 2012");
        gotoxy(59,19);SetConsoleTextAttribute(hConsole,7|9);
        printf("‚ᥠЇа*ў* §*йЁйҐ*л");
        gotoxy(x*4+22,y*2+3);
    
    gotoxy(0,0);
    srand(clock());
    CONSOLE_CURSOR_INFO cursor_size = {100, true};
    SetConsoleCursorInfo(hConsole, &cursor_size);
    zapolnenie();
    pechat();
    x=0;y=0;
    gotoxy(x*4+22,y*2+3);
    while(true)
    {
        if(vvod()==true)  return 0;
        proverka();
    }
    
}

Решение задачи: «Судоку на C выкладываю исходный код и игру»

textual
Листинг программы
printf("‚л Ї®ЎҐ¤Ё«Ё ! ‚Ґ«ЁЄ®«ҐЇ*® !");

Оцени полезность:

10   голосов , оценка 4.4 из 5
Похожие ответы