我在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。请帮我理解这个。
我不太了解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初始化电路板。
我需要初始化电路板以获得所有*,这就是为什么我宣称它是
char
类型。我可以使用for循环来使电路板由*组成。
使您的功能通用,以便它们可以为您和对手板工作。避免全局变形。
下面给出的函数initializeBoard
可以将board
的structure Board
初始化为任何char
值。如果你改变主意并且决定用任何其他值替换'*'
,那么所有需要的就是改变参数。
void initializeBoard(struct Board* board, char c);
board [i] [j]不起作用,因为没有分配内存。
只要你创建struct Board
结构(无论是在堆栈上还是在堆上动态),board[ROWS][COLUMNS]
将拥有内存来保存其数据。通过创建struct Board
结构,结构的所有元素都将获得所需的内存。
我稍后会将失误和命中改为O和X
您将需要一个set函数来更改特定电路板单元的内容。
这可以通过以下方式完成:
void setCell(struct Board* board, int row, int column, char c);
所有你需要的是提供qazxsw poi,qazxsw poi,qazxsw poi坐标和值board
放置在板上适当的位置。
您很可能需要一个函数来检查在给定坐标下您有什么。这可以通过以下方式完成:
row
看看提出的简单程序。
祝你的节目顺利。通往完美程序王国的道路是漫长的,但总是从第一步开始。
column
输出:
c