2013-11-14 23 views
0

我有点新手在c + +中,我想知道如何捕捉我的代码,并更改它,以便有一个类和.h文件。输入类到我的代码并更改为一个.h文件C++

我的代码工作正常,但我真的需要分开它,我不知道要在.h文件中放什么以及在.cpp文件中留下什么。

这里是我的代码:

#include <iostream> 
using namespace std; 

int main() { 
    // variáveis da tabela 
    char cSquare1('Q'); 
    char cSquare2('W'); 
    char cSquare3('E'); 
    char cSquare4('A'); 
    char cSquare5('S'); 
    char cSquare6('D'); 
    char cSquare7('Z'); 
    char cSquare8('X'); 
    char cSquare9('C'); 
    int iPlayerTurn(1); 
    bool bGameOver(true); 
    int placar1(0); 
    int placar2(0); 


    // Titulo 
    cout << "JOGO DO GALO" << endl; 
    // Jogo 

    do { 

     // Imprime tabela 
     cout << cSquare1 << "|" << cSquare2 << "|" << cSquare3 << endl; 
     cout << "-----"<< endl; 
     cout << cSquare4 << "|" << cSquare5 << "|" << cSquare6 << endl; 
     cout << "-----"<< endl; 
     cout << cSquare7 << "|" << cSquare8 << "|" << cSquare9 << endl; 

     // O jogador 1 usa x; O jogador 2 usa 0; 
     char cPlayerMark; 
     if (iPlayerTurn == 1) { 
      cPlayerMark = 'x'; //Este x deve ser minúsculo pois se for maísculo entra em conflito com o valor da tabela 
     } else { 
      cPlayerMark = '0'; 
     } 

     // Jogada nova 
     cout << "Vez do jogador " << iPlayerTurn << endl; 
     bool bValidMove; 
     // Loop até ter uma jogada válida 
     do { 
      char cNextMove; 
      cin >> cNextMove; 
      bValidMove = true; 

      // Verifica se é uma jogada válida 
      if (cNextMove == 'Q' && cSquare1 == 'Q') { 
       cSquare1 = cPlayerMark; 
      } else if (cNextMove == 'W' && cSquare2 == 'W') { 
       cSquare2 = cPlayerMark; 
      } else if (cNextMove == 'E' && cSquare3 == 'E') { 
       cSquare3 = cPlayerMark; 
      } else if (cNextMove == 'A' && cSquare4 == 'A') { 
       cSquare4 = cPlayerMark; 
      } else if (cNextMove == 'S' && cSquare5 == 'S') { 
       cSquare5 = cPlayerMark; 
      } else if (cNextMove == 'D' && cSquare6 == 'D') { 
       cSquare6 = cPlayerMark; 
      } else if (cNextMove == 'Z' && cSquare7 == 'Z') { 
       cSquare7 = cPlayerMark; 
      } else if (cNextMove == 'X' && cSquare8 == 'X') { 
       cSquare8 = cPlayerMark; 
      } else if (cNextMove == 'C' && cSquare9 == 'C') { 
       cSquare9 = cPlayerMark; 
      } else { 
       cout << "Jogada Inválida. Tentar de novo." << endl; 
       bValidMove = false; 
      } 
     } while (!bValidMove); 

     bGameOver  = false; 
     bool bWinGame = true; 

     // Verifica se o jogo chegou ao fim 
     if (cSquare1 != 'Q') { 
      if (cSquare2 == cSquare1 && cSquare3 == cSquare1) { 
       bGameOver = true; 
      } 
      if (cSquare4 == cSquare1 && cSquare7 == cSquare1) { 
       bGameOver = true; 
      } 
     } 
     if (cSquare5 != 'S') { 
      if (cSquare1 == cSquare5 && cSquare9 == cSquare5) { 
       bGameOver = true; 
      } 
      if (cSquare2 == cSquare5 && cSquare8 == cSquare5) { 
       bGameOver = true; 
      } 
      if (cSquare4 == cSquare5 && cSquare6 == cSquare5) { 
       bGameOver = true; 
      } 
      if (cSquare3 == cSquare5 && cSquare7 == cSquare5) { 
       bGameOver = true; 
      } 
     } 
     if (cSquare9 != 'C') { 
      if (cSquare3 == cSquare9 && cSquare6 == cSquare9) { 
       bGameOver = true; 
      } 
      if (cSquare7 == cSquare9 && cSquare8 == cSquare9) { 
       bGameOver = true; 
      } 
     } 
     // Verifica se foi um empate 
     if (cSquare1 != 'Q' && cSquare2 != 'W' && cSquare3 != 'E' && 
      cSquare4 != 'A' && cSquare5 != 'S' && cSquare6 != 'D' && 
      cSquare7 != 'Z' && cSquare8 != 'X' && cSquare9 != 'C' && !bGameOver) 
     { 
      bGameOver = true; 
      bWinGame = false; 
     } 

     if (bGameOver) { 

      // Imprime tabela final 
      cout << cSquare1 << "|" << cSquare2 << "|" << cSquare3 << endl; 
      cout << "-+-+-"<< endl; 
      cout << cSquare4 << "|" << cSquare5 << "|" << cSquare6 << endl; 
      cout << "-+-+-"<< endl; 
      cout << cSquare7 << "|" << cSquare8 << "|" << cSquare9 << endl; 

      if (bWinGame) { 
       cout << "O jogador " << iPlayerTurn << " venceu!" << endl; 
       // Incrementa as vitórias no placar 
       if(iPlayerTurn == 1){ 
        placar1++; 

       } else if(iPlayerTurn == 2){ 
        placar2++; 
       } 
      } 

      else { 
       cout << "Houve um empate!" << endl; 
      } 

      cout << "Fim do jogo!" << endl; 
      cout << "Jogar de novo? (S/N)?" << endl; 
      char cPlayAgain; 
      cin >> cPlayAgain; 

      if (cPlayAgain == 'S') { 
       bGameOver = false; 
       // Limpa a tabela - volta aos valores iniciais 
       cSquare1 = 'Q'; 
       cSquare2 = 'W'; 
       cSquare3 = 'E'; 
       cSquare4 = 'A'; 
       cSquare5 = 'S'; 
       cSquare6 = 'D'; 
       cSquare7 = 'Z'; 
       cSquare8 = 'X'; 
       cSquare9 = 'C'; 
      } 
      else if (cPlayAgain == 'N') { 
       bGameOver = true; 
       // Mostra o sumário dos resultados 
       cout << "Sumário dos resultados:" << endl; 
       cout << "Jogador 1: " << placar1 << endl; 
       cout << "Jogador 2: " << placar2 << endl; 
      } 

      iPlayerTurn = 1; 
     } else { 
      // Vez dos jogadores 
      if (iPlayerTurn == 1) { 
       iPlayerTurn = 2; 
      } else { 
       iPlayerTurn = 1; 
      } 
     } 
    } while (!bGameOver); 
} 
+0

