♥ 该回答参考ChatGPT,由吾为汝整理提供,如若有用,还请题主采纳!♥
为了实现您所描述的功能,我们可以编写一个C语言程序,其中包含一个函数 travel,该函数将根据给定的随机种子在一个10x10的二维数组地图上进行随机移动。以下是完整的代码示例:
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define MAP_SIZE 10
void printMap(char map[MAP_SIZE][MAP_SIZE]) {
for (int i = 0; i < MAP_SIZE; i++) {
for (int j = 0; j < MAP_SIZE; j++) {
printf("%c ", map[i][j]);
}
printf("\n");
}
}
void travel(char map[MAP_SIZE][MAP_SIZE], int rand_seed) {
// 设置随机种子
srand(rand_seed);
// 初始化地图
for (int i = 0; i < MAP_SIZE; i++) {
for (int j = 0; j < MAP_SIZE; j++) {
map[i][j] = '.'; // 所有元素初始化为'.'
}
}
// 随机选择起始位置
int startX = rand() % MAP_SIZE;
int startY = rand() % MAP_SIZE;
map[startX][startY] = 'A'; // 标记起始位置为'A'
// 定义移动方向:上、下、左、右
int directions[4][2] = { {-1, 0}, {1, 0}, {0, -1}, {0, 1} }; // (dx, dy)
char currentMark = 'B'; // 从'B'开始标记
int x = startX;
int y = startY;
while (currentMark <= 'Z') {
// 随机选择一个方向
int dir = rand() % 4;
int newX = x + directions[dir][0];
int newY = y + directions[dir][1];
// 检查新位置是否在地图内且未被占用
if (newX >= 0 && newX < MAP_SIZE && newY >= 0 && newY < MAP_SIZE && map[newX][newY] == '.') {
// 更新当前位置
x = newX;
y = newY;
map[x][y] = currentMark; // 标记新位置
currentMark++; // 更新标记字符
}
// 如果所有方向都不可移动,循环将继续
}
}
int main() {
char map[MAP_SIZE][MAP_SIZE];
int rand_seed = 1024; // 固定随机种子
travel(map, rand_seed);
printMap(map); // 打印最终地图
return 0;
}
代码说明
- 初始化地图:
travel 函数首先将地图的所有元素初始化为 '.'。 - 随机选择起始位置:使用
rand() 函数生成一个随机的起始坐标,并将该位置标记为 'A'。 - 定义移动方向:使用一个二维数组
directions 来表示四个可能的移动方向。 - 移动逻辑:在一个
while 循环中,随机选择一个方向并计算新的坐标。如果新的坐标在地图范围内且未被占用,则更新当前位置并标记为当前字符(从 'B' 开始)。 - 打印地图:
printMap 函数用于输出最终的地图状态。
注意事项
- 该程序使用固定的随机种子
1024,确保每次运行时生成相同的随机序列。 - 该程序会在地图上进行随机移动,直到标记到
'Z' 或者没有可移动的位置。
您可以将此代码复制到C语言编译器中进行测试和运行。