Как сохранить весь массив в c#? - PullRequest
0 голосов
/ 11 июля 2020

Я делаю простую игру в C#, где игрок сражается, пока у него не кончится здоровье:

public void FightLoop(int currentHealth) {

    bool death = false;

    do{

      hit = false;

      if(currentHealth == 0){
          death = true;
      }


      turn = turn + 1;
      string turnRecord = turn.ToString();

      string firstPlayerChoiceString = GetPlayerInput();
      string secondPlayerChoiceString = GetRandomWeapon ();

      string gameResult = DetermineWinner(firstPlayerChoiceString, secondPlayerChoiceString, currentHealth, turnRecord);

      if(hit == true){
       currentHealth = currentHealth - 1;
      }

      FightRecord();
      AddRecord(firstPlayerChoiceString, secondPlayerChoiceString, gameResult, turnRecord, turn); 
    
    }while (death == false);

    DisplayFightHistory ();

  }

В конце каждого боя должно быть показано краткое изложение всего. (массив с ходами, атаками и результатами).

public void FightRecord(int recordSize = 100)
    {
        try
        {
            fightRecordSize = recordSize;
            fightRecord = new string[fightRecordSize, 4];
        }
        catch (OverflowException e)
        {
            System.Console.WriteLine("OverflowException during FightRecord initialization: \"{0}\"\nrecordSize given was [{1}]\nSetting recordSize to 10", e.Message, recordSize);
            fightRecordSize = 100;
            fightRecord = new string[fightRecordSize, 4];
        }
        fightRecordCurrentSize = fightRecordCurrentSize++;
    }
    
    
    public void AddRecord(string playerOneChoice, string playerTwoChoice, string gameResult, string turnRecord, int turn)
    {
    
        // Insert the record data
        fightRecord[fightRecordCurrentIndex, 0] = playerOneChoice;
        fightRecord[fightRecordCurrentIndex, 1] = playerTwoChoice;
        fightRecord[fightRecordCurrentIndex, 2] = gameResult;
        fightRecord[fightRecordCurrentIndex, 3] = turnRecord;
    
        // Increment the fight index counter and current history size
        fightRecordCurrentIndex = (fightRecordCurrentIndex + 1) % fightRecordSize;
    
        if (fightRecordCurrentSize < fightRecordSize)
        {
            fightRecordCurrentSize++;
        }
    }
    
    
  public void DisplayFightHistory () {
    
      System.Console.WriteLine ("\nPodsumowanie:");
      for (int i = 0; i < fightRecordCurrentSize; i++){
        System.Console.WriteLine ("Tura #{0}:\t{1}\t-\t{2},\t{3} {4}",
          fightRecord[i,3], fightRecord[i,0], fightRecord[i,1], fightRecord[i,2], i);

      }
    }

Однако каждый раз я получаю только последнее значение, например:

Итог: Turn #: -, Перемена #: - , Перемена #: - , Перемена #: - , Перемена #: - , Перемена #: - , Ход # 8: Меч - Копье, вы теряете

Следуя всему процессу создания массива, кажется, что сначала значения помещаются в него правильно, но с каждым новым ходом только остается последнее значение. Кто-нибудь знает, почему это происходит?

1 Ответ

0 голосов
/ 11 июля 2020

Используйте в качестве индекса переменную l oop.

Изменить

fightRecord[displayRecordIndex,3], fightRecord[displayRecordIndex,0], fightRecord[displayRecordIndex,1], fightRecord[displayRecordIndex,2], displayRecordIndex);

На

fightRecord[i,3], fightRecord[i,0], fightRecord[i,1], fightRecord[i,2], i);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...