0

I want the "BombenGenerieren(anzahlMinen)" only one time, how should I write it, that it doesn't generates new bombs every round?

public Game(int anzahlMinen, int xeingabe, int yeingabe)
{
  _minenArray = new int[5, 5];
  _emptyArray = new int[5, 5];
  _boolArray = new bool[5, 5];
  program = new Program();
  zeichnen = new Draw();

  BombenGenerieren(anzahlMinen);
  FillPlayMap();
  Umdreher(yeingabe, xeingabe);
  zeichnen.OpenField(_minenArray, _boolArray);
  //SeenMap();

}
4

2 回答 2

1

我假设Game是一个构造函数,你想执行BombenGenerieren一次并在实例之间共享它。

您应该做的是,将其设为BombenGenerieren静态并将其效果存储BombenGenerieren在一个或多个静态字段或属性中。然后,您应该Game.BombenGenerieren在实例化新Game对象之前调用,或者创建一个静态构造函数,如下所示:

public static Game()
{
    BombenGenerieren(anzahlMinen);
}

静态构造函数将在您第一次使用该Game类型时执行。请注意,它不带参数,因此 anzahlMinen 必须是一个常数。如果这是一个问题,请使用常规静态方法。

另一种选择是将BombenGenerieren方法的结果封装在一个对象中并将其传递给Game构造函数,构造函数可以将结果应用于每个新类。

于 2013-11-06T11:26:57.390 回答
0

基本上,利用一个boolean变量来跟踪BombenGenerieren.

boolean bombenGeneriert = false;

public Game(int anzahlMinen, int xeingabe, int yeingabe) {
    //...

    BombenGenerieren(anzahlMinen);

    //...
}

public void BombenGenerieren(int minen) {
    if (!bombenGeneriert) {
        bombenGeneriert = true;

        //the rest of your code in this method
    }
}

这将bombenGeneriert在第一次执行该方法时设置为 true。现在,在每次执行时,它都会检查!bombenGeneriert哪个将评估为false.

此外,您应该考虑重新排列代码。我怀疑你Game()不止一次打电话,所以你应该把你的BombenGenerieren()方法重新定位在外面的某个地方Game()

如果Game是您的Game()构造函数bombenGeneriert则必须是静态的:

static boolean bombenGeneriert = false;
于 2013-11-06T11:05:24.900 回答