title: C++ Need advice on (why it isn't working properly) my basic text console game (I'm an beginner). Not working as I want it to
body: <p>So I'm new to programming and I've encountered a problem when trying to make a basic text game. </p>
  
  <p>BTW I do know I could've made some more functions to decrease the code (like instead of copy and paste the algorithm of the percentage I could've made a function that returned the value. But I just wanted to get it done so I could advance slowely</p>
  
  <p>When compiling and running it expand the console, otherwise it'll not look good. (for menu and settings). Thanks in advance!</p>
  
  <p>It isn't properly working. eHealth and hHealth (private class variables) isn't properly getting subtracted. I've the best I could but I have no idea what I'm doing wrong so please help me! Here's the source code:</p>
  
  <p>2D game V1.cpp </p>
  
  <pre><code>#include "stdafx.h"
  #include &lt;iostream&gt;
  #include &lt;ctime&gt;
  #include "Header.h"
  #include &lt;windows.h&gt;
  
  
  using namespace std;
  
  
  int main()
  {
      combat CombatEngine;
      CombatEngine.renderMenu(0);
  
      return 0;
  }
  </code></pre>
  
  <p>Header.h</p>
  
  <pre><code>#ifndef Header_H_
  #define Header_H_
  
  class combat {
  
  private:
      int hHealth;
      int eHealth;
  
  public:
      combat() : hHealth(100), eHealth(100) { };
      combat(int H, int E) : hHealth(H), eHealth(E) {};
      float fGen();
      void renderMenu(int choise);
      void renderSettings();
      void renderHuman(int D);
      void renderHumanAttack();
      void refreshScreen();
      void renderSkeleton(int D);
      void renderSkeletonAttack();
      void renderHumanVSkeleton(int D);
      void renderHumanVSkeletonAttack(int D);
      void inGame();
      int attacks(int attack);
      void dealDMG(int dmg, int d);
  };
  
  
  #endif
  </code></pre>
  
  <p>Combat Engine.cpp</p>
  
  <pre><code>    #include "stdafx.h"
  #include &lt;random&gt;
  #include &lt;iostream&gt;
  #include &lt;Windows.h&gt;
  #include "Header.h"
  #include "string"
  #include &lt;ctime&gt;
  
  
  using namespace std;
  
  float combat::fGen() {
  
      mt19937 fGenerator(time(NULL));
      uniform_real_distribution&lt;float&gt; randF(0.0f, 1.0f);
      float fNum(randF(fGenerator));
  
      return fNum;
  
  }
  
  void combat::renderMenu(int rendNum) {
      if (rendNum == 0)
      {
          for (int i = 0; i != 12; i++)
          {
              cout &lt;&lt; "####################################################################################################\n";
          }
          cout &lt;&lt; "############################################|-Play (1)|#############################################\n";
          cout &lt;&lt; "###########################################|Settings (2)|###########################################\n";
          for (int i = 0; i != 13; i++)
          {
              cout &lt;&lt; "####################################################################################################\n";
  
          }
  
      }
  
      int dec = 0;
      while (dec != 1 &amp;&amp; dec != 2) {
          cin &gt;&gt; dec;
          if (dec != 1 &amp;&amp; dec != 2)
          {
              cout &lt;&lt; "Error: Invalid input!\n";
          }
      }
      if (dec == 1) {
          refreshScreen();
          inGame();
      }
      if (dec == 2) {
          renderSettings();
  }
  
  }
  
  void combat::renderSettings() {
      refreshScreen();
      for (int i = 0; i != 12; i++)
      {
          cout &lt;&lt; "####################################################################################################\n";
      }
      cout &lt;&lt; "#####################################| change human health (1)|#####################################\n";
      cout &lt;&lt; "######################################| change mob health (2)|######################################\n";
          cout &lt;&lt; "#############################################|Back (3)|#############################################\n";
      for (int i = 0; i != 12; i++)
      {
          cout &lt;&lt; "####################################################################################################\n";
      }
      int dec = 0;
      while (dec != 1 &amp;&amp; dec != 2 &amp;&amp; dec != 3)
      {
          cin &gt;&gt; dec;
          if (dec != 1 &amp;&amp; dec != 2 &amp;&amp; dec != 3)
          {
              cout &lt;&lt; "Error: Invalid input!\n";
          }
      }
      for (;;)
      {
          if (dec == 1)
          {
              refreshScreen();
              for (int i = 0; i != 13; i++)
              {
                  cout &lt;&lt; "####################################################################################################\n";
              }
  
                  cout &lt;&lt; "#############################| &lt;&lt; Type the new value (previously: " &lt;&lt; hHealth &lt;&lt;  ".)|############################\n";
  
              for (int i = 0; i != 13; i++)
              {
                  cout &lt;&lt; "####################################################################################################\n";
              }
              int inc;
              cin &gt;&gt; inc;
              hHealth = inc;
              refreshScreen();
              renderMenu(0);
  
          }
          if (dec == 2)
          {
              refreshScreen();
              for (int i = 0; i != 13; i++)
              {
                  cout &lt;&lt; "####################################################################################################\n";
              }
  
              cout &lt;&lt; "#############################| &lt;&lt; Type the new value (previously: " &lt;&lt; eHealth &lt;&lt; ".)|############################\n";
  
              for (int i = 0; i != 13; i++)
              {
                  cout &lt;&lt; "####################################################################################################\n";
              }
              int inc;
              cin &gt;&gt; inc;
              eHealth = inc;
              refreshScreen();
              renderMenu(0);
          }
          if (dec == 3)
          {
              refreshScreen();
              renderMenu(0);
  
          }
      }
  }
  
  
  void combat::renderHuman(int D) {
      if (D == 0) {
          cout &lt;&lt; "_____\n";
          cout &lt;&lt; "|   |\n";
          cout &lt;&lt; "O _ O\n";
          cout &lt;&lt; "/|_|\\ \n";
          cout &lt;&lt; "_| |_\n";
          cout &lt;&lt; "#############################################" &lt;&lt; endl;
      }
      if (D == 1) {
          cout &lt;&lt; "_____\n";
          cout &lt;&lt; "|   |\n";
          cout &lt;&lt; "O _ O/\n";
          cout &lt;&lt; "/|_|/ \n";
          cout &lt;&lt; "_| |_\n";
          cout &lt;&lt; "#############################################" &lt;&lt; endl;
      }
  
  
  
  }
  
  void combat::renderHumanAttack()
  {
  
      Sleep(500);
      refreshScreen();
      renderHuman(1);
      Sleep(250);
      refreshScreen();
      renderHuman(0);
      Sleep(500);
      refreshScreen();
      renderHuman(1);
      Sleep(250);
      refreshScreen();
      renderHuman(0);
  }
  
  void combat::refreshScreen()
  {
      system("cls");
  }
  
  void combat::renderSkeleton(int D)
  {
      if (D == 0)
      {
              cout &lt;&lt; " ___" &lt;&lt; endl;
              cout &lt;&lt; "{o_o}" &lt;&lt; endl;
              cout &lt;&lt; "/( )\\ " &lt;&lt; endl;
              cout &lt;&lt; " / \\" &lt;&lt; endl;
              cout &lt;&lt; "#############################################" &lt;&lt; endl;
      }
      if (D == 1)
      {
          cout &lt;&lt; "  ___" &lt;&lt; endl;
          cout &lt;&lt; "\\{o_o}" &lt;&lt; endl;
          cout &lt;&lt; " \\( )\\ " &lt;&lt; endl;
          cout &lt;&lt; "  / \\" &lt;&lt; endl;
          cout &lt;&lt; "#############################################" &lt;&lt; endl;
      }
  }
  
  void combat::renderSkeletonAttack()
  {
      Sleep(500);
      refreshScreen();
      renderSkeleton(1);
      Sleep(250);
      refreshScreen();
      renderSkeleton(0);
      Sleep(500);
      refreshScreen();
      renderSkeleton(1);
      Sleep(250);
      refreshScreen();
      renderSkeleton(0);
  }
  
  void combat::renderHumanVSkeleton(int D)
  {
      if (D == 0)
      {
          //refreshScreen();
          cout &lt;&lt; "_____               \n";
          cout &lt;&lt; "|   |               ";
          cout &lt;&lt; " ___" &lt;&lt; endl;
          cout &lt;&lt; "O _ O               ";
          cout &lt;&lt; "{o_o}" &lt;&lt; endl;
          cout &lt;&lt; "/|_|\\               ";
          cout &lt;&lt; "/( )\\ " &lt;&lt; endl;
          cout &lt;&lt; "_| |_               ";
          cout &lt;&lt; " / \\" &lt;&lt; endl;
          cout &lt;&lt; "#############################################" &lt;&lt; endl;
  
  
  
  
  
  
      }
  
      if (D == 1) 
      {
          //human attacking
          //refreshScreen();
          cout &lt;&lt; "_____               \n";
          cout &lt;&lt; "|   |               ";
          cout &lt;&lt; " ___" &lt;&lt; endl;
          cout &lt;&lt; "O _ O/              ";
          cout &lt;&lt; "{o_o}" &lt;&lt; endl;
          cout &lt;&lt; "/|_|/               ";
          cout &lt;&lt; "/( )\\ " &lt;&lt; endl;
          cout &lt;&lt; "_| |_               ";
          cout &lt;&lt; " / \\" &lt;&lt; endl;
          cout &lt;&lt; "#############################################" &lt;&lt; endl;
  
  
  
  
  
      }
  
      if (D == 2)
      {
          //skeleton attacking
          //refreshScreen();
  
          cout &lt;&lt; "_____               \n";
          cout &lt;&lt; "|   |               ";
          cout &lt;&lt; "  ___" &lt;&lt; endl;
          cout &lt;&lt; "O _ O               ";
          cout &lt;&lt; "\\{o_o}" &lt;&lt; endl;
          cout &lt;&lt; "/|_|\\               ";
          cout &lt;&lt; " \\( )\\ " &lt;&lt; endl;
          cout &lt;&lt; "_| |_               ";
          cout &lt;&lt; "  / \\" &lt;&lt; endl;
          cout &lt;&lt; "#############################################" &lt;&lt; endl;
  
  
  
  
      }
  }
  
  
  
  void combat::renderHumanVSkeletonAttack(int D)
  {
      if (D == 0)
      {
          //human attacking
          Sleep(500);
          refreshScreen();
          renderHumanVSkeleton(1);
          Sleep(250);
          refreshScreen();
          renderHumanVSkeleton(0);
          Sleep(500);
          refreshScreen();
          renderHumanVSkeleton(1);
          Sleep(250);
          refreshScreen();
          renderHumanVSkeleton(0);
      }
  
      if (D == 1)
      {
          //skelleton attacking
          Sleep(500);
          refreshScreen();
          renderHumanVSkeleton(2);
          Sleep(250);
          refreshScreen();
          renderHumanVSkeleton(0);
          Sleep(500);
          refreshScreen();
          renderHumanVSkeleton(2);
          Sleep(250);
          refreshScreen();
          renderHumanVSkeleton(0);
      }
  }
  
  int combat::attacks(int attack)
  {
  
      if (attack == 1) {
          //25% chance for 15 DMG if hit 40% for hit
  
          if (fGen() &lt;= 0.25f)
          {
  
              if (fGen() &lt;= 0.25f)
              {
  
                  return  15 * 1.5;
              }
              else
                  return 15;
  
  
          }
          if (attack == 2) {
              //60% chance for 7 DMG if hit 40% for hit
              if (fGen() &lt;= 0.60f)
              {
                  if (fGen() &lt;= 0.25f)
                  {
                      return 7 * 2;
                  }
                  else
                      return 7;
  
              }
          }
  
          if (attack == 3) {
              //75% chance for 3 DMG if hit 40% for hit
              if (fGen() &lt;= 0.75f)
              {
  
                  if (fGen() &lt;= 0.40f)
                  {
                      return 3 * 2;
                  }
                  else
                      return 3;
  
              }
          }
  
          if (attack == 4) {
              //10% chance for 20 DMG if hit 25% for crit
              if (fGen() &lt;= 0.10f)
              {
                  if (fGen() &lt;= 0.25f)
                  {
                      return (int)20 * (int)1.5;
                  }
                  else
                      return 20;
  
              }
          }
  
  
      }
      return 0;
  }
  
  void combat::dealDMG(int dmg, int d)
  {
      if (d == 0)
      {
          eHealth - dmg;
      }
      else
      {
          hHealth - dmg;
      }
  }
  
  void combat::inGame()
  {
      float t = fGen();
      cout &lt;&lt; t;
      bool who;
      if (t &gt;= 0.5f)
      {
          cout &lt;&lt; "You start attacking first!" &lt;&lt; endl;
          who = true;
      }
      else
      {
          cout &lt;&lt; "The skeleton starts attacking first!" &lt;&lt; endl;
          who = false;
      }
  
      while (eHealth &gt; 0 || hHealth &gt; 0)
      {
          if (!who)
          {
              refreshScreen();
              cout &lt;&lt; "Player health: " &lt;&lt; hHealth &lt;&lt; ". Mob health: " &lt;&lt; eHealth &lt;&lt; endl;
              renderHumanVSkeleton(0);
              Sleep(1500);
              int decision;
              float randF = fGen();
  
              if (randF &lt;= 0.25f)
                  decision = 1;
              else if (randF &gt; 0.25f &amp;&amp; randF &lt; 0.50f)
                  decision = 2;
              else if (randF &gt; 0.50f &amp;&amp; randF &lt; 0.75f)
                  decision = 3;
              else
                  decision = 4;
  
  
  
              int dmg = attacks(decision);
  
  
  
              dealDMG(dmg, 1);
              refreshScreen();
              cout &lt;&lt; "Player health: " &lt;&lt; hHealth &lt;&lt; ". Mob health: " &lt;&lt; eHealth &lt;&lt; endl;
              renderHumanVSkeletonAttack(1);
              who = true;
          }
  
  
          if (who)
          {
              refreshScreen();
              cout &lt;&lt; "Player health: " &lt;&lt; hHealth &lt;&lt; ". Mob health: " &lt;&lt; eHealth &lt;&lt; endl;
              renderHumanVSkeleton(0);
              cout &lt;&lt; "It's your turn to attack!\n1) 25% chance to hit, DMG = 15. 40% chance of crit (22 DMG)\n2) 60% chance for 7 dmg. 40% chance for crit (14 DMG)\n3) 75 chance to hit, DMG = 3 dmg. 40% to crit (6 DMG)\n4)10% chance to hit, DMG = 20. 25% chance to crit (30 DMG)\n";
              int decision2;
              cin &gt;&gt; decision2;
              while (decision2 != 1 &amp;&amp; decision2 != 2 &amp;&amp; decision2 != 3 &amp;&amp; decision2 != 4) {
                  cin &gt;&gt; decision2;
              }
              int dmg = attacks(decision2);
  
              dealDMG(dmg, 0);
              refreshScreen();
              cout &lt;&lt; "Player health: " &lt;&lt; hHealth &lt;&lt; ". Mob health: " &lt;&lt; eHealth &lt;&lt; endl;
              renderHumanVSkeletonAttack(0);
              who = false;
  
  
          }
  
      }
      if (eHealth == 0) {
          refreshScreen();
          renderHuman(0);
          cout &lt;&lt; "You won!" &lt;&lt; endl;
          renderMenu(0);
      }
      else
      {
          refreshScreen();
          renderSkeleton(0);
          cout &lt;&lt; "You loose!" &lt;&lt; endl;
          renderMenu(0);
      }
  
  }
  </code></pre>