标题:C语言数组问题.实在不会了.图片是拍的请见谅.
取消只看楼主
Niderhoger
Rank: 1
等 级:新手上路
帖 子:17
专家分:0
注 册:2019-11-3
结帖率:100%
已结贴  问题点数:10 回复次数:4 
C语言数组问题.实在不会了.图片是拍的请见谅.
搜索更多相关主题的帖子: C语言 图片 数组 
2020-03-30 17:35
Niderhoger
Rank: 1
等 级:新手上路
帖 子:17
专家分:0
注 册:2019-11-3
得分:0 
回复 3楼 lin5161678
关键是怎么去检查边界...这一步不会
2020-03-30 21:11
Niderhoger
Rank: 1
等 级:新手上路
帖 子:17
专家分:0
注 册:2019-11-3
得分:0 
回复 3楼 lin5161678
因为我的代码是先移动的,它会移动到索引为-1的地方,这就直接异常了
2020-03-30 21:13
Niderhoger
Rank: 1
等 级:新手上路
帖 子:17
专家分:0
注 册:2019-11-3
得分:0 
回复 2楼 wmf2014
..对不起 忘了说了
我就是那个变界检查不会 怎么让我的移动不会走出那个10×10的空间

我想过声明一个12×12的 但是太麻烦了
2020-03-30 21:14
Niderhoger
Rank: 1
等 级:新手上路
帖 子:17
专家分:0
注 册:2019-11-3
得分:0 
回复 8楼 wmf2014
#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>
#include <time.h>

void chuShiHua(char qiPan[][12], bool panDuan[][12]);
int suiJiShu(void);
bool jianCha(bool panDuan[][12], char ziMu);
void yiDong(bool panDuan[][12], char qiPan[][12]);
void daYin(char qiPan[][12]);

int hang = 1, lie = 1;
char ziMu = 'A';

int main(void)
{
    char qiPan[12][12];
    bool panDuan[12][12];


    srand((unsigned)time(NULL));
    chuShiHua(qiPan, panDuan);

    qiPan[1][1] = ziMu;
    panDuan[1][1] = true;

    while (jianCha(panDuan, ziMu))
        yiDong(panDuan, qiPan);

    daYin(qiPan);

    return 0;
}

/* 初始化数组 */
void chuShiHua(char qiPan[][12], bool panDuan[][12])
{
    for (int x = 0; x < 12; x++)
        for (int y = 0; y < 12; y++)
            qiPan[x][y] = '.';

    for (int x = 0; x < 12; x++)
        for (int y = 0; y < 12; y++)
            if (x == 0 || y == 0 || x == 11 || y == 11)
                panDuan[x][y] = true;
            else
                panDuan[x][y] = false;
}

/* 生成随机数 */
int suiJiShu(void)
{
    return rand() % 4;
}

/* 判断,如果能继续则返回true;不能继续则返回false */
bool jianCha(bool panDuan[][12], char ziMu)
{
    if (ziMu == 'Z')
        return false;
    if (panDuan[hang - 1][lie] && panDuan[hang + 1][lie])
        if (panDuan[hang][lie - 1] && panDuan[hang][lie + 1])
            return false;

    return true;
}

/* 利用随机数进行方向的移动 */
void yiDong(bool panDuan[][12], char qiPan[][12])
{
    bool zuobiao = true;
    switch (suiJiShu())
    {
    case 0:hang--;
        if (panDuan[hang][lie])
        {
            hang++;
            zuobiao = false;
        }
        break;
    case 1:lie++;
        if (panDuan[hang][lie])
        {
            lie--;
            zuobiao = false;
        }
        break;
    case 2:hang++;
        if (panDuan[hang][lie])
        {
            hang--;
            zuobiao = false;
        }
        break;
    case 3:lie--;
        if (panDuan[hang][lie])
        {
            lie++;
            zuobiao = false;
        }
        break;
    }

    if (zuobiao)
    {
        ziMu++;
        qiPan[hang][lie] = ziMu;
        panDuan[hang][lie] = true;
    }
}

/* 打印 */
void daYin(char qiPan[][12])
{
    for (int x = 1; x < 11; x++)
    {
        for (int y = 1; y < 11; y++)
            putchar(qiPan[x][y]);
        putchar('\n');
    }
        
}


我成功了 不过不是声明的10×10数组 ,而是12×12  
2020-03-31 19:47



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-500735-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.402059 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved