Sudoku (Game) Implementaion In C

Sudoku is a logic-based,[1][2] combinatorial[3] number-placement puzzle. The objective is to fill a 9×9 grid with digits so that each column, each row, and each of the nine 3×3 sub-grids that compose the grid (also called "boxes", "blocks", "regions", or "sub-squares") contains all of the digits from 1 to 9. The puzzle setter provides a partially completed grid, which typically has a unique solution.
It is in C(Language) implementation ,I have used only ASCII code to design graphics which is an interesting part of this program.


Code:
  /*
    Author : Mohammad Usman
    Date  : 09/06/2008
  */
  #include<stdlib.h>
  #include<conio.h>
  #include<stdio.h>
  #include<graphics.h>
  #include<ctype.h>
  #include<process.h>
  #include<dos.h>
  #define L 75 //ASCII of Left Move
  #define R 77 //ASCII of Right Move
  #define U 72 //ASCII of Up Move
  #define D 80 //ASCII of Down Move
  void welcome();
  void initia();
  void main();
  void time();
  void bo_x();
  void hlevel();
  void mlevel();
  void elevel();
  //Initial Design fram (outer border)
  void initia()
  {
    int i,j,k;
    clrscr(); textcolor(7);
    printf("%c",201);
    for(i=0;i<=77;i++)
    {
    printf("%c",205);
    }
    printf("%c",187);
    for(i=1;i<48;i++)
    {
    gotoxy(1,1+i);
    printf("%c",186);
    gotoxy(80,1+i);
    printf("%c",186);
    }
   
    gotoxy(1,49);
    printf("%c",200);
   
    for(i=0;i<=77;i++)
    printf("%c",205);
    gotoxy(80,49);
    printf("%c",188);
   
  }
  //Sudoku Structure
  void stru()
  {
    int i,j,k;
    char ch;
    clrscr();
    initia();
    textcolor(7);
    gotoxy(20,16);
    cprintf("%c",201);
    for(i=0;i<=7;i++)
    {  if(i==2||i==5)
      {
        cprintf("%c%c%c%c",205,205,205,203);
      }
      else
        cprintf("%c%c%c%c",205,205,205,209);
    }
    cprintf("%c%c%c%c",205,205,205,187);
    for(j=0;j<=7;j++)
    {
      gotoxy(20,19+3*j);
      cprintf("%c",199);
      for(i=0;i<=7;i++)
      { 
        if(i==2||i==5)
        {
          cprintf("%c%c%c%c",196,196,196,206);
        }
        else
          cprintf("%c%c%c%c",196,196,196,197);
      }
      cprintf("%c%c%c%c",196,196,196,182);
     }
    gotoxy(20,43);
    cprintf("%c",200);
    for(i=0;i<=7;i++)
    {  if(i==2||i==5)
      {
        cprintf("%c%c%c%c",205,205,205,202);
      }
      else
        cprintf("%c%c%c%c",205,205,205,207);
    }   
    cprintf("%c%c%c%c",205,205,205,188);
    for(j=0;j<=3;j++)
    {
      for(i=0;i<=25;i++)
      {
      gotoxy(20+12*j,17+i);
      cprintf("%c",186);
      }
    }
    for(i=0;i<=1;i++)
    {
      gotoxy(20,25+i*9);
      cprintf("%c",204);
      gotoxy(56,25+i*9);
      cprintf("%c",185);
    }
    gotoxy(21,34);
    for(i=0;i<=7;i++)
    cprintf("%c%c%c%c",205,205,205,216);
    cprintf("%c%c%c",205,205,205);
    gotoxy(21,25);
    for(i=0;i<=7;i++)
    cprintf("%c%c%c%c",205,205,205,206);
    gotoxy(21,25);
    for(i=0;i<=7;i++)
      cprintf("%c%c%c%c",205,205,205,216);
    cprintf("%c%c%c",205,205,205);
    gotoxy(32,34);
    cprintf("%c",206);
    gotoxy(44,34);
    cprintf("%c",206);
    gotoxy(32,25);
    cprintf("%c",206);
    gotoxy(44,25);
    cprintf("%c",206);
    for(i=0;i<=7;i++)
    {       
      for(j=1;j<=25;j++)
      {
        gotoxy(24+i*4,16+j);
        if(j==3||j==6||j==9||j==12||j==15||j==18||j==21||j==24)
        { }
      else
        cprintf("%c",179);
      }
      gotoxy(24+i*4,42);
      cprintf("%c",179);
    }
    for(i=0;i<=1;i++)
    {
      for(j=0;j<=25;j++)
      {
        if(j==8||j==17)
        {
          gotoxy(33+j*8,16+i);
          puts(" ");
        }
        else
          gotoxy(32+i*12,17+j);
          printf("%c",186);
          gotoxy(22,18);
        }
      }
    gotoxy(20,5);
    textcolor(14);
    cprintf("Instruction for Play.");
    gotoxy(20,7);
    cprintf("1.Use arrow key for move your Cursor ALL direction.");
    gotoxy(20,9);
    cprintf("2.Press enter for Exit.");
    gotoxy(20,11);
    cprintf("3.Press Backspace for back to Menu.");
    gotoxy(22,18);
  }
  //Welcome Window
  void welcome()
  {
  int i;
  clrscr();
    for(i=1;!kbhit();i++)
    {
      clrscr();
      delay(1000);
      gotoxy(28,25);
      textcolor(i+1);  
      printf("%c Welcom to Usman's SUDOKU %c",3,3);
      delay(1000);
    }
  }
  /* menu */
  void menu()
  {
    int ch,i;
    clrscr();
    initia();
    bo_x();
   
    textcolor(15);
    gotoxy(28,20);
    printf("1.High Level Sudoku.");
    gotoxy(28,22);
    printf("2.Midile Level Sudoku.");
    gotoxy(28,24);
    printf("3.Easey Level Sudoku. ");
    gotoxy(28,26);
    printf("4.Construct own Sudoku.");
    gotoxy(28,28);
    printf("5.Exit ");
    gotoxy(28,30);
    printf("Please Enter your choise.");
    gotoxy(28,30);
    scanf("%d",&ch);
    gotoxy(22,18);
    switch(ch)
    {
      case 1:
        stru();
        gotoxy(22,18);
        hlevel();
   
        break;
      case 2 :
        stru();
        gotoxy(22,18);
        mlevel();
        break;
      case 3 :
        stru();
        gotoxy(22,18);
        elevel();
        break;
      case 4 :
        stru();
        break;
      case 5 :
        exit(0);
        break;
      default:gotoxy(30,25);
        for(i=1;!kbhit();i++)
        {
          clrscr();
          delay(1000);
          gotoxy(28,23);
          textcolor(i+1);
          cprintf("%c Sorry Worng Choise! %c",6,6);
          gotoxy(23,25);
          textcolor(i);
          cprintf("%c Press Enter For Back to Menu! %c",15,15);
          gotoxy(28,27);
          textcolor(i+2);
          cprintf("%c Press ESC For Exit! %c",6,6);
          delay(1000);
        }
        ch=getch();
        if(ch==1||ch==69||ch==102)
        exit(0);
        else if(ch=='\r')
        menu();
   
    }
   
  }
  //For Box
  void bo_x()
  {
    int i,j;
    for(i=0;i<=28;i++)
    {
      gotoxy(26+i,18);
      printf("%c",4);
      gotoxy(26+i,32);
      printf("%c",4);
      for(j=0;j<=13;j++)
      {
        gotoxy(26,18+j);
        printf("%c",4);
        gotoxy(54,18+j);
        printf("%c",4);
      }
    }
  }
   
  //For cursor Move
  int curmov(void)
  {
    int i,j,a;
    char ch;
    gotoxy(22,18);
    while(ch!='\r')
    {
      i=wherex();
      j=wherey();
      ch=getch();
      textcolor(2); // User insert color green
      if(ch==R&&i!=54)
      {
      gotoxy(4+i,j);
      }
      else if(ch==L&&i!=22)
      {
      gotoxy(i-4,j); 
      }
      else if(ch==D&&j!=42)
      {
      gotoxy(i,3+j); 
      }
      else if(ch==U&&j!=18)
        {  gotoxy(i,j-3);
      }
      else if(ch==49||ch==50||ch==51||ch==52||ch==53||ch==54||ch==55||ch==56||ch==57)
      {
      putch(ch);
      gotoxy(i,j);
      }
      else if(ch==8)/*back to main from menu*/
      main();
    }
    return 0;
  }
  void time(void/*time for starting your game*/
  {
    char datebuf[9];
    char timebuf[9];
    _strdate(datebuf);
    _strtime(timebuf);
    gotoxy(49,48);
    textcolor(2);
    cprintf("Date: %s Time: %s\n",datebuf,timebuf);
   
   }
  void hlevel()/*kinds of level*/
  {
    gotoxy(22,18);
    textcolor(4);  // insert number red
    cprintf("9");
    gotoxy(34,18);
    cprintf("3");
    gotoxy(22,36);
    cprintf("3");
    gotoxy(22,39);
    cprintf("7");
    gotoxy(26,27);
    cprintf("4");
    gotoxy(26,33);
    cprintf("8");
    gotoxy(30,21);
    cprintf("6");
    gotoxy(30,30);
    cprintf("1");
    gotoxy(34,24);
    cprintf("8");
    gotoxy(34,33);
    cprintf("7");
    gotoxy(38,27);
    cprintf("8");
    gotoxy(38,30);
    cprintf("4");
    gotoxy(38,33);
    cprintf("5");
    gotoxy(42,27);
    cprintf("9");
    gotoxy(42,36);
    cprintf("6");
    gotoxy(42,42);
    cprintf("1");
    gotoxy(46,30);
    cprintf("3");
    gotoxy(46,39);
    cprintf("9");
    gotoxy(50,27);
    cprintf("6");
    gotoxy(50,33);
    cprintf("2");
    gotoxy(54,21);
    cprintf("7");
    gotoxy(54,24);
    cprintf("4");
    gotoxy(54,42);
    cprintf("8");
  }
  void mlevel()/*kinds of level*/
  {
    gotoxy(22,18);
    textcolor(4);  // insert number red
    cprintf("3");
    gotoxy(50,18);
    cprintf("2");
    gotoxy(54,18);
    cprintf("1");
    gotoxy(22,33);
    cprintf("8");
    gotoxy(22,42);
    cprintf("6");
    gotoxy(26,21);
    cprintf("7");
    gotoxy(26,27);
    cprintf("5");
    gotoxy(26,42);
    cprintf("9");
    gotoxy(30,33);
    cprintf("2");
    gotoxy(30,36);
    cprintf("1");
    gotoxy(34,21);
    cprintf("8");
    gotoxy(34,27);
    cprintf("9");
    gotoxy(34,39);
    cprintf("7");
    gotoxy(38,30);
    cprintf("6");
    gotoxy(42,21);
    cprintf("4");
    gotoxy(42,33);
    cprintf("1");
    gotoxy(42,39);
    cprintf("2");
    gotoxy(46,24);
    cprintf("9");
    gotoxy(46,27);
    cprintf("4");
    gotoxy(50,33);
    cprintf("3");
    gotoxy(50,39);
    cprintf("8");
    gotoxy(54,18);
    cprintf("1");
    gotoxy(54,27);
    cprintf("7");
    gotoxy(54,42);
    cprintf("5");
  }
  void elevel()/*kinds of level*/
  {
    gotoxy(22,18);
    textcolor(4);  // insert number red
    cprintf("6");
    gotoxy(22,21);
    cprintf("3");
    gotoxy(22,30);
    cprintf("7");
    gotoxy(22,33);
    cprintf("9");
    gotoxy(22,42);
    cprintf("2");
    gotoxy(26,18);
    cprintf("2");
    gotoxy(26,21);
    cprintf("4");
    gotoxy(26,30);
    cprintf("6");
    gotoxy(26,39);
    cprintf("7");
    gotoxy(26,42);
    cprintf("9");
    gotoxy(30,18);
    cprintf("7");
    gotoxy(30,24);
    cprintf("9");
    gotoxy(30,21);
    cprintf("1");
    gotoxy(30,27);
    cprintf("2");
    gotoxy(30,30);
    cprintf("5");
    gotoxy(30,39);
    cprintf("6");
    gotoxy(30,42);
    cprintf("8");
    gotoxy(34,18);
    cprintf("5");
    gotoxy(34,21);
    cprintf("7");
    gotoxy(34,24);
    cprintf("6");
    gotoxy(34,30);
    cprintf("4");
    gotoxy(34,33);
    cprintf("8");
    gotoxy(38,18);
    cprintf("4");
    gotoxy(38,21);
    cprintf("2");
    gotoxy(38,24);
    cprintf("1");
    gotoxy(38,27);
    cprintf("7");
    gotoxy(38,30);
    cprintf("9");
    gotoxy(38,39);
    cprintf("8");
    gotoxy(38,42);
    cprintf("3");
    gotoxy(42,18);
    cprintf("8");
    gotoxy(42,24);
    cprintf("3");
    gotoxy(42,27);
    cprintf("6");
    gotoxy(42,30);
    cprintf("1");
    gotoxy(42,33);
    cprintf("2");
    gotoxy(42,39);
    cprintf("4");
    gotoxy(42,42);
    cprintf("5");
    gotoxy(46,18);
    cprintf("9");
    gotoxy(46,21);
    cprintf("6");
    gotoxy(46,24);
    cprintf("7");
    gotoxy(46,30);
    cprintf("8");
    gotoxy(46,33);
    cprintf("1");
    gotoxy(46,39);
    cprintf("3");
    gotoxy(46,42);
    cprintf("4");
    gotoxy(50,24);
    cprintf("4");
    gotoxy(50,30);
    cprintf("2");
    gotoxy(50,36);
    cprintf("8");
    gotoxy(50,39);
    cprintf("1");
    gotoxy(54,21);
    cprintf("8");
    gotoxy(54,33);
    cprintf("7");
    gotoxy(54,36);
    cprintf("5");
    gotoxy(54,39);
    cprintf("9");
  }
   
  //Main
  void main()
  {
    clrscr();
    welcome();/*for welcome massege*/
    menu(); /* main menu*/
    time();  /*time function*/
    curmov();/*Lad Cursor To Move*/
    getch();
  }



2 comments:

  1. o wow awesom programme written in c.........most like.

    ReplyDelete
  2. This program is not diaply properly in dosbox....

    ReplyDelete

Comment On Facebook