我正在尝试编写一个在Quarto游戏中检查胜利者的函数。游戏有点像连接四或者tic tac toe。游戏由16个独特的部分组成,每个部分都有四个特征。白色“W”,黑色“B”,长“L”,短“S”,方形“R”,圆形“C”,空心“H”,填充“F”例如,白色长圆形空心件= =“WLCH”。一个玩家选择一块,另一个玩家选择16x16板。如果四个特征垂直,水平或对角排列,则最后一个放置一个棋子的玩家获胜。
起初我考虑过使用switch语句,但显然你不能使用传入字符串,只能使用整数,字符或枚举。
所以我试着给我们多个IF语句,从第一行水平排列的四个白色片段开始。我认为这很容易......但是这个功能每次都会决定胜利者。
这是我到目前为止所做的:
bool checkWinner(string board[ROWS][COLS])
{
if( (board[0][0]== ("WSHR")||("WTHR")||("WTFR")||("WSHC")||("WTFC")||("WSFR")||("WTHC")||("WTFC"))
&&(board[0][1]== ("WSHR")||("WTHR")||("WTFR")||("WSHC")||("WTFC")||("WSFR")||("WTHC")||("WTFC"))
&&(board[0][2]== ("WSHR")||("WTHR")||("WTFR")||("WSHC")||("WTFC")||("WSFR")||("WTHC")||("WTFC"))
&&(board[0][3]== ("WSHR")||("WTHR")||("WTFR")||("WSHC")||("WTFC")||("WSFR")||("WTHC")||("WTFC")))
{
cout << "\nWinner!!!!!\n";
return true;
}
return false;
}
在函数第一次不起作用后,我在每个字符串周围添加了括号。
我知道它必须是简单的但我看不到它,我会很感激这个问题的任何帮助。
答案 0 :(得分:2)
您尝试使用if语句的方式可能有误。你正在做一个字符串的OR,而不是条件本身。试试这个。
bool checkWinner(string board[ROWS][COLS])
{
if( (board[0][0]== ("WSHR")||board[0][0]==("WTHR")||board[0][0]==("WTFR")||board[0][0]==("WSHC")||board[0][0]==("WTFC")||board[0][0]==("WSFR")||board[0][0]==("WTHC")||board[0][0]==("WTFC"))
&&(board[0][1]== ("WSHR")||board[0][1]==("WTHR")||board[0][1]==("WTFR")||board[0][1]==("WSHC")||board[0][1]==("WTFC")||board[0][1]==("WSFR")||board[0][1]==("WTHC")||board[0][1]==("WTFC"))
&&(board[0][2]== ("WSHR")||board[0][2]==("WTHR")||board[0][2]==("WTFR")||board[0][2]==("WSHC")||board[0][2]==("WTFC")||board[0][2]==("WSFR")||board[0][2]==("WTHC")||board[0][2]==("WTFC"))
&&(board[0][3]== ("WSHR")||board[0][3]==("WTHR")||board[0][3]==("WTFR")||board[0][3]==("WSHC")||board[0][3]==("WTFC")||board[0][3]==("WSFR")||board[0][3]==("WTHC")||board[0][3]==("WTFC")))
{
cout << "\nWinner!!!!!\n";
return true;
}
return false;
}
答案 1 :(得分:0)
你的问题很简单,mayankTUM已经回答了问题,但是你可以用STL的力量做到这一点。
我写了一个样本给你看:
#include <iostream>
#include <list>
#include <algorithm>
#include <string>
#define ROWS 1
#define COLS 4
using namespace std;
bool checkWinner(string board[ROWS][COLS])
{
list<string> l;
l.push_back("WSHR");
l.push_back("WTHR");
l.push_back("WTFR");
l.push_back("WSHC");
l.push_back("WTFC");
l.push_back("WSFR");
l.push_back("WTHC");
l.push_back("WTFC");
bool hasWon = true;
for(int col = 0; col < COLS && hasWon; ++col)
for(int row = 0; row < ROWS && hasWon; ++row)
{
hasWon &= find(l.begin(), l.end(), board[row][col]) != l.end();
}
if(hasWon)
{
cout << "Winner!!!!!" << endl;
return true;
}
return false;
}
int main()
{
string board[ROWS][COLS] = {"WSHR", "WTHR", "WTFR", "WSHC"};
string board2[ROWS][COLS] = {"WSHR", "WTHR", "WZFR", "WSHC"};
cout << "board has to be true : " << boolalpha << checkWinner(board) << endl;
cout << "board2 has to be false : " << boolalpha << checkWinner(board2) << endl;
return 0;
}
结果是:
得奖!!!!!
董事会必须是真实的:真实的
board2必须为false:false
代码非常明显,所以我认为我不需要解释它,但如果你需要更多精确的话,可以随意评论。