Source Code : 
    #include <graphics.h>
    #include <stdio.h>
    #include <conio.h>
    #include <stdlib.h>
    #include <dos.h>

    #define _LEFT    120
    #define _TOP    100
    #define _WIDTH      40
    #define _HEIGHT      35

    #define xBlockSpace  5
    #define yBlockSpace  5

    #define fixedBlockFillColor    RED
    #define fixedTextColor        GREEN

    #define BlockFillColor1        LIGHTBLUE
    #define BlockFillColor2        GREEN
    #define playerTextColor       RED

    #define SudokuTableColor       GREEN

    #define BlockLineColor       BLUE
    #define activeBlockLineColor    CYAN

    #define UP_ARROW          72
    #define DOWN_ARROW      80
    #define LEFT_ARROW        75
    #define RIGHT_ARROW       77
    #define F2           60
    #define F3           61

    #define AND    &&
    #define YA    ||

    #define TRUE    1
    #define FALSE    0

    
int Sudoku[9][3][3] = {0};
    
int fixedBlocks[9][3][3] = {0};

    
int activeBlock 0;
    
int activeRow 0;
    
int activeCol 0;

    
int graphicsON ( );
    
int insertInto (  int block int row int col ,  int value );
    
void DrawBlockint block int row int colint active );
    
void keyPressed char keyCode );
    
int isFixedBlockint block activeBlockint row activeRowint col activeCol );
    
void initializeGame();
    
void showHint();
    
void DrawOut();
    
void DrawAllBox();
    
int isCompleted();
    
void showWin();
    
void signature();
    
int Menu ();
    
void drawMenu int selected int defCol int selCol );
    
void HowToPlay();
    
void About();
    
void SaveGame();
    
void LoadGame();
    
void Play();

    
/*
    █▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀█
    █    MAIN FUNCTION START   █
    ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
    */
    
void main()
    {
    if ( 
graphicsON ( ) == FALSE ) return;
    
int rep;

    
Again:
    
cleardevice();
    
DrawOut ();
    
rep Menu();
    switch ( 
rep )
    {
    case 
4:
    
closegraph();
    return;
    case 
1:
    
/*
     ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
     ▀█ Initialize Trick █▀
      ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
    */
    
initializeGame();
    
Play();
    goto 
Again;
    case 
2:
    
HowToPlay();
    goto 
Again;
    case 
3:
    
About();
    goto 
Again;
    }
    }
    
/*
    █▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀█
    █  MAIN FUNCTION COMPLETED █
    ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
    */
    
int graphicsON ( )
    {
    
char path[128] = { "d:\tc\bgi" };
    
int i 0;

    while ( 
TRUE )
    {
    
int g DETECT d;
    
initgraph ( &, &path );
    if ( 
) return FALSE;
    
i++;

    if ( 
graphresult() != grOk )
    {
    
printf "
 BGI file not found: [ EGAVGA.BGI ]" 
);
    
printf "
 Enter the path of BGI directory:[ c:\tc\bgi ]-> " 
);
    
gets path );
    }
    else
    {
    return 
TRUE;
    }
    }
    }

    
int insertInto int block int row int col ,  int value )
    {
    if ( 
isFixedBlockblock row col ) ) return FALSE;

    if ( ( 
value ) || ( value ) ) return FALSE;
    if ( ( 
block >= ) || ( block ) ) return FALSE;
    if ( ( 
row   >= ) || ( row   ) ) return FALSE;
    if ( ( 
col   >= ) || ( col   ) ) return FALSE;

    for ( 
int i 03i++ )
    {
    for ( 
int j 03j++ )
    {
    if ( 
Sudoku[block][i][j] == value )
       
//    return FALSE;
    
return ( block )* 100 10 j;
    }
    }
    
int tempBlock * ( block );

    for ( 
03i++ )
    {
    for ( 
int j 03j++ )
    {
    if ( 
Sudoku[tempBlock i][row][j] == value )
    
//    return FALSE;
    
return ( tempBlock )* 100 row 10 j;
    }
    }

    
