Code:
#include <iostream>
#include <stdio.h>
#include <conio.h>
#include<stdlib.h>
#include <time.h>
#include <windows.h>
using namespace std;
int LivesInLevel=3;
class Sodoku
int Level[9][9]={{0,0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0,0}, // THE LEVEL THAT NEEDS TO BE FILLED
{0,0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0,0}};
int UserRows,UserColumns,UserChoice;
int storeAraay[9]={0,0,0,0,0,0,0,0,0};
int RandGenerator();
bool ArrayChecker(int);
void RandomArrayInsertion();
void LevelInsertion();
bool InsertionCheckerRow(int,int);
bool InsertionCheckerColumn(int,int);
bool InsertionCheckerMatrix(int,int,int);
public:
void UserInsertion();
void LevelMaker();
void Display();
int Moves();
void setUserRow(int);
void setUserColumn(int);
void setUserChoice(int);
};
void Sodoku::UserInsertion()
//THIS IF CHECKS WETHER THE USER HAVE ENTERED THE ROW AND COLUMN WHERE THERE IS EMPTY
SPACE IN MY CASE THE EMPTY SPACE IS ZERO
if(InsertionCheckerRow(UserRows,UserChoice)&&InsertionCheckerColumn(UserColumns,UserChoice)&
&InsertionCheckerMatrix(UserRows,UserColumns,UserChoice)&&Level[UserRows][UserColumns]==0)
Level[UserRows][UserColumns]=UserChoice;
system("cls");
else
LivesInLevel=LivesInLevel-1;
system("cls");
cout<<"LIVE LOST"<<endl;
cout<<"PRESS ANY KEY TO CONYINUE"<<endl;
getch();
system("cls");
}
int Sodoku::Moves()// THIS FUNCTION IS USED TO GET MOVES PRESENT IN THE GAME
int counter;
for(int i=0;i<9;++i)
for(int j=0;j<9;++j)
if(Level[i][j]==0)
counter=counter+1;
return counter;
//-----------Setters--------------
void Sodoku::setUserRow(int RowFromMain)
this->UserRows=RowFromMain-1;
void Sodoku::setUserColumn(int ColumnFromMain)
this->UserColumns=ColumnFromMain-1;
void Sodoku::setUserChoice(int ChoiceFromMain)
this->UserChoice=ChoiceFromMain;
}
//-----------LevelMaker------------------
void Sodoku::LevelMaker() // REMOVES NUMBER AFTER THE INSERTION IN ORDER TO MAKE THE LEVEL
FOR THE USER
LevelInsertion();
int Store1;
Store1=RandGenerator();
for(int u=0;u<9;++u)
Store1=RandGenerator();
for(int h=0;h<9;++h)
if(Level[u][h]==Store1)
Level[u][h]=0;
//-----------LevelInsertion--------------
void Sodoku::LevelInsertion() //INSERTS THE NUMBER IN THE CHESS BOARD IT IS NECEESSARY BECAUSE
WE NEED TO CREATE A UNIQUE ONE SOLUTION
{ // YOU MUST STUDY SODOKU MATH
srand(time(0));// THIS FUNCTION IS USED TO CREATE A UNIQUE LEVEL EVERY TIME THE PROGRAM IS
RUN
RandomArrayInsertion();
int ArrayIterator = 0;
for(int i=0;i<9;++i)
for(int j = 0; j<9 ;)
if(InsertionCheckerColumn(j,storeAraay[ArrayIterator])&&InsertionCheckerRow(i,storeAraay[ArrayIterat
or])&&InsertionCheckerMatrix(i,j,storeAraay[ArrayIterator]))
Level[i][j]=storeAraay[ArrayIterator];
++j;
++ArrayIterator;
if(ArrayIterator>8||j>8) //THIS IS THE CONDITION FOR THE ARRAY THAT IS GENERATED TO FILL
THE LEVEL IN RANDOM ARRAY INSERTION
ArrayIterator=0; //IF ARRAY IS AT THE END THEN IT MUST START AGAIN TO LOOK FOR
POSSIBLE VALUES
else
++ArrayIterator;
if(ArrayIterator>8||j>8)//THIS IS THE CONDITION FOR THE ARRAY THAT IS GENERATED TO FILL
THE LEVEL IN RANDOM ARRAY INSERTION
ArrayIterator=0; ////IF ARRAY IS AT THE END THEN IT MUST START AGAIN TO LOOK FOR
POSSIBLE VALUES
}
//----------CheckerFunctionForBox---------
bool Sodoku::InsertionCheckerMatrix(int row ,int column , int number)
bool checker;
if((row>=0&&row<=2)&&(column>=0&&column<=2)) //THIS IF CHECKS THE FIRST BOX OF THE
GAMEBOARD
for(int i=0;i<3;++i)
for(int j=0;j<3;++j)
if(Level[i][j]!=number)
checker=true;
else
checker=false;
break;
if(checker==false)
break;
}
else if((row>=0&&row<=2)&&(column>=3&&column<=5)) //THIS IF CHECKS THE SECOND BOX OF THE
GAMEBOARD
for(int i=0;i<3;++i)
for(int j=3;j<6;++j)
if(Level[i][j]!=number)
checker=true;
else
checker=false;
break;
if(checker==false)
break;
else if((row>=0&&row<=2)&&(column>=6&&column<=8)) //THIS IF CHECKS THE THIRD BOX OF THE
GAMEBOARD
for(int i=0;i<3;++i)
{
for(int j=6;j<9;++j)
if(Level[i][j]!=number)
checker=true;
else
checker=false;
break;
if(checker==false)
break;
else if((row>2&&row<6)&&(column>=0&&column<3)) //THIS IF CHECKS THE FOURTH BOX OF THE
GAMEBOARD
for(int i=3;i<6;++i)
for(int j=0;j<3;++j)
if(Level[i][j]!=number)
checker=true;
else
checker=false;
break;
}
if(checker==false)
break;
else if((row>2&&row<6)&&(column>2&&column<6)) //THIS IF CHECKS THE FIFTH BOX OF THE
GAMEBOARD
for(int i=3;i<6;++i)
for(int j=3;j<6;++j)
if(Level[i][j]!=number)
checker=true;
else
checker=false;
break;
if(checker==false)
break;
else if((row>2&&row<6)&&(column>5&&column<9)) //THIS IF CHECKS THE SIXTH BOX OF THE
GAMEBOARD
{
for(int i=3;i<6;++i)
for(int j=6;j<9;++j)
if(Level[i][j]!=number)
checker=true;
else
checker=false;
break;
if(checker==false)
break;
else if((row>5&&row<9)&&(column>-1&&column<3)) //THIS IF CHECKS THE SEVENTH BOX OF THE
GAMEBOARD
for(int i=6;i<9;++i)
for(int j=0;j<3;++j)
if(Level[i][j]!=number)
checker=true;
else
{
checker=false;
break;
if(checker==false)
break;
else if((row>5&&row<9)&&(column>2&&column<6)) //THIS IF CHECKS THE EIGHT BOX OF THE
GAMEBOARD
for(int i=6;i<9;++i)
for(int j=3;j<6;++j)
if(Level[i][j]!=number)
checker=true;
else
checker=false;
break;
if(checker==false)
break;
}
else if((row>5&&row<9)&&(column>5&&column<9)) //THIS IF CHECKS THE NINTH BOX OF THE
GAMEBOARD
for(int i=6;i<9;++i)
for(int j=6;j<9;++j)
if(Level[i][j]!=number)
checker=true;
else
checker=false;
break;
if(checker==false)
break;
return checker;
//-----------CheckerFunctionForColumn------
bool Sodoku::InsertionCheckerColumn(int column,int number) //CHECKS THE COLUMN IN WHICH THE
USER IS INSERTING
bool checker;
for(int r=0;r<9;r++)
if(Level[r][column]!=number)
checker=true;
else
checker=false;
break;
return checker;
//-----------CheckerFunctionForRow-------
bool Sodoku::InsertionCheckerRow(int row,int number) //CHECKS THE ROW IN WHICH THE USER IS
INSERTING
bool checker;
for(int e=0;e<9;e++)
if(Level[row][e]!=number)
checker=true;
else
checker=false;
break;
return checker;
//----------RandomArrayInsertion--------
void Sodoku::RandomArrayInsertion() //CREATES A RANDOM ARRAY FROM WHICH LEVELINSERTION IS
DONE
int store;
for(int w=0;w<9;)
store=RandGenerator();
if(ArrayChecker(store))
storeAraay[w]=store;
++w;
else
continue;
}
//------------RandomNumberArrayChecker-------------
bool Sodoku::ArrayChecker(int randomNumberGenerated) //CHECKS THAT THE NUMBER SHOULD NOT
BE REPEAATED IN RANDOM ARRAY GENERATION
bool checker;
for(int q=0;q<9;q++)
if(randomNumberGenerated!=storeAraay[q])
checker=true;
else
checker=false;
break;
return checker;
//------------RandomNumberGenerator----------------
int Sodoku::RandGenerator() //GENERATES RANDOM NUMBER FOR THE ARRAY
return rand()%9+1;
//------------DisplayFunction----------------------
void Sodoku::Display()
cout<<"-----------Your Level----------"<<endl;
cout<<"YOU REMAINING MOVES: "<<Moves()<<endl;
cout<<"THE NUMBER OF LIVES: ";
for(int i=0;i<LivesInLevel;++i)
cout<<"-";
cout<<endl<<"-------------------------------"<<endl;
for(int i=0;i<9;++i)
for(int j=0;j<9;++j)
if(j==3||j==6)
cout<<"| "<<Level[i][j]<<" ";
else if(j==0||j==3)
cout<<"| "<<Level[i][j]<<" ";
else
cout<<" "<<Level[i][j]<<" ";
if (i==2||i==5||i==8)
cout<<endl<<"-------------------------------";
cout<<endl;
else
cout<<endl;
}
}
main()
string SystemChoice,LevelChoice;
float MainRows,MainColumns,MainChoice;
bool SystemChecker,LevelChecker,RowChecker,ChoiceChecker,ColumnChecker;
cout<<" WELCOME TO SODOKU BY JANNAT IRFAN"<<endl;
cout<<"_______________________________________________________________________________
_________________________________________"<<endl;
do
cout<<"PRESS S TO START"<<endl;
cin>>SystemChoice;
if(SystemChoice.length()==1&&(SystemChoice=="s")||(SystemChoice=="S"))
cout<<"ACCEPTED"<<endl;
SystemChecker=true;
else
cout<<"WRONG VALUE MUST BE S "<<endl;
cout<<"press any key to cintinue"<<endl;
getch();
system("cls");
SystemChecker=false;
cin.clear();
cin.ignore(10000,'\n');
}
}
while(SystemChecker==false);
while(SystemChoice=="s"||SystemChoice=="S")
do
cout<<"PRESS 1 TO PLAY THE GAME"<<endl<<"PRESS 2 TO EXIT"<<endl;
cin>>LevelChoice;
if(LevelChoice.length()==(1&&LevelChoice=="1")||(LevelChoice=="2"))
cout<<"ACCEPTED"<<endl;
LevelChecker=true;
else
cout<<"WRONG MUST BE 1 OR 2"<<endl;
cout<<"press any key to cintinue"<<endl;
getch();
system("cls");
LevelChecker=false;
cin.clear();
cin.ignore(10000,'\n');
while(LevelChecker==false);
if(LevelChoice=="1")
{
Sodoku User;
User.LevelMaker();
LivesInLevel=3;
while(User.Moves()>0&&LivesInLevel>0)
do
User.Display();
cout<<"ENTER THE ROW IN WHICH YOU WANT TO ADD NUMBER (between 0 and 10(0,10
exluded))"<<endl;
cin>>MainRows;
if(cin&&MainRows-(int)MainRows==0&&(int)MainRows>0&&MainRows<10)
RowChecker=true;
cout<<"ACCEPTED"<<endl;
else
cout<<"WRONG NUMBER"<<endl;
cout<<"press any key to cintinue"<<endl;
getch();
system("cls");
RowChecker=false;
cin.clear();
cin.ignore(10000,'\n');
}
}
while(RowChecker==false);
do
system("cls");
User.Display();
cout<<"ENTER THE COLUMN IN WHICH YOU WANT TO ADD NUMBER(between 0 and
10(0,10 exluded))"<<endl;
cin>>MainColumns;
if(cin&&MainColumns-
(int)MainColumns==0&&(int)MainColumns>0&&MainColumns<10)
ColumnChecker=true;
cout<<"ACCEPTED"<<endl;
else
cout<<"WRONG NUMBER"<<endl;
cout<<"press any key to cintinue"<<endl;
getch();
system("cls");
ColumnChecker=false;
cin.clear();
cin.ignore(10000,'\n');
}
}
while(ColumnChecker==false);
do
system("cls");
User.Display();
cout<<"ENTER YOUR CHOICE( must be a number b/w 0 to 10s )"<<endl;
cin>>MainChoice;
if(cin&&MainChoice-(int)MainChoice==0&&(int)MainChoice>0&&MainChoice<10)
ChoiceChecker=true;
cout<<"ACCEPTED"<<endl;
else
cout<<"WRONG NUMBER"<<endl;
cout<<"press any key to cintinue"<<endl;
getch();
system("cls");
ChoiceChecker=false;
cin.clear();
cin.ignore(10000,'\n');
while(ChoiceChecker==false);
{
User.setUserRow(MainRows);
User.setUserColumn(MainColumns);
User.setUserChoice(MainChoice);
User.UserInsertion();
if(User.Moves()==0)
cout<<"CONGRATULATION YOU WON"<<endl;
if(LivesInLevel==0)
cout<<"THE LIVES HAVE ENDED"<<endl;
else
break;
}
}