首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >C语言2d数组有趣游戏横线

C语言2d数组有趣游戏横线
EN

Stack Overflow用户
提问于 2014-12-02 15:26:32
回答 1查看 658关注 0票数 0

我得到了一个填字游戏crossword20,它已经满了单词,所以我不需要生成。我需要扫描单词水平只,并把他们放在一个新的数组。每一行一个字,所以新的数组将是array40。

注意:纵横字谜最多有40个水平单词!,所以我只需要数组中的40行。如果words<40,则数组中的其他单元将保持“\0”。

黑匣子是“*”。

给出的填字游戏如下:

代码语言:javascript
复制
char crossword[20][20]={
                {'*','*','*','*','*','*','*','*','*','*','*','*','*','*','*','*','*','*','*','*'},
                {'*','T','Y','P','E','*','*','*','*','G','U','I','T','A','R','I','S','T','*','*'},
                {'*','E','*','*','V','A','I','N','*','A','*','*','*','V','*','*','T','*','I','*'},
                {'*','R','O','M','E','*','*','*','*','M','A','R','R','I','A','G','E','*','N','*'},
                {'*','R','*','*','N','O','O','D','L','E','*','O','*','A','*','*','A','N','T','*'},
                {'*','I','N','*','*','*','*','O','*','*','*','P','E','T','R','O','L','*','I','*'},
                {'*','F','*','C','*','C','U','T','*','L','I','E','*','I','*','A','T','O','M','*'},
                {'*','I','*','O','*','U','*','*','M','*','N','*','M','O','U','T','H','*','A','*'},
                {'*','E','N','V','E','L','O','P','E','*','F','*','I','N','*','H','*','A','T','*'},
                {'*','D','*','E','*','T','*','*','A','*','E','*','N','*','*','*','A','G','E','*'},
                {'*','*','A','R','T','*','I','N','T','E','R','I','O','R','*','A','*','O','*','*'},
                {'*','K','*','*','O','*','R','*','*','A','T','*','R','O','B','B','E','R','Y','*'},
                {'*','A','T','*','A','I','R','*','S','T','I','R','*','O','*','O','*','A','*','*'},
                {'*','N','O','*','S','*','I','T','*','*','L','*','S','M','I','L','E','*','S','*'},
                {'*','G','*','*','T','*','T','*','O','*','I','*','O','*','N','I','G','H','T','*'},
                {'*','A','C','E','*','M','A','N','D','A','T','O','R','Y','*','T','O','*','O','*'},
                {'*','R','*','N','Y','*','T','*','E','*','Y','*','T','*','*','I','*','*','P','*'},
                {'*','O','*','D','O','*','E','*','*','*','*','I','*','O','Z','O','N','E','*','*'},
                {'*','O','N','*','U','N','D','E','R','W','A','T','E','R','*','N','O','U','N','*'},
                {'*','*','*','*','*','*','*','*','*','*','*','*','*','*','*','*','*','*','*','*'}
};

到目前为止,我所做的是这样的,但这是不正确的,因为我是用书呆子的方式来做的……:

代码语言:javascript
复制
#include<stdio.h>
#include<stdlib.h>

char cross[20][20]={
                {'*','*','*','*','*','*','*','*','*','*','*','*','*','*','*','*','*','*','*','*'},
                {'*','T','Y','P','E','*','*','*','*','G','U','I','T','A','R','I','S','T','*','*'},
                {'*','E','*','*','V','A','I','N','*','A','*','*','*','V','*','*','T','*','I','*'},
                {'*','R','O','M','E','*','*','*','*','M','A','R','R','I','A','G','E','*','N','*'},
                {'*','R','*','*','N','O','O','D','L','E','*','O','*','A','*','*','A','N','T','*'},
                {'*','I','N','*','*','*','*','O','*','*','*','P','E','T','R','O','L','*','I','*'},
                {'*','F','*','C','*','C','U','T','*','L','I','E','*','I','*','A','T','O','M','*'},
                {'*','I','*','O','*','U','*','*','M','*','N','*','M','O','U','T','H','*','A','*'},
                {'*','E','N','V','E','L','O','P','E','*','F','*','I','N','*','H','*','A','T','*'},
                {'*','D','*','E','*','T','*','*','A','*','E','*','N','*','*','*','A','G','E','*'},
                {'*','*','A','R','T','*','I','N','T','E','R','I','O','R','*','A','*','O','*','*'},
                {'*','K','*','*','O','*','R','*','*','A','T','*','R','O','B','B','E','R','Y','*'},
                {'*','A','T','*','A','I','R','*','S','T','I','R','*','O','*','O','*','A','*','*'},
                {'*','N','O','*','S','*','I','T','*','*','L','*','S','M','I','L','E','*','S','*'},
                {'*','G','*','*','T','*','T','*','O','*','I','*','O','*','N','I','G','H','T','*'},
                {'*','A','C','E','*','M','A','N','D','A','T','O','R','Y','*','T','O','*','O','*'},
                {'*','R','*','N','Y','*','T','*','E','*','Y','*','T','*','*','I','*','*','P','*'},
                {'*','O','*','D','O','*','E','*','*','*','*','I','*','O','Z','O','N','E','*','*'},
                {'*','O','N','*','U','N','D','E','R','W','A','T','E','R','*','N','O','U','N','*'},
                {'*','*','*','*','*','*','*','*','*','*','*','*','*','*','*','*','*','*','*','*'}
};