tempBlock block 3;

    for ( 
03i++ )
    {
    for ( 
int j 03j++ )
    {
    if ( 
Sudoku[tempBlock ][j][col] == value )
    
//    return FALSE;
    
return ( tempBlock )* 100 10 col;
    }
    }

    
Sudoku[block][row][col] = value;

    return 
TRUE;
    }

    
void DrawBlockint block int row int col int active )
    {
    
int temp;

    
temp * ( block );
    
int x temp * ( _WIDTH xBlockSpace ) + _LEFT ;

    
temp * ( block );
    
int y _TOP temp * ( _HEIGHT yBlockSpace );

    
col _WIDTH;
    
row _HEIGHT;
    
char str[3];
    
settextstyle );
    
int midTextWidth textwidth "0" ) / 2;
    
int midTextHeight textheight "0" ) / 2;

    if  ( 
isFixedBlockblock row col ) )
    {
    
setfillstyle fixedBlockFillColor );
    
setcolor fixedTextColor );
    }
    else if ( 
Sudoku[block][row][col] != )
    {
    
setfillstyle BlockFillColor2 );
    
setcolor playerTextColor );
    }
    else if ( 
Sudoku[block][row][col] == )
    {
    
setfillstyle BlockFillColor1 );
    }

    
bar _WIDTH _HEIGHT );
    if ( 
Sudoku[block][row][col] != )
    {
    
itoa Sudoku[block][row][col] , str 10 );
    
outtextxy _WIDTH midTextWidth,
    
_HEIGHT midTextHeightstr );
    }

    
setcolor active == TRUE activeBlockLineColor BlockLineColor );
    
rectangle _WIDTH _HEIGHT );
    }

    
void keyPressed char keyCode )
    {
    switch ( 
keyCode )
    {
    case 
UP_ARROW:
    if ( 
activeRow == )
    {
    
activeRow 2;
    switch ( 
activeBlock )
    {
    case 
0: case 1: case 2:
    
activeBlock += 6;
    break;
    case 
3: case 4: case 5:
    case 
6: case 7: case 8:
    
activeBlock -= 3;
    break;
    }
    }
    else
    {
    
activeRow--;
    }
    break;
    case 
DOWN_ARROW:
    if ( 
activeRow == )
    {
    
activeRow 0;
    switch ( 
activeBlock )
    {
    case 
6: case 7: case 8:
    
activeBlock -= 6;
    break;
    case 
3: case 4: case 5:
    case 
0: case 1: case 2:
    
activeBlock += 3;
    break;
    }
    }
    else
    {
    
activeRow++;
    }
    break;
    case 
LEFT_ARROW:
    if ( 
activeCol == )
    {
    
activeCol 2;
    switch ( 
activeBlock )
    {
    case 
0: case 3: case 6:
    
activeBlock += 2;
    break;
    case 
1: case 2: case 4:
    case 
5: case 7: case 8:
    
activeBlock -= 1;
    break;
    }
    }
    else
    {
    
activeCol--;
    }
    break;
    case 
RIGHT_ARROW:
    if ( 
activeCol == )
    {
    
activeCol 0;
    switch ( 
activeBlock )
    {
    case 
2: case 5: case 8:
    
activeBlock -= 2;
    break;
    case 
0: case 1: case 3:
    case 
4: case 7: case 6:
    
activeBlock += 1;
    break;
    }
    }
    else
    {
    
activeCol++;
    }
    break;
    }
//    if ( isFixedBlock() ) keyPressed ( keyCode );
    
DrawBlockactiveBlock activeRow activeCol TRUE );
    }

    
int isFixedBlockint block int row int col )
    {
    if ( 
fixedBlocks[block][row][col] == )
    return 
TRUE;
    else
    return 
0;
    }

    
void showHint()
    {
    for ( 
int i 1<=20 i++ )
    {
    if ( 
insertInto activeBlock activeRow activeCol random ) + ) == TRUE )
    {
    
DrawBlock activeBlock activeRow activeCol TRUE );
    
sound 140 );
    
delay 300 );
    
nosound ();

    return;
    }
    }
    
sound 400 );
    
delay 300 );
    
nosound ();
    }

    