由于您的代码中没有任何结构或过程,因此没有任何内容放在* .h中。 – user1810087

+1

“catch”代码?但是,真的,如果这是整个代码,就没有什么可以分开的(所有的代码都在'main'中)。分离代码会带来什么好处,是让小功能和/或类来完成这项工作,而'main'只是使用这些。 *然后*有必要担心放入多个文件。 – crashmstr

+1

首先...将其分解为方法(函数)。找到似乎是逻辑单位(或更好的可重用单位)的东西,并将其放在main()之外。一旦你完成了,你可以开始考虑将某些东西移动到可能对另一个模块有用的标题中。 PS - 游戏循环可能非常难以区分。 – 2013-11-14 19:38:18

回答

1

在C++中,如果你有一个类,保留类的定义(私有成员,也许构造函数(S)和析构函数)和方法在头文件中的原型,并将方法的定义放在一个单独的.cpp文件中。 (不要忘了将标题包含在.cpp文件中。)

但是,您没有课程,实际上,您只有main() ... 也许您可以尝试将功能做到“现在重做main() - 例如,检查是否进行了有效移动或游戏是否结束(原型为.h,.cpp中的定义),并在需要时调用它们。

如果你不想让你的代码更多面向对象并编写类和方法,我并不认为模块化是很有意义的;如果你做的 - 上面的回答解释了你会怎么做,真的很好:)

1

如果你真的需要打破你的程序成类,这里有一些建议:

Board类
这课程管理板,包括移动件,初始化和显示。

Player类
这将是一个播放器和电路板,I/O以及和其他玩家之间的交互。

游戏引擎类
该类提供玩家,电路板和其他资源(例如屏幕或窗口)之间的“胶”。

您的程序足够小,您可以轻松地尝试将功能提取到类(对象)中。

没有课程,我只会分解一个课程,如果它太长,它可以分解成可识别的主题。主题或主程序只有在不需要经常改变或者隔离一个或多个部分以保护其他部分免于改变时才应该重构。

相关问题