我在c编程和作业作业我正在创建一个战舰游戏。我已经为电路板(对手板和我的电路板)创建了一个结构,但我需要一个2D数组用于电路板。这就是我到目前为止所拥有的
struct Board
{
char board[10][10];
int carrierHits;
int battleshipHits;
int destroyerHits;
int subHits;
int patrolHits;
};
int initializedBoard() //changed from"myBoard" to "initializedBoard"
{
struct Board myBoard;
}
我需要初始化电路板以获得所有*,这就是我将其声明为char类型的原因。我在想,也许我可以使用for循环来使电路板由*组成,但我不知道如何去做,因为电路板[i] [j]不起作用,因为没有分配内存。我真的很困惑如何完成这项任务。我稍后会将失误和命中改为O和X。请帮我理解这一点。
答案 0 :(得分:1)
我不太了解C,但这似乎有效:
#include <stdio.h>
#include <string.h>
#define ROWS 10
#define COLUMNS 10
struct Board
{
char board[ROWS][COLUMNS];
int carrierHits;
int battleshipHits;
int destroyerHits;
int subHits;
int patrolHits;
};
struct Board myboard;
void initializeBoard(struct Board* board)
{
memset(board->board, '*', ROWS * COLUMNS);
}
void fireAt(int row, int column)
{
myboard.board[row][column] = '0';
}
int main()
{
initializeBoard(&myboard);
fireAt(4, 5);
fireAt(4, 6);
fireAt(4, 7);
// SHOW THE BOARD
for (int i = 0; i < 10; ++i)
{
for (int j = 0; j < 10; ++j)
printf(" %c", myboard.board[i][j]);
printf("\n");
}
return 0;
}
我不知道你的意思
“board [i] [j]不起作用,因为没有分配内存。”
当您使用struct Board myboard创建Board实例时,myboard已为Board结构分配了内存,包括10 x 10个字符。你只需要分配内存,而不是你有一个指针的数组,但是为数组分配了内存。
您也可以使用循环而不是memset初始化电路板。
答案 1 :(得分:1)
我需要初始化电路板以获得所有*,这就是我拥有的原因 声明它是
char
类型。我可以使用for循环来制作电路板 由*组成。
让你的功能变得通用,这样它们就可以为你的和对手板工作。避免使用全局变量。
以下功能initializeBoard
可以将board
的{{1}}初始化为任意structure Board
值。如果你改变了主意,你决定
将char
替换为任何其他值,只需更改参数即可。
'*'
board [i] [j]不起作用,因为没有分配内存。
只要您创建void initializeBoard(struct Board* board, char c);
结构(无论是在堆栈上还是在堆上动态),struct Board
将拥有内存来保存其数据。通过创建board[ROWS][COLUMNS]
结构,结构的所有元素都将获得所需的内存。
我稍后会将失误和命中更改为O和X的
您将需要一个set函数来更改粒子板单元格的内容。
这可以通过以下方式完成:
struct Board
您只需提供void setCell(struct Board* board, int row, int column, char c);
,board
,row
坐标和值column
即可放置在主板上的适当位置。
您很可能需要一个函数来检查在给定坐标下您有什么。这可以通过以下方式完成:
c
看看提出的简单程序。
祝你的节目顺利。通往完美程序王国的道路是漫长的,但总是从最初的步骤开始。
char getCell(struct Board* board, int row, int column);
输出:
#include <stdio.h>
#include <string.h>
#define ROWS 10
#define COLUMNS 10
struct Board
{
char board[ROWS][COLUMNS];
int carrierHits;
int battleshipHits;
int destroyerHits;
int subHits;
int patrolHits;
};
void initializeBoard(struct Board* board, char c)
{
for (int i = 0; i < ROWS; i++)
for (int j = 0; j < COLUMNS; j++)
board->board[i][j] = c;
}
void showBoard(struct Board* board)
{
for (int i = 0; i < ROWS; i++)
{
for (int j = 0; j < COLUMNS; j++)
{
printf(" %c", board->board[i][j]);
}
printf("\n");
}
printf("\n");
}
void setCell(struct Board* board, int row, int column, char c)
{
board->board[row][column] = c;
}
char getCell(struct Board* board, int row, int column)
{
return (board->board[row][column]);
}
int main(void)
{
struct Board my_board;
struct Board opponent_board;
initializeBoard(&my_board, '*');
initializeBoard(&opponent_board, '*');
if(getCell(&my_board,1,5) == '*')
setCell(&my_board, 1, 5, ' ' );
setCell(&my_board, 2, 6, 'X' );
setCell(&my_board, 3, 7, 'O' );
setCell(&my_board, 3, 8, 'O' );
setCell(&opponent_board, 1, 2, 'O' );
setCell(&opponent_board, 1, 3, 'O' );
showBoard(&my_board);
showBoard(&opponent_board);
return 0;
}