【发布时间】:2018-01-17 15:50:37
【问题描述】:
我一直在为一个基本的扫雷程序编写一些代码,此时我很自满地迷失了方向。炸弹周围的数字不会正确生成,甚至似乎没有出现问题的模式。我需要帮助来找到解决此问题的方法,而无需重新编写我的输入程序。我的老师想不出一种方法来帮助我,并建议我用我必须的东西来让一个基于运气的游戏感觉它在星期二到期。请帮忙。
#include <iostream>
#include <fstream>
#include <string>
#include <cstdlib>
#include <conio.h>
#include <windows.h>
#include <ctime>
using namespace std;
int main()
{
int GameBoard [9] [9] = { };
int BombTracker [20] = { };
srand(time(0));
for (int c = 0; c <= 10; c++ ) //generates 10 bombs
{
int TX;
int TY;
int MX = rand() % 8;
int MY = rand() % 8;
for ( TY = 1, TX = 0; TY <= 19; TX+=2, TY+=2)//cycle through array
{
if (MY == BombTracker [TY] && MX == BombTracker [TX])//Regenerate and restart count if found true
{
MX = rand() % 8;
MY = rand() % 8;
TY = -1;
TX = -2;
}
}
GameBoard [MX] [MY] = 9;
if (MY == 0 && MX == 0) //(0,0)
{
MX = MX + 1;
GameBoard [MY] [MX] = GameBoard [MY] [MX] + 1; //5: my,mx+1
MY = MY + 1;
GameBoard [MY] [MX] = GameBoard [MY] [MX] + 1; //7: my+1,mx+1
MX = MX - 1;
GameBoard [MY] [MX] = GameBoard [MY] [MX] + 1; //6: my+1,mx
}
if (MY == 0 && MX == 8) //(8,0)
{
MX = MX - 1;
GameBoard [MY] [MX] = GameBoard [MY] [MX] + 1; //1: my,mx-1
MY = MY -1;
GameBoard [MY] [MX] = GameBoard [MY] [MX] + 1; //2: my-1,mx-1
MY = MY + 2;
MX = MX + 1;
GameBoard [MY] [MX] = GameBoard [MY] [MX] + 1; //6: my+1,mx
}
if (MY == 8 && MX == 0) //(0,8)
{
MY = MY - 1;
GameBoard [MY] [MX] = GameBoard [MY] [MX] + 1; //3: my-1,mx
MX = MX + 1;
GameBoard [MY] [MX] = GameBoard [MY] [MX] + 1; //4: my-1,mx+1
MY = MY + 1;
GameBoard [MY] [MX] = GameBoard [MY] [MX] + 1; //5: my,mx+1
}
if (MY == 8 && MX == 8) //(8,8)
{
MX = MX - 1;
GameBoard [MY] [MX] = GameBoard [MY] [MX] + 1; //1: my,mx-1
MY = MY -1;
GameBoard [MY] [MX] = GameBoard [MY] [MX] + 1; //2: my-1,mx-1
MX = MX + 1;
GameBoard [MY] [MX] = GameBoard [MY] [MX] + 1; //3: my-1,mx
}
if ((MX >= 1 && MX < 8) && (MY > 7)) // bottom row
{
MX = MX - 1;
GameBoard [MY] [MX] = GameBoard [MY] [MX] + 1; //1: my,mx-1
MY = MY -1;
GameBoard [MY] [MX] = GameBoard [MY] [MX] + 1; //2: my-1,mx-1
MX = MX + 1;
GameBoard [MY] [MX] = GameBoard [MY] [MX] + 1; //3: my-1,mx
MX = MX + 1;
GameBoard [MY] [MX] = GameBoard [MY] [MX] + 1; //4: my-1,mx+1
MY = MY + 1;
GameBoard [MY] [MX] = GameBoard [MY] [MX] + 1; //5: my,mx+1
}
if ((MX >= 1 && MX < 8) && (MY < 1)) // top row
{
MX = MX - 1;
GameBoard [MY] [MX] = GameBoard [MY] [MX] + 1; //1: my,mx-1
MX = MX + 2;
GameBoard [MY] [MX] = GameBoard [MY] [MX] + 1; //5: my,mx+1
MY = MY + 1;
GameBoard [MY] [MX] = GameBoard [MY] [MX] + 1; //7: my+1,mx+1
MX = MX - 1;
GameBoard [MY] [MX] = GameBoard [MY] [MX] + 1; //6: my+1,mx
MX = MX - 1;
GameBoard [MY] [MX] = GameBoard [MY] [MX] + 1; //8: my+1,mx-1
}
if ((MX > 7) && (MY >= 1 &&MY < 8)) // right column
{
MX = MX - 1;
GameBoard [MY] [MX] = GameBoard [MY] [MX] + 1; //1: my,mx-1
MY = MY -1;
GameBoard [MY] [MX] = GameBoard [MY] [MX] + 1; //2: my-1,mx-1
MX = MX + 1;
GameBoard [MY] [MX] = GameBoard [MY] [MX] + 1; //3: my-1,mx
MY = MY + 2;
GameBoard [MY] [MX] = GameBoard [MY] [MX] + 1; //6: my+1,mx
MX = MX - 1;
GameBoard [MY] [MX] = GameBoard [MY] [MX] + 1; //8: my+1,mx-1
}
if ((MX > 7) && (MY >= 1 &&MY < 8)) // left column
{
MY = MY - 1;
GameBoard [MY] [MX] = GameBoard [MY] [MX] + 1; //3: my-1,mx
MX = MX + 1;
GameBoard [MY] [MX] = GameBoard [MY] [MX] + 1; //4: my-1,mx+1
MY = MY + 1;
GameBoard [MY] [MX] = GameBoard [MY] [MX] + 1; //5: my,mx+1
MY = MY + 1;
GameBoard [MY] [MX] = GameBoard [MY] [MX] + 1; //7: my+1,mx+1
MX = MX - 1;
GameBoard [MY] [MX] = GameBoard [MY] [MX] + 1; //6: my+1,mx
}
if ((MX >= 1 && MX < 8)&&(MY >= 1 && MY < 8)) // middle of the board
{
MX = MX - 1;
GameBoard [MY] [MX] = GameBoard [MY] [MX] + 1; //1: my,mx-1
MY = MY -1;
GameBoard [MY] [MX] = GameBoard [MY] [MX] + 1; //2: my-1,mx-1
MX = MX + 1;
GameBoard [MY] [MX] = GameBoard [MY] [MX] + 1; //3: my-1,mx
MX = MX + 1;
GameBoard [MY] [MX] = GameBoard [MY] [MX] + 1; //4: my-1,mx+1
MY = MY + 1;
GameBoard [MY] [MX] = GameBoard [MY] [MX] + 1; //5: my,mx+1
MY = MY + 1;
GameBoard [MY] [MX] = GameBoard [MY] [MX] + 1; //7: my+1,mx+1
MX = MX - 1;
GameBoard [MY] [MX] = GameBoard [MY] [MX] + 1; //6: my+1,mx
MX = MX - 1;
GameBoard [MY] [MX] = GameBoard [MY] [MX] + 1; //8: my+1,mx-1
}
}
int width = 9;
int height = 9;
for (int i = 0; i < height; ++i)
{
for (int j = 0; j < width; ++j)
{
cout <<GameBoard[i][j] << " ";
}
cout << endl;
}
}
【问题讨论】:
-
您尝试过使用调试器吗?你学到了什么?
-
for (int c = 0; c <= 10; c++)生成 11 个炸弹。 -
您使用
GameBoard [MX] [MY] = 9;设置炸弹的位置,但您使用GameBoard [MY] [MX]增加计数器,注意MX和MY是倒置的。 -
我在调试器中发现的唯一东西只出现在我的 xcode 中的 mac 上(我主要是在代码块中的学校 Windows 计算机上写这个)并且与 srand 并没有中继与数数有关的任何事情。
-
@nina 不要!将控制台输出复制/粘贴到您的edited 答案中。