![](/img/trans.png)
[英]How can I run a “headless” (no GUI) Unity3D game inside a C# program?
[英]How to program the Sudoku game logic in Unity3D
我正在尝试在 Unity3D 中制作数独游戏,但我目前停留在游戏背后的逻辑上。 (检查同一子网格、行和列中的所有数字是否不同)
我已经能够获得一个生成整个网格运行的脚本,包括 2x2、2x3 和 3x3 级别。 我坚持的部分是制作二维数组来保存所有子网格的选定值。 如果需要,我还可以提供完整的 GenerateGrid 脚本,但除此之外的任何帮助都会有所帮助。
(注意:我已尽我所能对此进行研究,但我在网上找到的东西都不是关于游戏的 Unity3D 版本,只有 2D 版本)
谢谢!
您可以将自己的数独表示为网格(带有行和列)。 每个网格单元本身就是一个子网格(带有子行和子列)
要检查用户是否解决了数独问题,您有 3 个条件
从那里我们可以开始工作。 我建议使用两组双向 arrays。 一个用于主网格,一个用于每个子网格所以基本上......您的网格声明可能看起来像这样int[,][,] sudoku
和 sudoku[1,2][3,4] 将访问第 1 行,第 2 列,第 3 子行,第 4 子列,如果有意义的话
所以要检查游戏条件:
sudoku[1,2][i,j]
的每个子单元格以确保网格单元格 [1,2] 中没有重复的数字sudoku[1,i][2,j]
的每个子单元格,以确保第 1 列的第 2 子列中没有重复的数字sudoku[i,1][j,2]
的每个子单元格,以确保子列 1 的子行 2 中没有重复的数字您应该找到一个更好的优化来检查网格,而不是逐个子单元地强制它,但我把它留给您。
希望有帮助;)
像这样的东西? 该板是一个 9x9 网格。 跳过多维语法,因为它只会使事情复杂化(在我看来)。
(伪代码 - 我没有尝试编译这个。)
int[] board = new int[9*9];
/// note that coordinates are zero-based. So, rows, columns. etc. go from 0..8, not 1..9
int getCell(int x, int y)
{
return board[y * 9 + x];
}
bool colIsValid(int x)
{
var digitsFound = new bool[9];
for(int y=0; y < 9; ++y)
{
var cellValue = getCell(x,y);
if (cellValue > 0)
{
if (digitsFound[cellValue])
return false;
digits[cellValue] = true;
}
}
return true;
}
bool rowIsValid(int y)
{
var digitsFound = new bool[9];
for(int x=0; x < 9; ++x)
{
var cellValue = getCell(x,y);
if (cellValue > 0)
{
if (digitsFound[cellValue])
return false;
digits[cellValue] = true;
}
}
return true;
}
bool subGridIsValid(int x, int y)
{
var minX = (x / 3) * 3;
var maxX = minX + 3;
var minY = (y / 3) * 3;
var maxY = minY + 3;
var digitsFound = new bool[9];
for(var j=minY; j < maxY; ++j)
{
for(var i = minX; i < maxX; ++i)
{
var cellValue = getCell(i,j);
if (cellValue > 0)
{
if (digitsFound[cellValue])
return false;
digitsFound[cellValue] = true;
}
}
}
return true;
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.