void initializeGame()
    {
    
int ijtemp;
    
randomize( );
    for ( 
09i++ )
    {
    for ( 
03j++ )
    {
    for ( 
int k 03k++ )
    {
    
Sudoku[i][j][k] = 0;
    
fixedBlocks[i][j][k] = 0;
    }
    }
    }

    for ( 
09i++ )
    {
    
temp random) + 1;
    for ( 
0tempj++ )
    {
    
int row random );
    
int col random );
    if ( 
insertInto row col ,random ) + ) != TRUE )
    {
    
j--;
    continue;
    }
    else
    {
    
fixedBlocks[i][row][col] = 1;
    }
    }
    }
    }

    
void DrawOut()
    {
    
setbkcolor );
    
settextstyle );

    
char pattern[8] = { 254 ,,250 ,138 ,186 ,162 ,190 ,128};

    
setfillpattern pattern );
    
setfillstyle 12 );
    
bar 639 ,80 );
    
setcolor );
    
rectangle 639 80 );

    
setcolor );
    
outtextxy 31 " SUDOKU " );
    
setcolor RED );
    
outtextxy 30 " SUDOKU " );

    
settextstyle );
    
setcolor );
    
outtextxy 11 101 " SUDOKU " );
    
setcolor RED );
    
outtextxy 10 100 " SUDOKU " );

    
settextstyle );
    
setcolor );
    
outtextxy 531 101 " SUDOKU " );
    
setcolor RED );
    
outtextxy 530 102 " SUDOKU " );

    
settextstyle );
    
setcolor );
    
outtextxy 301 " By:  Rakesh Juyal " );
    
setcolor GREEN );
    
outtextxy 300 10 " By:  Rakesh Juyal " );
    }

    
int isCompleted()
    {
    
int i k;
    for ( 
09i++ )
    {
    for ( 
03j++ )
    {
    for ( 
03k++ )
    {
    if ( 
Sudoku[i][j][k] == )
    return 
FALSE;
    }
    }
    }
    return 
TRUE;
    }

    
void showWin()
    {
    
settextstyle 0  );

    for ( 
int i 0<= 15+= )
    {
    
setcolor );
    
outtextxy 50 i150 " YOU WIN " );
    }
    
getch();
    return;
    }

    
int Menu ()
    {
    
int ch;
    
int selected 1;
    
int TotalOptions 4;
    
setbkcolor );
//    setbkcolor ( BLUE );
    
signature();
    
drawMenu selected RED GREEN );
    do
    {
    
ch getch();
    if ( 
ch == DOWN_ARROW )
    {
    
selected selected >= TotalOptions selected 1;
    }
    else if ( 
ch == UP_ARROW )
    {
    
selected selected TotalOptions selected 1;
    }
    
drawMenu selected RED GREEN );
    }while ( 
ch != '
);

    return 
selected;
    }

    
void signature()
    {
    
setcolor BROWN );
    
settextstyle );
    
outtextxy 350 400 " Programmer: " );
    
outtextxy 350 410 "     mailto: " );
    
outtextxy 350 420 "     mailto: " );

    
setcolor YELLOW );
    
outtextxy 450 400 " Rakesh Juyal " );
    
outtextxy 450 410 " juyalrules@Yahoo.com " );
    
outtextxy 450 420 " rakesh@mindless.com " );

    
setcolor 12 );
    
outtextxy 450 410 "           @Yahoo.com " );
    
outtextxy 450 420 "       @mindless.com " );
    }

    
void drawMenu int selected int defCol int selCol )
    {
    
int x 230;
    
int y 120;
    
int width 150;
    
int height 30;
    
int i;
    
int TotalOptions 4;
    
char menu_option[5][14]= {
    
"    PLAY     ",
    
" HOW TO PLAY ",
    
"  ABOUT GAME " ,
    
"     EXIT    "
    
};
    
setcolor WHITE );
    
setfillstyle defCol );
    
setlinestyle 0  );
    
settextstyle );

    for ( 
1<= TotalOptionsi++ )
    {
    
bar width height );
    
rectangle width height );
    
outtextxy 20 10 menu_option[1] );
    
height 30;
    }

    
setfillstyle selCol );
    
setcolor 14 );
    
TotalOptions * ( height 30 );
    
