c++ - 在我的代码中输入类并更改为 .h 文件 C++

标签 c++ class

我是 C++ 的新手,我想知道如何捕捉我的代码并更改它以便拥有一个类和一个 .h 文件。

我的代码工作正常,但我真的需要将它分开,我不知道将什么放入 .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);
}

最佳答案

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

板类
该类对棋盘进行管理,包括移动棋子、初始化和显示。

玩家类
这将代表玩家以及棋盘、I/O 和其他玩家之间的交互。

游戏引擎类
此类提供玩家、棋盘和其他资源(例如屏幕或窗口)之间的“粘合剂”。

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

如果没有类(class),我只会分解太长的程序,并且可以将其拆分为可识别的主题。主题或主程序只有在不需要经常更改或隔离一个或多个部分以保护其他部分免受更改时才应保证重构。

关于c++ - 在我的代码中输入类并更改为 .h 文件 C++,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19986592/

相关文章:

javascript - 如何将一个类实例插入另一个类的私有(private)数组中?

java - 需要一种方法来读取两个文件并使用扫描器类输出差异

c++ - 编写预处理器函数 : Is the syntax correct

c++ - Windows 键盘记录。各种应用程序中 WM_CHAR 消息的特征

c++ - 使用 fork() 与 exec() 创建新进程

c++ - 返回类(class)成员是一种不好的做法吗?

Java:从外部 .jar 获取类

c++ - std::list 可以包含不同的 std::unique_ptr<T> 吗?

c++ - OpenCV 2.4.9 全屏

php - 在 PHP 中,您可以将一个类扩展为相同的名称吗?