I have an assignment that is making a processing sketch that make 4 by 4 Sudoku game and make the player enter the missing numbers to the playing grid, the problem that I’m facing now is to make a loop or something that allow the player to enter ALL the missing numbers ?
I’d Succeeded to allow the player to enter the first 4 numbers using switch statement and if statement but the program only go through the first if statement from each case, and I want to make it go through the rest ?
here is the cod that I make.
void setup ()
{
background (255);
size (125,125);
board();
}
void cell (int x , int y , int s )
{
rect (x,y,s,s);
}
void triple (int x , int y , int s )
{
for (int i = 0 ; i < 2 ; i ++)
{
cell ( x,y,s);
x += s;
}
}
void block (int x , int y , int s )
{
for (int i = 0 ; i < 2 ; i ++)
{
triple ( x , y , s);
y += s;
}
}
void row (int x , int y , int s )
{
for ( int i = 0 ; i < 2 ; i ++)
{
block ( x , y , s);
x += (s*2);
}
}
void cellArray ( int x , int y , int s)
{
for (int i = 0 ; i < 2 ; i ++)
{
row ( x , y , s);
y += (s*2);
}
}
void darwLines ( int x , int y , int s)
{
strokeWeight (3);
for (int i = 0 ; i < 1 ; i ++)
{
x += (s*2);
line ( x , 0 , x , (s*4));
}
for ( int j = 0 ; j < 1 ; j ++)
{
y += (s*2);
line ( 0 , y , (s*4) , y );
}
strokeWeight (1);
}
void board ()
{
cellArray (0,0,30);
darwLines (0,0,30);
}
void draw ()
{
int [][] fixedArray = new int [4][4];
fill (0);
textSize(28);
for (int i = 0 ; i < 4 ; i ++)
{
for (int j = 0 ; j < 4 ; j ++)
{
fixedArray [0][2] = 3;
fixedArray [1][1] = 4;
fixedArray [2][2] = 4;
fixedArray [3][3] = 3;
text(fixedArray [0][2], 65,25);
text(fixedArray [1][1],35,58);
text(fixedArray [2][2],65,88);
text(fixedArray [3][3],95,117);
}//end of inner loop.
}//end of outter loop.
if (mousePressed)
{
mouseClicked ();
}
}
/*------------------------------------------------------------------------------------------*/
void mouseClicked ()
{
int s = 30 ;
int cellX = mouseX / s;
int cellY = mouseY / s;
int [][] userInputArray = new int [4][4];
for (int m = 0 ; m < 4 ; m ++)
{
for (int n = 0 ; n < 4 ; n ++)
{
switch (key)
{
case '1':
if (mouseX > userInputArray [0][0] -s && mouseX < userInputArray [0][0]+s && mouseY > userInputArray [0][0] -s && mouseY < userInputArray [0][0] +s )
{
fill (0,0,255);
text (key , 10,25);
}
else if (mouseX > userInputArray [1][2] -30 && mouseX < userInputArray [1][2]+30 && mouseY > userInputArray [1][2] -30 && mouseY < userInputArray [1][2] +30)
{
fill (0,0,255);
text ('1' , 65,58);
}
else if (mouseX > userInputArray [2][3] -30 && mouseX < userInputArray [2][3]+30 && mouseY > userInputArray [2][3] -30 && mouseY < userInputArray [2][3] +30)
{
fill (0,0,255);
text('1' ,95,88);
}
else if (mouseX > userInputArray [3][1] -30 && mouseX < userInputArray [3][1]+30 && mouseY > userInputArray [3][1] -30 && mouseY < userInputArray [3][1] +30)
{
fill (0,0,255);
text('1' ,35,117);
}
break ;
case '2':
if (mouseX > userInputArray [0][1] -(s-s) && mouseX < userInputArray [0][1]+(s*2) && mouseY > userInputArray [0][1] -s && mouseY < userInputArray [0][1] +s )
{
fill (0,0,255);
text(key ,35,25);
}
else if (mouseX > userInputArray [1][3] - (s-s) && mouseX < userInputArray [1][3] +(s*2) && mouseY > userInputArray [1][3] -(s*2) && mouseY < userInputArray [1][3] +(s*2))
{
fill(0,0,255);
text(key,95,58);
}
else if (mouseX > userInputArray [2][0] -(s-s) && mouseX < userInputArray [2][0] +(s*2) && mouseY > userInputArray [2][0] -(s*2) && mouseY < userInputArray [2][0] +(s*2))
{
fill(0,0,255);
text(key,10,88);
}
else if (mouseX > userInputArray [3][2] -(s-s) && mouseX < userInputArray [3][2] +(s*2) && mouseY > userInputArray [3][2] -(s*2) && mouseY < userInputArray [3][2] +(s*2))
{
fill(0,0,255);
text(key,65,117);
}
break;
case '3':
if ( mouseX > userInputArray [1][0] -s && mouseX < userInputArray [1][0]+s && mouseY > userInputArray [1][0] -(s-s) && mouseY < userInputArray [1][0] +(s*2))
{
fill(0,0,255);
text(key,10,58);
}
else if (mouseX > userInputArray [2][1] -s && mouseX < userInputArray [2][1]+s && mouseY > userInputArray [2][1] -(s-s) && mouseY < userInputArray [2][1] +(s*2))
{
fill(0,0,255);
text(key,35,88);
}
break ;
case '4':
if (mouseX > userInputArray [0][3] +60 && mouseX < userInputArray [0][3]+120 && mouseY > userInputArray [0][3] -30 && mouseY < userInputArray [0][3] +30 )
{
fill(0,0,255);
text(key,95,25);
}
else if (mouseX > userInputArray [3][0] +60 && mouseX < userInputArray [3][0]+120 && mouseY > userInputArray [3][0] -30 && mouseY < userInputArray [3][0] +30 )
{
fill(0,0,255);
text(key,10,117);
}
break;
default :
{
fill (255);
rect ((cellX * s),(cellY*s),s,s);
}
}//end of switch.
}//end of the inner loop.
}//end of the outter for loop.
}
I have gone through your code, and observed some issues:
First of all, the code is quite messy. The drawlines + cellArray + row + … can be solved much more elegantly, without the need for such a complex nesting of functions.
Apparently, you want fixedArray to always remain constant. Therefore, you don’t need to define it and assign values at every draw loop. You can move that declaration to the beginning of your code.
Same happens with userInputArray, values are defined nowhere, and therefore equal 0.
You are drawing each number 16 times on top of itself, that’s why it looks so crancky… There is no need for the nested for loops when drawing the text.
This said, please find attached a proposal of enhanced code. It fixes all the issues, is more flexible if in need if changing sudoku size and position, and is in general more consistent code.
Nevertheless, if you want to make this really interesting, try to figure out how to make random value generation, so that every sudoku is different from the previous one! There are plenty of sudoku generation algorithms online.
Good luck!