簡體   English   中英

使用struct創建游戲板

[英]Creating a game board using struct

因此,我正在為戰艦制作游戲板,但我正在嘗試使用一種結構來制作。 目前,在嘗試創建游戲板時出現錯誤。 我正在嘗試以這種方式進行操作,以便當用戶輸入船的坐標或他們進行移動時,我可以輕松地更改符號並獲得數組上的正確坐標。 這就是我現在正在使用的內容。 我使用的是3文件格式,因此我將所有內容都放在下面。

我可以在不使用結構的情況下創建板,但是我很確定我需要以這種方式創建板,以便以后可以操作板。

如果這有幫助,這是我當前的錯誤:運行時檢查失敗#3-使用變量'person'時未進行初始化。

這在頭文件中

typedef struct game_board
{
    int board[10][10];
    int row;
    int col;
    char symbol;
    }Game_Board;

Game_Board initalize_game_board(Game_Board player);

功能

Game_Board initalize_game_board(Game_Board player)
{
    int row_index = 0, col_index = 0;

    printf("  0 1 2 3 4 5 6 7 8 9\n");
    for (row_index = 0; row_index < player.row; row_index++)
    {
        printf("%d ", row_index);
        for (col_index = 0; col_index < player.col; col_index++)
        {
            player.board[row_index][col_index] = player.symbol;
            printf("%c ", player.board[row_index][col_index]);
        }
        printf("\n");
    }
}

在主要功能上

int main(void)
{
    FILE *outfile = NULL;
    outfile = fopen("battleship.log", "w");

    Game_Board person, computer;
    int who_goes_first = 0;

    strcpy(person.symbol, '~');
    person.row = 10;
    person.col = 10;
    strcpy(computer.symbol, '~');
    computer.row = 10;
    computer.col = 10;

    welcome_screen(outfile);
    printf("Player 1\n");


   initalize_game_board(person);

這兩個函數都需要return語句。 main()的結尾括號。

強烈推薦

computer.symbol = '~';

代替

strcpy(computer.symbol, '~');

基於Ryan的答案,strcpy()假定源字符串具有空終止符,以知道要復制多少個字符。 在您的情況下,源字符串中沒有空終止符。 從內存中讀取空字符之前,strcpy()不會停止復制。 由於您使用的是單個字符,因此只需執行簡單的賦值語句即可!

另外,在函數initalize_game_board()中,考慮將指針傳遞給Game_Board結構,而不是傳遞結構本身。 執行此操作時,可以通過使用函數本身內的箭頭(->)運算符來更改實際結構的內容(在這種情況下為結構'person')。 然后,您將不必從該函數返回結構。 使用當前的設計,您正在創建該結構的臨時副本,然后填充它,然后(可能在修改后!)返回該結構,該結構將再次復制到結構“ person”。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM