gpt4 book ai didi

java - MineSweeper 揭示邻居帮助需要 java

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:25:11 25 4
gpt4 key购买 nike

我目前正在研究一个扫雷程序,我需要一些帮助来揭示其中的邻居。目前我的程序可以做的事情如下

1 是被选中的按钮,线条是我需要的填写。目前选中的按钮周围的按钮是我可以填写的内容。

如有必要,我可以发布代码。

提前感谢您的帮助。 enter image description here

1是地雷,4是阵列上的标记点

public int findneighbors(int row, int col) {
int count = 0;
if (board[row][col] == 2)
try {
if (board[row][col + 1] == 1 || board[row][col + 1] == 4)
count ++;
}

catch( ArrayIndexOutOfBoundsException e)
{
}
try {
if (board[row + 1][col + 1] == 1 || board[row + 1][col + 1] == 4)
count ++;
}
catch( ArrayIndexOutOfBoundsException e)
{
}
try {
if (board[row + 1][col - 1] == 1 || board[row + 1][col - 1] == 4)
count ++;
}
catch( ArrayIndexOutOfBoundsException e)
{
}
try {
if (board[row - 1][col - 1] == 1 || board[row - 1][col - 1] == 4)
count ++;
}
catch( ArrayIndexOutOfBoundsException e)
{
}
try {
if (board[row][col + 1] == 1 || board[row][col + 1] == 4)
count ++;
}
catch( ArrayIndexOutOfBoundsException e)
{
}
try {
if (board[row + 1][col] == 1 || board[row + 1][col] == 4)
count ++;
}
catch( ArrayIndexOutOfBoundsException e)
{
}
try {
if (board[row - 1][col] == 1 || board[row - 1][col] == 4)
count ++;
}
catch( ArrayIndexOutOfBoundsException e)
{
}
try {
if (board[row][col - 1] == 1 || board[row][col - 1] == 4)
count ++;
}
catch( ArrayIndexOutOfBoundsException e)
{
}
try {
if (board[row - 1][col + 1] == 1 || board[row - 1][col + 1] == 4)
count ++;
}
catch( ArrayIndexOutOfBoundsException e)
{
}

return count;
}
public int buttonFloodFill(int r, int c)
{
int loopCount = 0;
int rowCount = 1;
int colCount = 1;
while (loopCount < 1)
{
try {
if (g.getFloodValue(r,c + colCount) == true) {
board[r][c + colCount].setText(Integer.toString(g.findneighbors(r,c + colCount)));
board[r][c + colCount].setEnabled(false);
}
}
catch( ArrayIndexOutOfBoundsException e)
{
}
try {
if (g.getFloodValue(r,c - colCount) == true) {
board[r][c - colCount].setText(Integer.toString(g.findneighbors(r,c - colCount)));
board[r][c - colCount].setEnabled(false);
}
}
catch( ArrayIndexOutOfBoundsException e)
{
}
try {
if (g.getFloodValue(r + rowCount,c + colCount) == true) {
board[r + rowCount][c + colCount].setText(Integer.toString(g.findneighbors(r + rowCount,c + colCount)));
board[r + rowCount][c + colCount].setEnabled(false);
}
}
catch( ArrayIndexOutOfBoundsException e)
{
}
try {
if (g.getFloodValue(r + rowCount,c - colCount) == true) {
board[r + rowCount][c - colCount].setText(Integer.toString(g.findneighbors(r + rowCount,c - colCount)));
board[r + rowCount][c - colCount].setEnabled(false);
}
}
catch( ArrayIndexOutOfBoundsException e)
{
}
try {
if (g.getFloodValue(r - rowCount,c - colCount) == true) {
board[r - rowCount][c - colCount].setText(Integer.toString(g.findneighbors(r - rowCount,c - colCount)));
board[r - rowCount][c - colCount].setEnabled(false);
}
}
catch( ArrayIndexOutOfBoundsException e)
{
}
try {
if (g.getFloodValue(r - rowCount,c + colCount) == true) {
board[r - rowCount][c + colCount].setText(Integer.toString(g.findneighbors(r - rowCount,c + colCount)));
board[r - rowCount][c + colCount].setEnabled(false);
}
}
catch( ArrayIndexOutOfBoundsException e)
{
}
try {
if (g.getFloodValue(r - rowCount,c) == true) {
board[r - rowCount][c].setText(Integer.toString(g.findneighbors(r - rowCount,c)));
board[r - rowCount][c].setEnabled(false);
}
}
catch( ArrayIndexOutOfBoundsException e)
{
}
try {
if (g.getFloodValue(r + rowCount,c) == true) {
board[r + rowCount][c].setText(Integer.toString(g.findneighbors(r+ rowCount,c)));
board[r + rowCount][c].setEnabled(false);
}
}
catch( ArrayIndexOutOfBoundsException e)
{
}
rowCount ++;
colCount ++;
loopCount ++;

}
return 0;
}

最佳答案

虽然我没有阅读您的代码,但您似乎需要学习一些更基本的技术,例如循环和使用小辅助函数进行重构。我看得出来你对异常处理不感兴趣,这对于这种规模的程序来说现在很好,但是还有更多视觉上令人愉悦(和可读性增加)的解决方案,例如将连续的 try-catch block 合并到一个或简单地声明可能抛出的函数。

至于你的问题,递归就是答案。你不能一直检查邻居和邻居的邻居以及他们的邻居等等。你需要想出一个重复的模式。 Flood fill是实际答案,但您需要熟悉 recursion并学习识别它可能解决的问题。

关于java - MineSweeper 揭示邻居帮助需要 java,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9320073/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com