+ ( selected ) * ( height 30 );

    
bar width height );
    
rectangle width height );
    
outtextxy 20 10 menu_option[selected 1] );
    }

    
void HowToPlay()
    {
    
cleardevice();
    
DrawOut();
    
setbkcolor );
    
settextstyle );
    
setcolor LIGHTGREEN );
    
int y 140 yInc 20;

    
outtextxy 150 " 1. Use arrow keys to move UP, DOWN, LEFT, RIGHT." );
    
yInc;
    
outtextxy 150 " 2. Press the number you want to enter [ 1 - 9 ]." );
    
yInc;
    
outtextxy 150 " 3. Press '?' to get the HINT." );
    
yInc;
    
outtextxy 150 " 4. Press 'F2' to save the GAME." );
    
yInc;
    
outtextxy 150 " 5. Press 'F3' to load the GAME." );
    
yInc;

    
yInc;
    
outtextxy 150 " 1. Fill all the blocks." );
    
yInc;
    
outtextxy 150 " 2. Any number must not be repeated neither " );
    
yInc;
    
outtextxy 150 "    horizontally, neither vertically, nor in Box." );

    
setcolor WHITE );

    
120;
    
outtextxy 80 " Instructions:" );
    
yInc;
    
outtextxy 80 " Objective:" );


    
signature();
    
getch();
    }

    
void About()
    {
    
cleardevice();
    
DrawOut();
    
setbkcolor );
    
settextstyle );
    
setcolor LIGHTGREEN );
    
outtextxy 150 120 " is a Japaneese Game. ( Actually i'm not sure )" );
    
outtextxy 150 140 " Use any search engine to find about it." );

    
outtextxy 150 180 " Rakesh Juyal " );
    
outtextxy 150 200 " back with another Game after SNAKE WAR. " );
    
outtextxy 150 220 " GOOD NEWS: SNAKE WAR will not have another version. " );

    
outtextxy 150 260 " If you have any suggestion, or encountered a bug" );
    
outtextxy 150 280 " feel free to mail me. " );

    
setcolor WHITE );
    
outtextxy 80 100 " SUDOKU:" );
    
outtextxy 80 160 " Programmer:" );
    
outtextxy 80 240 " Bugs and Suggestions:" );

    
signature();
    
getch();
    }

    
void SaveGame()
    {
    
FILE *fp;
    
fp fopen "SUDOKU.001" "w");

    
settextstyle );
    
setcolor RED );
    
setfillstyle );

[Login or [Only Registered and Activated users can see Content.
Click Here To Register..
]
to remove this advertisement]

    if ( 
fp == NULL )
    {
    
bar 200 460 500 480 );
    
outtextxy 200 460 " UNABLE TO SAVE " );
    
delay 300 );
    
bar 200 460 500 480 );
    return;
    }

    
bar 200 460 500 480 );
    
outtextxy 200 460 " Saving... " );
    
delay 300 );

    
int i k;
    for ( 
09i++ )
    {
    for ( 
03j++ )
    {
    for ( 
03k++ )
    {
    
fputc Sudoku[i][j][k] , fp );
    }
    }
    }

    for ( 
09i++ )
    {
    for ( 
03j++ )
    {
    for ( 
03k++ )
    {
    
fputc fixedBlocks[i][j][k] , fp );
    }
    }
    }
    
bar 200 460 500 480 );
    
outtextxy 200 460 " Game Saved... " );
    
delay 300 );
    
bar 200 460 500 480 );

    
fclose fp );
    }

    
void LoadGame()
    {
    
FILE *fp;
    
fp fopen "SUDOKU.001" "r");

    
settextstyle );
    
setcolor RED );
    
setfillstyle );
    if ( 
fp == NULL )
    {
    
bar 200 460 500 480 );
    
outtextxy 200 460 " UNABLE TO OPEN " );
    
delay 300 );
    
bar 200 460 500 480 );
    return;
    }

    
bar 200 460 500 480 );
    
outtextxy 200 460 " Reading... " );
    
delay 300 );

    
int i k;
    
