gpt4 book ai didi

c - 战舰游戏的随机数生成

转载 作者:行者123 更新时间:2023-11-30 16:38:40 25 4
gpt4 key购买 nike

我需要为我的作业创建一个战舰游戏,但我不知道如何初始化一个数组来定位一艘字符长度为 5 的船,以及如何将它们随机放置在 20 行的棋盘中 x 60 列。非常感谢每一种善意的帮助,谢谢。这是原始数组

void startShips(int ships[][60]) {
srand(time(NULL));
int ship, last;

for (ship = 0; ship < 3; ship++) {
ships[ship][0] = rand() % 5;
ships[ship][1] = rand() % 5;

//let's check if this shot was not tried
//if it was, just get out of the 'do while' loop when draws a pair that was not tried
for (last = 0; last < ship; last++) {
if ((ships[ship][0] == ships[last][0]) && (ships[ship][1] == ships[last][1]))
do {
ships[ship][0] = rand() % 5;
ships[ship][1] = rand() % 5;
} while ((ships[ship][0] == ships[last][0]) && (ships[ship][1] == ships[last][1]));
}

}
}

最佳答案

首先,您决定船舶是水平显示还是垂直显示,以及在不离开棋盘的情况下它在棋盘上可以占据的最大位置,H 和 V

#define ROWS 20
#define COLS 60

#define SIZE 5

int horiz = rand() % 2; // 1 is horizontal, 0 vertical
int rowmax = horiz ? ROWS - 1 : ROWS - SIZE;
int colmax = horiz ? COLS - SIZE : COLS - 1;

  • rowmax 是船舶可能开始显示的棋盘上的最后一行
  • colmax 是船舶可能开始显示的板上的最后一列

然后你随机决定位置

int rowstart = rand() % ( rowmax + 1 );
int colstart = rand() % ( colmax + 1 );

你填满了董事会

int i;
for(i=0 ; i<SIZE ; i++) {
ships[rowstart + (horiz ? 0 : i)][colstart + (horiz ? i : 0)] = SHIPCHARACTER;
}

解释:数组 ships[ROWS][COLS] ;如果船舶是水平的,则船舶从 rowstart 开始并保持在同一行,而列从 colstart 开始,下一个单元格是 ships[rowstart ][colstart+1],然后 ships[rowstart][colstart+2] 直到 ships[rowstart][colstart+4]。 (如果是垂直的则相反)

关于c - 战舰游戏的随机数生成,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47410534/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com