N
N
Nazarko032020-11-23 15:19:30
C++ / C#
Nazarko03, 2020-11-23 15:19:30

How to solve errors in the code?

Errors:
78 19 C:\Users\mrori\OneDrive\Documents\main.cpp [Error] 'Direction' is not a class or namespace
97 12 C:\Users\mrori\OneDrive\Documents\main.cpp [Error] ' Direction' is not a class or namespace
101 12 C:\Users\mrori\OneDrive\Documents\main.cpp [Error] 'Direction' is not a class or namespace

// ConsoleApplication10.cpp : Defines the entry point for the console application.
//


#include <clocale>
#include <conio.h>
#include <stdlib.h>
#include <iostream>
#include <ctime>


using namespace std;

// enum çáåð³ãຠíàïðÿìêè: ãîðèçîíòàëüíèé, âåðòèêàëüíèé
enum Direction{H, V};

char numbers[10] = { '0','1','2','3','4','5','6','7','8','9'};
// êàðòà ðàçì³ðîì â 13 ñòð³÷îê òà 29 ñòîâáö³â
const int s = 13, c = 29;
char map[s][c] = {
    "  0123456789     0123456789 ",
    " #----------#   #----------#",
    "0|          |  0|          |",
    "1|          |  1|          |",
    "2|          |  2|          |",
    "3|          |  3|          |",
    "4|          |  4|          |",
    "5|          |  5|          |",
    "6|          |  6|          |",
    "7|          |  7|          |",
    "8|          |  8|          |",
    "9|          |  9|          |",
    " #----------#   #----------#" };

void MapInit(char map[s][c]);
void Show(char map[s][c]);
int Input(char& , char&);
void Test();
int CheckEnding();


// Êëàñ Áîéîâîãî ïîëÿ
class BattleField
{
public:
  int Ships[10][10]; // ìàñèâ êîðàáë³â
  int Hits[10][10]; // ìàñèâ âèñòð³ë³â

  void ShipsInit(bool autoPlace)
  {
    // ²í³ö³àë³çàö³ÿ ìàñèâ³â hits ³ ships
    for (int i = 0; i < 10; i++)
    {
      for (int j = 0; j< 10; j++)
      {
        Ships[i][j] = 1;
        Hits[i][j] = 0;
      }
    }
    // Ðîçñòàíîâêà êîðàáë³â
    Set(4, autoPlace);
    Set(3, autoPlace);
    Set(3, autoPlace);
    Set(2, autoPlace);
    Set(2, autoPlace);
    Set(2, autoPlace);
    Set(1, autoPlace);
    Set(1, autoPlace);
    Set(1, autoPlace);
    Set(1, autoPlace);
  }

  void Set (int deck, bool automatically)
  {
    int my = deck - 1;
    bool isset = 0;
    int s,c;
    Direction dir = Direction::H;
    while (isset == 0) // ïåðåâ³ðêà ÷è âäàëîñÿ ðîçì³ñòèòè êîðàáåëü
    {
      if (automatically)
      {
        dir = static_cast<Direction>(rand()%2); // âèáèðàºìî íàïðÿì

        s = rand()%10; //âèïàäêîâèì ÷èíîì âèçíà÷àþòüñÿ êîîðäèíàòè
        c = rand()%10;
      }
      else
      {
        char tempDir;
        cout << "Íàïðÿì H/V: ";
        cin >> tempDir;
        switch (tempDir)
        {
        case 'H':
        case 'h':
          dir = Direction::H;
          break;
        case 'V':
        case 'v':
          dir = Direction::V;
          break;
        }

        cout << "Ðÿäîê: ";
        cin >> s;

        cout << "Ñòîâáåöü: ";
        cin >> c;
      }

      int e = 0;
      switch (dir)
      {
      case H:
        if (Ships[s][c+deck-1] == 1)
        {
          e = ShipPlace(s,c,dir,deck); // ïåðåâ³ðêà ñóì³æíèõ êë³òèí
          if (e == 0)
          {
            for (int i = 0; i < deck; i++)
            {
              Ships[s][c+i] = 2; // ðîçì³ùóºìî êîðàáåëü â ìàñèâ³ ships
            }
            isset = 1;
          }
        }
        break;
      case V:
        if (Ships[s+deck-1][c] == 1)
        {
          e = ShipPlace(s,c,dir,deck);
          if (e == 0)
          {
            for (int i = 0; i < deck; i++)
            {
              Ships[s+i][c] = 2;
            }
            isset = 1;
          }
        }
        break;
      } 
    } 
    MapInit(map);
    Show(map);
    //system("pause");
    //system("cls");
  }

