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:
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();
}
o wow awesom programme written in c.........most like.
ReplyDeleteThis program is not diaply properly in dosbox....
ReplyDelete