我有一个任务正在制作一个处理草图,制作4乘4的数独游戏并让玩家输入丢失的数字到游戏网格,我现在面临的问题是制作一个循环或允许的东西玩家输入所有丢失的号码? 我成功允许玩家使用switch语句和if语句输入前4个数字但是程序只通过每个case的第一个if语句,我想让它完成剩下的工作? 这是我制作的鳕鱼。
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.
}
答案 0 :(得分:0)
我已经完成了您的代码,并观察了一些问题:
首先,代码非常混乱。 drawlines + cellArray + row + ...可以更优雅地解决,而不需要这种复杂的函数嵌套。
显然,您希望fixedArray始终保持不变。因此,您无需在每个绘制循环中定义它并指定值。您可以将该声明移动到代码的开头。
userInputArray也是如此,值无处定义,因此等于0.
你在每个数字上绘制了16次,这就是为什么它看起来如此曲折......绘制文本时不需要嵌套的for循环。
这就是说,请附上一份增强代码的建议。它修复了所有问题,如果需要改变数据大小和位置,则更灵活,并且通常是更一致的代码。
尽管如此,如果你想让它变得非常有趣,试着弄清楚如何制作随机值,这样每个数独都与前一个不同!网上有很多数独生成算法。
祝你好运!// GLOBAL VARS DECLARATION
int[][] resultsValue = {
{1,2,3,4},
{3,4,1,2},
{2,3,4,1},
{4,1,2,3}};
boolean[][] resultsSolved = new boolean[4][4];
int cellsX = 4;
int cellsY = 4;
float cellSize = 30;
float xPos = 0;
float yPos = 0;
void setup ()
{
background (255);
size (130, 130);
smooth();
// GLOBAL VARS VALUE ASSIGNMENT
resultsSolved[0][2] = true;
resultsSolved[1][1] = true;
resultsSolved[2][2] = true;
resultsSolved[3][3] = true;
}
void draw ()
{
background(255);
drawBoard(cellsX, cellsY, cellSize, xPos, yPos, 2);
pushStyle();
fill (0);
textSize(28);
for (int i = 0; i < 4; i++) {
for (int j = 0; j < 4; j++) {
if (resultsSolved[i][j] == true) {
text(resultsValue[i][j], 5 + xPos + j * cellSize, -5 + yPos + (i + 1) * cellSize);
}
}
}
popStyle();
if (mousePressed)
{
mouseClicked ();
}
}
/*------------------------------------------------------------------------------------------*/
void drawBoard(int rows, int cols, float cellSize, float xPos, float yPos, int cellBlocks) {
pushStyle();
noFill();
stroke(0);
strokeWeight(1);
// DRAW RECTANGLES
for (int i = 0; i < cols; i++) {
for (int j = 0; j < rows; j++) {
rect(xPos + i * cellSize, yPos + j * cellSize, cellSize, cellSize);
}
}
strokeWeight(3);
// DRAW LINES
for (int i = 0; i < cols / cellBlocks; i++) {
line(xPos + i * cellSize * cellBlocks, yPos, xPos + i * cellSize * cellBlocks, yPos + rows * cellSize);
}
for (int i = 0; i < rows / cellBlocks; i++) {
line(xPos, yPos + i * cellSize * cellBlocks, xPos + cols * cellSize, yPos + i * cellSize * cellBlocks);
}
popStyle();
}
void mouseClicked ()
{
int cellX = (int) ((mouseX - xPos) / cellSize);
if (cellX > cellsX - 1) cellX = cellsX - 1;
else if (cellX < 0) cellX = 0;
int cellY = (int) ((mouseY - yPos) / cellSize);
if (cellY > cellsY - 1) cellY = cellsY - 1;
else if (cellY < 0) cellY = 0;
int lastKeyInt = int(key - '0');
if (resultsValue[cellY][cellX] == lastKeyInt) {
resultsSolved[cellY][cellX] = true;
}
}