  /*
  Ôóíêö³ÿ ïåðåâ³ðÿº, ÷è ìîæíà â äàí³é êîîðäèíàò³ [s] [c]
  ðîçì³ñòèòè êîðàáåëü ç ïàëóáàìè deck.
  Ó êîìåíòàðÿõ ïîêàçàíî ÿê³ êë³òèíè ïåðåâ³ðÿþòüñÿ ïðè óñòàíîâö³
  ÷îòèðèïàëóáíîìó êîðàáëÿ â [4] [3]
  */
  int ShipPlace(int s, int c, Direction dir, int deck)
  {
    int e = 0;
    switch (dir)
    {
    case H:
      if (Ships[s-1][c-1] == 2)
      {
        e = 1;
      }
      if (Ships[s-1][c+deck] == 2)
      {
        e = 1;
      }
      if (Ships[s+1][c-1] == 2)
      {
        e = 1;
      }
      if (Ships[s+1][c+deck] == 2)
      {
        e = 1;
      }

      if (Ships[s][c-1] == 2)
      {
        e = 1;
      }
      if (Ships[s][c+deck] == 2)
      {
        e = 1;
      }
      for (int i = 0; i < deck; i++)
      {
        if (Ships[s-1][c+i] == 2)
        {
          e = 1;
        }
        if (Ships[s+1][c+i] == 2)
        {
          e = 1;
        }
      }
      break;
    case V:
      if (Ships[s-1][c-1] == 2)
      {
        e = 1;
      }
      if (Ships[s-1][c+1] == 2)
      {
        e = 1;
      }
      if (Ships[s+deck][c-1] == 2)
      {
        e = 1;
      }
      if (Ships[s+deck][c+1] == 2)
      {
        e = 1;
      }

      if (Ships[s-1][c] == 2)
      {
        e = 1;
      }
      if (Ships[s+deck][c] == 2)
      {
        e = 1;
      }
      for (int i = 0; i < deck; i++)
      {
        if (Ships[s+i][c-1] == 2)
        {
          e = 1;
        }
        if (Ships[s+i][c+1] == 2)
        {
          e = 1;
        }
      }
      break;
    }
    return e;
  }
};

class Player : public BattleField
{
public:
  bool DefeatFlag; // çì³ííà â ÿê³é çáåð³ãàþòüñÿ äàí³ ïðî ïîðàçêó

  Player (): DefeatFlag(0)	{} // êîíñòðóêòîð

  // Õ³ä êîìï'þòåðà: âíîñèìî çì³íè â ìàñèâè human.ships ³ computer.hits
  void Turn(Player& enemy)
  {
    bool flag = 0;
    while (flag == 0)
    {
      int character = rand()%10; // Êîîðäèíàòè çà ÿêèìè áóäå ñòð³ëÿòè êîìï'þòåð
      int digit = rand()%10;     // âèáèðàþòüñÿ âèïàäêîâî
      if (Hits[character][digit] != 1) // ïåðåâ³ðêà: âèáèðàâ ÷è âæå êîìï'þòåð ö³ êîîðäèíàòè
      {
        Hits[character][digit] = 1;
        flag = 1;
        if (enemy.Ships[character][digit] == 2)
        {
          enemy.Ships[character][digit] = 3;
        }
      }
    }
  }

  // Õ³ä ãðàâöÿ: âíîñèìî çì³íè â ìàñèâè computer.ships ³ human.hits
  void Turn(Player& enemy, int character, int digit)
  {
    Hits[character][digit] = 1;
    if (enemy.Ships[character][digit] == 2)
    {
      enemy.Ships[character][digit] = 3;
    }
  }
};

Player player1;
Player player2;

// äîáàâëåííÿ â ìàñèâ map ³íôîðìàö³¿ ³ç human.ships.
void MapInit(char map[s][c])
{
  for (int i=0;i < 10; i++)
  {
    for (int j=0; j < 10; j++)
    {
      if (player1.Ships[i][j] == 2)
        map[i+2][j+2] = 'Ê';
    }
  }
}

/*
Ñïî÷àòêó â ìàñèâ maps çàíîñèòüñÿ ³íôîðìàö³ÿ ïðî ïîñòð³ëè çðîáëåíèõ
ïðîòèâíèêàìè.
Ïîò³ì â³äáóâàºòüñÿ âèâåäåííÿ íà åêðàí map. ïðè öüîìó âèêîðèñòîâóþòüñÿ
ìàñèâè ships ³ hits êëàñó player.
*/
void Show(char map[s][c])
{
  for (int i=0; i<10; i++)
  {
    for (int j=0; j<10; j++)
    {
      /* Çàïîâíþºìî ïîëå ãðàâöÿ */
      if (player2.Hits[i][j] == 1 && player1.Ships[i][j] == 3)
      {
        map[i+2][j+2] = 'Õ';
      }
      else if (player2.Hits[i][j] == 1 && player1.Ships[i][j] != 3)
      {
        map[i+2][j+2] = 'Î';
      }

      /* Çàïîâíþºìî ïîëå êîìï'þòåðà */
      if (player2.Ships[i][j] == 3 && player1.Hits[i][j] == 1)
      {
        map[i+2][j+2+15] = 'Õ';
      }
      else if (player2.Ships[i][j] != 3 && player1.Hits[i][j] == 1)
      {
        map[i+2][j+2+15] = 'O';
      }
    } 
  }

  // Ïîñèìâîëüíî¿ âèâîä ìàñèâó map íà åêðàí
  for (int i = 0; i < s; i++)
  {
    for (int j = 0; j < c; j++)
    {
      cout << map[i][j];
    }
    cout << "\n";
  }
}

