将类输入到我的代码中,并更改为 .h 文件C++
Input class to my code and change to a .h file C++
我是 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 和其他玩家之间的交互。
游戏引擎类
此类在玩家、棋盘和其他资源(如屏幕或窗口)之间提供"粘合"。
您的程序足够小,您可以尝试轻松地将功能提取到类(对象)中。
如果没有类,我只会在程序太长并且可以拆分为可识别的主题时分解程序。 只有当主题或主程序不需要经常更改或隔离一个或部分可以保护其他部分不被更改时,主题或主程序才应该保证重构。
在C++中,如果你有一个类,请将类的定义(私有成员,可能是构造函数和析构函数)和方法的原型保留在头文件中,并将方法的定义放在单独的.cpp文件中。(不要忘记在.cpp文件中包含标头。
但是你没有课,实际上,你只有main()
......也许你可以尝试制作函数来做你现在在main()
中做的事情 - 例如,检查是否进行了有效的移动或游戏是否结束(.h中的原型,.cpp中的定义),并在需要时调用它们。
不想让你的代码更加面向对象并编写类和方法,我真的认为模块化没有多大意义;如果你这样做 - 上面的答案解释了你将如何做到这一点:)
相关文章:
- .cpp和.h文件中的模板专用化声明
- 为什么两个不同的未命名名称空间可以共存于一个cpp文件中
- 文本文件中的单词链表
- CMake-按正确顺序将项目与C运行时对象文件链接
- 使用新行和不使用新行读取文件
- 在C++程序中输入的文本文件将不起作用,除非文本被复制和粘贴
- 挂起和取消挂起一个文件DLL
- 如何确定我已使用非编码文件到达 EOF?
- 命名空间中具有.h和.cpp文件的类
- 如何使用ndk-build.cmd构建Android.so文件
- 从包含m行的文件中提取n行,必要时(惰性地)重复该文件
- 读取文件并输入到矢量中
- 在C++中查找文件
- c++库的公共头文件中应该包含什么
- 用c++从输入文件中读取另一行
- Cppcheck生成xml转储文件
- 读取文件的最后一行并输入到链接列表时出错
- 无法编译 rtmidi 测试 cmidiin.cpp 文件, 非法指令
- 如何将内容数组写入文本文件?
- C++ Windows 驱动程序MSB3030无法复制该文件,因为它找不到