我的逻辑有什么问题,我无法确定从左边开始还是从底部开始连续有3个?
What's wrong with my logic, I can't determine if there are 3 in a row from the left or the bottom of the grid?
所以我正在尝试检查是否有 3 个相同颜色的方块在垂直和水平方向上连续排列。这适用于从左侧水平但不是右侧的瓷砖。它也适用于从顶部而不是底部对齐的图块。
基本上我有一个 4BY4 网格,其中每个图块都可以更改为红色、白色或灰色。我的逻辑有问题,我就是挑不出来!!
这是我用来判断是否有3个连续的代码! gridArray[i].getRDC() == R.drawable.white
- 这只会检查返回的 RDC 是否为白色。目前只是试图让逻辑正确,我还没有添加代码来检查 RDC 是否为红色。
public void checkWinner(){
//CHECK FOR HORIZONTAL
for(int i=0;i<16;i+=4){
if(gridArray[i].getRDC() == R.drawable.white
&& gridArray[i+1].getRDC() == R.drawable.white
&& gridArray[i+2].getRDC() == R.drawable.white
){
Toast.makeText(getApplicationContext(),"THREE IN A ROW HORIZONTALLY",
Toast.LENGTH_SHORT).show();
Log.d("MyApp","3 in row horizontally");
}
}
//CHECK FOR VERTICAL
for(int i=0;i<=3;i++){
if(gridArray[i].getRDC() == R.drawable.white
&& gridArray[i+4].getRDC() == R.drawable.white
&& gridArray[i+8].getRDC() == R.drawable.white
// && gridArray[i+12].getRDC() == R.drawable.white
// ||
// gridArray[i+12].getRDC() == R.drawable.white
// && gridArray[i+8].getRDC() == R.drawable.white
// && gridArray[i].getRDC() == R.drawable.white
){
Toast.makeText(getApplicationContext(),"THREE IN A ROW VERTICALLY",
Toast.LENGTH_SHORT).show();
Log.d("MyApp","3 in row vertically");
}
}
}
所以目前,如果我从网格左侧连续获得 3 个图块,那么它将显示 toast
但是 如果我从右侧连续获得 3 个图块OF THE GRID 不会显示吐司?这与垂直对齐的图块相同(我将在这张图片后解释)。
左对齐
这是从左侧水平对齐的 3 个图块的图像:
从右对齐:
这是一张图像,其中有 3 个图块从右侧水平对齐:
来自顶部的垂直对齐图块的图像:
从底部对齐
出于某种原因,它不会检查是否有 3 个从网格底部垂直对齐,只有顶部?!
for(int i=0;i<16;i+=4){
if(gridArray[i].getRDC() == R.drawable.white
&& gridArray[i+1].getRDC() == R.drawable.white
&& gridArray[i+2].getRDC() == R.drawable.white
){
Toast.makeText(getApplicationContext(),"THREE IN A ROW HORIZONTALLY",
Toast.LENGTH_SHORT).show();
Log.d("MyApp","3 in row horizontally");
}
}
在此循环中,您开始检查 i == 0、i == 4、i == 8、i == 12。
在您的示例中,1、2、3 是白色的,但您永远不会真正检查这种可能性。
您尝试确定是否存在三个相同颜色的方块的方法根本上是错误的。首先,你应该有二维数组而不是一维数组,你现在有,因为它很容易扩展。
for(int i=0;i<ROWS;i++){
for(int j=0;j<COLUMNS;j++){
int color=gridArray[i][j++];
int count=1;
while(color==gridArray[i][j++]){
count++;
if(count>=MAX_SAME_COLOR){
Toast.makeText(getApplicationContext(),MAX_SAME_COLOR+" IN A ROW HORIZONTALLY",
Toast.LENGTH_SHORT).show();
Log.d("MyApp",MAX_SAME_COLOR+" in row horizontally");
}
}
}
}
如果你只是改变尺寸,如果垂直方向上也有三个相同颜色的方块,你可以很容易地得到。
对于垂直检查,
for(int i=0;i<=3;i++){
应该是
for(int i=0;i<=7;i++){
为什么?因为我们有两行可以有一列包含三个连续的相同颜色的单元格。第 1 行和第 2 行。
在循环中查找错误最可靠的方法是在纸上画一个 table 并遍历每个迭代。但是您的代码还有其他一些问题。这是一个表示二维问题的一维数组。这是不合逻辑且容易出错的。此外,当您应该编写 adaptable 代码时,您正在对数字进行硬编码。如果您需要将其更改为五乘五的网格怎么办?
for(int i=0;i<16;i+=4){
if((gridArray[i].getRDC() == R.drawable.white
&& gridArray[i+1].getRDC() == R.drawable.white
&& gridArray[i+2].getRDC() == R.drawable.white
)
||
(gridArray[i+1].getRDC() == R.drawable.white
&& gridArray[i+2].getRDC() == R.drawable.white
&& gridArray[i+3].getRDC() == R.drawable.white
)){
Toast.makeText(getApplicationContext(),"THREE IN A ROW HORIZONTALLY",
Toast.LENGTH_SHORT).show();
Log.d("MyApp","3 in row horizontally");
}
}
所以我正在尝试检查是否有 3 个相同颜色的方块在垂直和水平方向上连续排列。这适用于从左侧水平但不是右侧的瓷砖。它也适用于从顶部而不是底部对齐的图块。
基本上我有一个 4BY4 网格,其中每个图块都可以更改为红色、白色或灰色。我的逻辑有问题,我就是挑不出来!!
这是我用来判断是否有3个连续的代码! gridArray[i].getRDC() == R.drawable.white
- 这只会检查返回的 RDC 是否为白色。目前只是试图让逻辑正确,我还没有添加代码来检查 RDC 是否为红色。
public void checkWinner(){
//CHECK FOR HORIZONTAL
for(int i=0;i<16;i+=4){
if(gridArray[i].getRDC() == R.drawable.white
&& gridArray[i+1].getRDC() == R.drawable.white
&& gridArray[i+2].getRDC() == R.drawable.white
){
Toast.makeText(getApplicationContext(),"THREE IN A ROW HORIZONTALLY",
Toast.LENGTH_SHORT).show();
Log.d("MyApp","3 in row horizontally");
}
}
//CHECK FOR VERTICAL
for(int i=0;i<=3;i++){
if(gridArray[i].getRDC() == R.drawable.white
&& gridArray[i+4].getRDC() == R.drawable.white
&& gridArray[i+8].getRDC() == R.drawable.white
// && gridArray[i+12].getRDC() == R.drawable.white
// ||
// gridArray[i+12].getRDC() == R.drawable.white
// && gridArray[i+8].getRDC() == R.drawable.white
// && gridArray[i].getRDC() == R.drawable.white
){
Toast.makeText(getApplicationContext(),"THREE IN A ROW VERTICALLY",
Toast.LENGTH_SHORT).show();
Log.d("MyApp","3 in row vertically");
}
}
}
所以目前,如果我从网格左侧连续获得 3 个图块,那么它将显示 toast
但是 如果我从右侧连续获得 3 个图块OF THE GRID 不会显示吐司?这与垂直对齐的图块相同(我将在这张图片后解释)。
左对齐
这是从左侧水平对齐的 3 个图块的图像:
从右对齐:
这是一张图像,其中有 3 个图块从右侧水平对齐:
来自顶部的垂直对齐图块的图像:
从底部对齐
出于某种原因,它不会检查是否有 3 个从网格底部垂直对齐,只有顶部?!
for(int i=0;i<16;i+=4){
if(gridArray[i].getRDC() == R.drawable.white
&& gridArray[i+1].getRDC() == R.drawable.white
&& gridArray[i+2].getRDC() == R.drawable.white
){
Toast.makeText(getApplicationContext(),"THREE IN A ROW HORIZONTALLY",
Toast.LENGTH_SHORT).show();
Log.d("MyApp","3 in row horizontally");
}
}
在此循环中,您开始检查 i == 0、i == 4、i == 8、i == 12。 在您的示例中,1、2、3 是白色的,但您永远不会真正检查这种可能性。
您尝试确定是否存在三个相同颜色的方块的方法根本上是错误的。首先,你应该有二维数组而不是一维数组,你现在有,因为它很容易扩展。
for(int i=0;i<ROWS;i++){
for(int j=0;j<COLUMNS;j++){
int color=gridArray[i][j++];
int count=1;
while(color==gridArray[i][j++]){
count++;
if(count>=MAX_SAME_COLOR){
Toast.makeText(getApplicationContext(),MAX_SAME_COLOR+" IN A ROW HORIZONTALLY",
Toast.LENGTH_SHORT).show();
Log.d("MyApp",MAX_SAME_COLOR+" in row horizontally");
}
}
}
}
如果你只是改变尺寸,如果垂直方向上也有三个相同颜色的方块,你可以很容易地得到。
对于垂直检查,
for(int i=0;i<=3;i++){
应该是
for(int i=0;i<=7;i++){
为什么?因为我们有两行可以有一列包含三个连续的相同颜色的单元格。第 1 行和第 2 行。
在循环中查找错误最可靠的方法是在纸上画一个 table 并遍历每个迭代。但是您的代码还有其他一些问题。这是一个表示二维问题的一维数组。这是不合逻辑且容易出错的。此外,当您应该编写 adaptable 代码时,您正在对数字进行硬编码。如果您需要将其更改为五乘五的网格怎么办?
for(int i=0;i<16;i+=4){
if((gridArray[i].getRDC() == R.drawable.white
&& gridArray[i+1].getRDC() == R.drawable.white
&& gridArray[i+2].getRDC() == R.drawable.white
)
||
(gridArray[i+1].getRDC() == R.drawable.white
&& gridArray[i+2].getRDC() == R.drawable.white
&& gridArray[i+3].getRDC() == R.drawable.white
)){
Toast.makeText(getApplicationContext(),"THREE IN A ROW HORIZONTALLY",
Toast.LENGTH_SHORT).show();
Log.d("MyApp","3 in row horizontally");
}
}