0

ゲームChompを作成しようとしています。私は途中ですが、かなり立ち往生しています。

ゲームには5つの異なる機能があります。ポインターと構造体は使用できません。

a) initialize()マトリックス内のすべての位置を「O」に初期化します。パラメータも戻り値もありません。

b) print_board()マトリックスを印刷します。パラメータも戻り値もありません。

c) get_move()プレーヤー (行と列) から移動をスキャンし、配列でそれを「返します」。パラメータ: 誰のターンであるか (プレーヤー 1 またはプレーヤー 2) に関する情報、および移動座標が格納される 2 つの要素を含む配列。戻り値なし。

d) check_move()移動が有効かどうかを制御します (マトリックスの外ではなく、既に食べられた位置でもない)。パラメータ: チェックされる移動 (行と列)。戻り値: コントロールの結果。<------ ???????

e) update_board()マトリックスを更新します。パラメータ: 新しい移動 (行と列)。戻り値なし。

これは私がどこまで来たかであり、check_move()関数で立ち往生しています。その関数から何を返すのかわかりません。

#include <stdio.h>

int height    =  4;
int width     = 10;
char matrix[4][10];


void initialize()
{
    for(int row = 0; row < height; row++)
        for(int col = 0; col < width; col++)
            matrix[row][col] = 'O';         
}



void print_board()
{
    for(int row = 0; row < height; row++)
    {
        for(int col = 0; col < width; col++)
        {
            printf("%c", matrix[row][col]);
        }
        printf("\n");
    }   
    printf("\n");
}



void get_move(int player, int input[])
{
    printf("Player %d, make your move: ", player);
    scanf("%d %d", &input[0], &input[1]);
}



int check_move(int position[])
{
    int row = position[0];
    int col = position[1];

    if(row <= height  &&  col <= width)
    {
        for(row; row <= height; row++)
        {
            for(col; col <= width; col++)
            {
                if(matrix[row][col] == ' ');
                printf("Invalid move! \n");
            }
        }       
    }
}



void update_board(int x, int y)
{
    for(int xi = x; xi <= 10; ++xi)
    {
        for(int yi = y; yi <= 10; ++yi)
            matrix[xi-1][yi-1] = ' ';
    }


}



int main(void)
{

    int player = 1;
    int position[2]; 

    initialize();
    print_board();

    get_move(player, position);

    check_move(position);

    update_board(position[0], position[1]);

    print_board();



    getchar();
    getchar();
    getchar();


    return 0;
}
4

1 に答える 1

0

そのようにプロトタイプ化されているため、check_move から値を返す必要があります。どこかで終了ステータスを使用したいと思いますか? :

int check_move(int position[])  

;の最後に不要なものがありますif

int check_move(int position[])
{

    int row = position[0];
    int col = position[1];
    int status = 1;

    if(row <= height  &&  col <= width)
    {
        for(row; row <= height; row++) 
        {
            for(col; col <= width; col++)
            {
                if(matrix[row][col] == ' ')  //removed ";" from end of line, otherwise, 
                {                             //printf will always be called
                    printf("Invalid move! \n");
                    return 0;
                }//also added brackets to force return if error (only need one error to return)
            }
        } 
    }
    return status; //added return status 
}

したがって、主に、次のようにしを呼び出しますcheck_move()

int main(void)
{

    int player = 1;
    int position[2]; 

    initialize();
    print_board();

    get_move(player, position);

    while(check_move(position) != 1)
    {
        printf("Try again!\n\n");
        print_board();
        get_move(player, position);
    }


    update_board(position[0], position[1]);

    print_board();

    getchar();
    getchar();
    getchar();

    return 0;
}
于 2013-11-04T21:11:29.940 に答える