C、 当我在2D数组的单个位置更改角色时,第二个位置也会更改其角色
我一天前才开始学习C语言,如果答案很明显,或者我的代码效率太低,我深表歉意 我正在创建一个战舰游戏,其中3艘战舰(一艘战舰、一艘驱逐舰和一艘航母)将被放置在一个棋盘上 战列舰将占据3个方格,驱逐舰2和航母5 电路板是一个二维字符数组C、 当我在2D数组的单个位置更改角色时,第二个位置也会更改其角色,c,arrays,character,C,Arrays,Character,我一天前才开始学习C语言,如果答案很明显,或者我的代码效率太低,我深表歉意 我正在创建一个战舰游戏,其中3艘战舰(一艘战舰、一艘驱逐舰和一艘航母)将被放置在一个棋盘上 战列舰将占据3个方格,驱逐舰2和航母5 电路板是一个二维字符数组 P1_board[9][9] 当玩家希望将一艘船放置在棋盘上时,阵列中的特定位置将更改为一个字符(“B”表示战列舰,“D”表示驱逐舰,“C”表示航母)。船舶通过一个名为: PlaceShip(char Letter, char Number, ch
P1_board[9][9]
当玩家希望将一艘船放置在棋盘上时,阵列中的特定位置将更改为一个字符(“B”表示战列舰,“D”表示驱逐舰,“C”表示航母)。船舶通过一个名为:
PlaceShip(char Letter, char Number, char Ship, char Direction)
其中字母将是从a到j的小写字符,数字将是从1到10的数字字符,对应的船舶将是“B”、“D”或“C”,方向将是“r”表示右侧或“D”表示向下
我遇到的问题是,当我试图把船放在左边或两边时,船舷另一边的位置也会改变
例如:
当我运行这些C命令时:
PlaceShip('a', '2', 'C', 'r');
PlaceShip('a', '7', 'B', 'd');
PlaceShip('c', '2', 'C', 'r');
PlaceShip('b', '7', 'B', 'd');
如果现在改为运行以下C命令:
PlaceShip('a', '2', 'C', 'r');
PlaceShip('a', '7', 'B', 'd');
PlaceShip('c', '2', 'C', 'r');
PlaceShip('b', '7', 'B', 'd');
我认为它可能是一些字符溢出到下一个数组位置,但我不确定如何修复,或者这是否是事实
我使用Visual Studio社区2015版的Visual C++编写和运行C代码。
下面是我的完整代码的简化版本,它仍然会产生问题:
#include <stdio.h>
#define Board_Size 2
Board[Board_Size][Board_Size];
void main() {
int i = 0, j = 0;
for (i = 0; i <= Board_Size; i++) {
for (j = 0; j <=Board_Size; j++) {
Board[i][j] = 'a';
printf("%c ", Board[i][j]);
}
printf("\n");
}
printf("\n");
Board[0][2] = 'b';
// [y][x]
printf("\n");
printf("%c %c %c\n", Board[0][0], Board[0][1], Board[0][2]);
printf("%c %c %c\n", Board[1][0], Board[1][1], Board[1][2]);
printf("%c %c %c\n", Board[2][0], Board[2][1], Board[2][2]);
}
#包括
#定义电路板尺寸2
线路板[线路板尺寸][线路板尺寸];
void main(){
int i=0,j=0;
对于(i=0;iLine#7(指链接的代码)。这是一个简单的错误,在使用基于0的数组的语言中,这是一个常见的错误,通常需要从大小中减去一来确定上界
您将“Board_Size”声明为10,但减去1得到9x9矩阵:
#定义电路板尺寸10
字符P1_板[board_Size-1][board_Size-1]
这将打印一个10x10矩阵:
printf(“1 |%c |%c |%c |%c |%c |%c |%c |%c | \n”、P1|board[0][0]、P1|board[0][1]、P1|board[0][2]、P1 u board[0][3]、P1 u board[0][4]、P1 u board[0][6]、P1 u board[0][7]、P1 u board[0][8][9])
C按行主顺序存储阵列(对于9x9矩阵元素,a(0,10)与a(1,0)位于同一内存位置),这解释了为什么在板上会看到多个船
另一方面,C将字符常量视为整数,因此可以编写(字母-‘a’)将字母转换为索引
维基百科很好地描述了如果你不熟悉这个术语,行主顺序的含义:这里的完整代码:int y=Number-49;/'1'=int(49)
?你确定要将'1'
转换成0
?这样当用户键入战舰坐标“a1”时“1”将从字符“1”转换为整数0,以便它可以用于寻址数组的第一行。代码应进行检查,以确保位置在棋盘的边界内。一个简单的简化方法是实际定义比播放区域稍大的棋盘。例如,9x9播放区域为12x12。我希望您不要这样做在使用数组时,要了解内存的实际布局。如果不是,那么在试图理解问题根源时,这可能是一个很好的起点。我想我现在明白了,如果我想定义一个10x10数组,我会这样做:charboard[10][10];
但是如果我想访问第10列的第10个条目,我会这样做:Board[9][9]='a';
是否正确?这完全正确。索引从零开始,最大索引为(大小-1),但大小始终是声明中的大小。