int main(){
    int i, j, start_index, end_index, a, b, start_index1, end_index1;
    char cross1[40][20], cross11[40][20];
    for(i=0;i<40;i++){
        for(j=0;j<20;j++){
            cross1[i][j]='\0';
        }
    }
    for(i=0;i<40;i++){
        for(j=0;j<20;j++){
            cross11[i][j]='\0';
        }
    }
    for(i=0;i<19;i++){
        start_index = -1;
        end_index=-1;
        start_index1 = -1;
        end_index1=-1;
        for(j=0;j<20;j++){
            if(isalpha(cross[i][j]) && (!isalpha(cross[i][j-1])) && isalpha(cross[i][j+1]) && start_index==-1){
                start_index = j;
            }
            if(isalpha(cross[i][j]) && (!isalpha(cross[i][j+1])) && isalpha(cross[i][j-1]) && end_index==-1){
                end_index = j;
            }
            if(isalpha(cross[i][j]) && (!isalpha(cross[i][j-1])) && isalpha(cross[i][j+1])){
                start_index1 = j;
            }
            if(isalpha(cross[i][j]) && (!isalpha(cross[i][j+1])) && isalpha(cross[i][j-1])){
                end_index1 = j;
            }
        }
        for(a=start_index,b=0;a<=end_index;a++,b++){
            cross1[i][b]=cross[i][a];
        }
        for(a=start_index1,b=0;a<=end_index1;a++,b++){
            cross11[i][b]=cross[i][a];
        }
    }
    printf("CROSS1\n");
    for(i=0;i<20;i++){
        for(j=0;j<20;j++){
            printf("%c ", cross1[i][j]);
        }
        printf("\n");
    }
    printf("CROSS11\n");
    for(i=0;i<20;i++){
        for(j=0;j<20;j++){
            printf("%c ", cross11[i][j]);
        }
        printf("\n");
    }
    return 0;
}

输出如下:

代码语言:javascript
复制
CROSS1

TYPE
VAIN
ROME
NOODLE
IN
CUT
MOUTH
ENVELOPE
AGE
ART
AT
AT
NO
NIGHT
ACE
NY
DO
ON

CROSS11

GUITARIST
VAIN
MARRIAGE
ANT
PETROL
ATOM
MOUTH
AT
AGE
INTERIOR
ROBBERY
STIR
SMILE
NIGHT
TO
NY
OZONE
NOUN

问题是我希望它在一个数组中而不是在两个( cross1,cross11)中,还有一些单词被打印了两次(在cross1和cross11中都像“口”一样),还有一个问题是有些词甚至不像“谎言”那样打印。

任何帮助都会得到赏识和回报!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-12-02 15:46:24

您的问题是,您的代码只能在每行最多有两个单词的情况下工作。看看你的原始数组:在cross[6]上,你有切割,谎言和原子。您在cross1中添加了一个切分,然后在cross11中放置了LIE,你遇到了原子,并且在cross11中覆盖了一个谎言,所以LIE永远不会被存储。

一个好的解决方案是摆脱start_indexend_indexcross11,因为start_index1end_index1做他们应该做的事情。您还需要一个类型为row的变量int来跟踪您在cross1中的位置,以确保不再覆盖内容。一旦您为end_index1设置了不同的值,就把它放在cross1中,如下所示:

代码语言:javascript
复制
if(isalpha(cross[i][j]) && (!isalpha(cross[i][j+1])) && isalpha(cross[i][j-1])){
    end_index1 = j;
    //now do this right here, not outside the j-loop
    for(a=start_index1,b=0;a<=end_index1;a++,b++){ 
        cross1[row][b]=cross[i][a];
    }
    row++; //variable which will keep track of the row you're in for cross1
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27252954

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档