简单的IF语句无法正常工作

时间:2015-03-08 01:52:36

标签: c++

我正在尝试编写一个在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;

}

在函数第一次不起作用后,我在每个字符串周围添加了括号。

我知道它必须是简单的但我看不到它,我会很感激这个问题的任何帮助。

2 个答案:

答案 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

代码非常明显,所以我认为我不需要解释它,但如果你需要更多精确的话,可以随意评论。