我是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与其他参与者之间的互动。

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

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

没有类,我只会在程序太长时分解程序,并且可以将其拆分为可识别的主题。主题或主程序应仅在不需要频繁更改的部分或隔离一个或多个部分以保护其他部分免受更改的情况下才保证重构。

10-04 14:15