// ââåäåííÿ êîîðäèíàò
int Input(char& character, char& digit)
{
  character = _getche(); // ââåäåííÿ "ãîðèçîíòàëüíî¿" êîîðäèíàòè
  int match = 0;
  for (int i = 0; i < 10; i++)
    if (numbers[i] == character)
    {
      match = 1;
      character = i;
    }
    if (match == 0)	
      return 1;
    cout << '-';
    match = 0;
    digit = _getche(); // ââåäåííÿ "âåðòèêàëüíî¿" êîîðäèíàòè
    for (int i = 0; i < 10; i++)
      if (numbers[i] == digit)
      {
        match = 1;
        digit = i;
      }
      if (match == 0)
        return 1;
      return 0;	
}

void Test()
{
  cout << endl;
  for (int i = 0; i < 10; i++)
  {
    for (int j = 0; j < 10; j++)
    {
      cout << player1.Hits[i][j];
    }
    cout << "  ";
    for (int j = 0; j < 10; j++)
    {
      cout << player2.Hits[i][j];
    }
    cout << endl;
  }
  cout << endl;
  for (int i = 0; i < 10; i++)
  {
    for (int j = 0; j < 10; j++)
    {
      cout << player1.Ships[i][j];
    }
    cout << "  ";
    for (int j = 0; j < 10; j++)
    {
      cout << player2.Ships[i][j];
    }
    cout << endl;
  }
}

// Ó ôóíêö³¿ âñòàíîâëþþòüñÿ ³ ïåðåâ³ðÿþòüñÿ ïðàïîðè defeat_flag ãðàâö³â.
int CheckEnding()
{
  int flag = 0;
  int human_flag = 0;
  int computer_flag = 0;
  for (int i=0; i<10;i++)
  {
    for (int j=0; j<10;j++)
    {
      if (player1.Ships[i][j] == 2)
        human_flag = 1; // ó êîðèñòóâà÷à ùå çàëèøèëèñÿ íåóøêîäæåí³ êîðàáë³
      if (player2.Ships[i][j] == 2)
        computer_flag = 1; // ó êîìï'þòåðà ùå çàëèøèëèñÿ íåóøêîäæåí³ êîðàáë³
    }
  }
  if (human_flag == 0)
    flag = 2;
  if (computer_flag == 0)
    flag = 1;
  if (flag == 1)
  {
    cout << "Ïåðåì³ã ãðàâåöü!" << endl;
    return 2;
  }
  if (flag == 2)
  {
    cout << "Ïåðåì³ã êîìï'þòåð!" << endl;
    return 2;
  }
}

int main()
{
  setlocale(LC_CTYPE, "Russian");
  int message = 0; // çì³ííà çáåð³ãຠêîäè ïîâ³äîìëåíü
  
  // âñòàíîâëåííÿ ïî÷àòêîâãî çíà÷åííÿ ãåíåðàòîðà âèïàäêîâèõ ÷èñåë
  srand( static_cast<unsigned int>(time(NULL)) );

  char temp;
  cout << "Ðîçòàøîâóâàòè àâòîìàòè÷íî? y/n: ";
  cin >> temp;
  bool autoPlace = temp == 'y' ? true : false;

  player1.ShipsInit(autoPlace); // ³í³ö³àë³çàö³ÿ ìàñèâ³â ëþäèíè
  player2.ShipsInit(true); // ³í³ö³àë³çàö³ÿ ìàñèâ³â êîìïþòåðà
  MapInit(map); // äîáàâëåííÿ â ìàñèâ map ³íôîðìàö³¿ ³ç human.ships

  

/*
  message ìîæå ïðèéìàòè íàñòóïí³ çíà÷åííÿ:
  0 - âñå ãóä
  1 - êîðèñòóâà÷ íàòèñíóâ íåâ³ðíó êëàâ³øó
  2 - õòîñü ïåðåì³ã, ê³íåöü ãðè
  */
  while (message != 2)
  {
    int user_input = 0;
    system("cls"); 
    Show(map);   
    if (message == 1)
    {
      cout << "Íåäîïóñòèìå çíà÷åííÿ!" << endl;
    }
    message = 0;   // îáíóëåííÿ message

    char character, digit;
    user_input = Input(character, digit);
    if (user_input == 1)
    {
      message = 1;
      continue; 
    }
    player1.Turn(player2, character, digit);
    player2.Turn(player1);
    message = CheckEnding();
  }
  system("pause");
  return 0;
}

Answer the question

In order to leave comments, you need to log in

1 answer(s)
R
res2001, 2020-11-23
@res2001

See how to deal with enums correctly: https://en.cppreference.com/w/cpp/language/enum
The kind of enumeration you use in your code is called Scoped enumerations. To use it, you must declare a Direction like so: . If the enumeration is declared as you have, then you need to access it without specifying the Direction. enum class Direction {...

Didn't find what you were looking for?

Ask your question

Ask a Question

731 491 924 answers to any question