1

コネクト4を作成し、ドロップ機能を実装しようとして、特定の列の一番下の行に追加します。これがボードの初期化です

Board::Board()
{
    for(int i=0;i<8;i++)
        for(int j=0;j<8;j++)
            place[i][j] = EMP;  // EMP is a const char = '-'

    cout << "Initalized.\n";
}

何らかの理由で、このコードはi = 1まで実行され、place [1] [col]を*に設定しますが、これを表示すると、配列の下部に*が表示されるため、place [7] [ col]。

また、これ->最初のcoutの場所と場所は、本来あるべき「-」の出力を私に決して与えません。

int Board::add(int player, int col)
{
    char piece;
    col--;  // Dealing with array starting at 0, not 1
    (player==1) ? piece = P1: piece = P2;   // Character defining players piece
    int i;

    for (i = 7; i >= 0; i--)
    {

        cout << "this - " << this->place[i][col] << endl;
        cout << "place - " << place[i][col] << endl;
        if(place[i][col] == EMP)
        {
            cout << "Empty looks like " << place[i][col] << "\ti: " << i << endl;
            place[i][col] = piece;
            system("pause");
            return i;
        }else
        {
            cout << "not EMP - " << place[i][col] << endl;
            system("pause");
        }
    }

    return 0;
}
4

2 に答える 2

2

char を int 関数に渡すと、数値が char 変数に変換されます (ガベージが発生します)。関数を少し書き直したところ、すべて正常に動作するようです。

int Board::add(int player, char col)
{
    char piece;
    int Num;
    Num = atoi(&col);
    cout << Num << endl << endl;
    Num--;  // Dealing with array starting at 0, not 1
    (player==1) ? piece = P1: piece = P2;   // Character defining players piece
    int i;

    for (i = 7; i >= 0; i--)
    {

        cout << "this - " << this->place[i][Num] << endl;
        cout << "place - " << place[i][Num] << endl;
        if(place[i][Num] == EMP)
        {
            cout << "Empty looks like " << place[i][Num] << "\ti: " << i << endl;
            place[i][Num] = piece;
            return i;
        }else
        {
            cout << "not EMP - " << place[i][Num] << endl;
        }
        system("pause");
    }

    return 0;
}

お役に立てれば。

于 2012-10-25T20:49:51.033 に答える
0

いくつかの考え:

しないでください、メモリを取得するためにdelete place使用したことはありません。 次のように条件演算子を使用する方がより慣用的です。new
piece = (player==1) ? P1: P2;

部分を初期化、追加、および表示するコードは、ここでほとんど機能します: http://codepad.org/QIWHagMk

あなたが求めていることをより具体的にするか、あなたが見ている問題を示すはるかに小さなコード スニペットを示すことができますか?

于 2012-10-25T19:42:15.330 に答える