int ch;

    for ( 
09i++ )
    {
    for ( 
03j++ )
    {
    for ( 
int k 03k++ )
    {
    
Sudoku[i][j][k] = 0;
    
fixedBlocks[i][j][k] = 0;
    }
    }
    }

    for ( 
09i++ )
    {
    for ( 
03j++ )
    {
    for ( 
03k++ )
    {
    
ch fgetc fp );
    
Sudoku[i][j][k] = ch;
    }
    }
    }

    for ( 
09i++ )
    {
    for ( 
03j++ )
    {
    for ( 
03k++ )
    {
    
ch fgetc fp );
    
fixedBlocks[i][j][k] = ch;
    }
    }
    }
    
fclose fp );

    
bar 200 460 500 480 );
    
outtextxy 200 460 " Game Loaded... " );
    
delay 300 );
    
bar 200 460 500 480 );

    
Play();
    }

    
void Play()
    {
    
char ch;

    
cleardevice();
    
DrawOut();
    
setbkcolor BLACK );
    
DrawAllBox();
    
DrawBlockactiveBlock activeRow activeCol TRUE );

    while ( 
TRUE )
    {
    
ch getch();
    if ( ( 
ch >= '0' ) && ( ch <= '9' ) )
    {
    
int temp insertInto activeBlock activeRow activeCol ,
    
ch '0' );
    if ( 
temp == TRUE )
    {
    
DrawBlock activeBlock activeRow activeCol TRUE );
    if ( 
isCompleted() )
    {
    
showWin();
    
//goto Again;
    
return;
    }
    }
    else if ( 
temp == FALSE )
    {
    
sound 700 );
    
delay 400 );
    
nosound ();
    }
    else
    {
    
sound 500 );
    
DrawBlock activeBlock activeRow activeCol FALSE );
    
DrawBlock temp 100 1, ( temp 10 ) % 10,
    
temp 10 TRUE );
    
delay 300 );
    
DrawBlock temp 100 1,  ( temp 10 ) % 10,
    
temp 10 FALSE );
    
DrawBlock activeBlock activeRow activeCol TRUE );

    
nosound ();
    }
    }
    else if ( 
ch == '?' )
    {
    
showHint();
    }
    else if ( 
ch == )
    {
    
ch getch();
    if ( 
ch == F2 )
    {
    
SaveGame();
    continue;
    }
    else if ( 
ch == F3 )
    {
    
LoadGame();
    return;
    }
    
DrawBlockactiveBlock activeRow activeCol FALSE );
    
keyPressed ch );
    }
    else if ( 
ch == 0x1b )
    break;
    }
    }

    
void DrawAllBox()
    {
    
int x y;
    
int i j;
    
int temp;

    
setcolor BlockLineColor );
    
settextstyle );

    
setlinestyle );
    
_TOP yBlockSpace ;
    
_LEFT xBlockSpace;
    
setcolor SudokuTableColor );

    for ( 
03i++ )
    {
    for ( 
03j++ )
    {
    
rectangle _WIDTH xBlockSpace  ,
    
_HEIGHT yBlockSpace );

    
* ( _WIDTH xBlockSpace );
    
delay 100 );
    }
    
* ( _HEIGHT yBlockSpace ) ;
    
_LEFT xBlockSpace ;
    }

    
_LEFT;
    
_TOP;

    for ( 
09i++ )
    {
    for ( 
03j++ )
    {
    for ( 
int k 03k++ )
    {
    
DrawBlock FALSE );
    
setcolor BlockLineColor );
    
rectangle _WIDTH _HEIGHT );
    
_WIDTH;
    
delay 10 );
    }
    
_HEIGHT;
    
temp * ( );
    
_LEFT temp * ( _WIDTH xBlockSpace );
    }

    
temp * ( ( ) % );
    
temp * ( _WIDTH xBlockSpace ) + _LEFT ;
    
temp * ( ( ) / );
    
_TOP temp * ( _HEIGHT yBlockSpace );
    }
    } 
Xcode Reviewed by Xcode on . SUDKU Challenge - A Snake War Game in C++ #include <graphics.h> #include <stdio.h> #include <conio.h> #include <stdlib.h> #include <dos.h> #define _LEFT 120 #define _TOP 100 #define _WIDTH 40 #define _HEIGHT 35 Rating: 5