鱼C论坛

 找回密码
 立即注册
查看: 1054|回复: 1

这是一个类似坦克大战游戏的未完成代码,为什么在运行时会出现“?”字符

[复制链接]
发表于 2023-11-30 20:21:30 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
#include<time.h>
#include<stdlib.h>
#include<stdio.h>
#include<string.h>/*有时会有开局杀是不是很惊喜!*/
int main(){
        char ditu[9][9][3]={"0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0"};
        char wanjia[]={"玩家"};
        char diren[]={"敌军"};
        srand((unsigned)time(NULL));
        int a = rand()%10;
        int b = rand()%10;
        int c = rand()%10;
        int d = rand()%10;
        int n=0,m=0,put,z;
        do{
                for(n=0;n<9;n++){
                        for(m=0;m<9;m++){
                                printf("%4s ",ditu[n][m]);
                        }
                        printf("\n");
                }
                    printf("\n");
                        strcpy(ditu[a][b],diren);
                        strcpy(ditu[c][d],wanjia);
                z = rand()%8;//z=0向左z=1向右z=2向下z=3向上  z=4子弹左  z=5子弹右  z=6子弹上  z=7子弹下
                if(z==0){//向左
                        strcpy(ditu[a][b-1],diren);
                        strcpy(ditu[a][b],"0");
                        b = b-1;
                    if(b-1<0){
                        b = b+1;
                        strcpy(ditu[a][b],diren);
                        continue;
                }
        }
                if(z==1){//向右
                        strcpy(ditu[a][b+1],diren);
                        strcpy(ditu[a][b],"0");
                        b = b+1;
                    if(b+1>8){
                        b = b-1;
                        strcpy(ditu[a][b],diren);
                        continue;
                }
        }
                if(z==2){//向下
                        strcpy(ditu[a+1][b],diren);
                        strcpy(ditu[a][b],"0");
                        a = a+1;
                    if(a+1>8){
                        a = a-1;
                        strcpy(ditu[a][b],diren);
                        continue;
                }
        }
                if(z==3){//向上
                        strcpy(ditu[a-1][b],diren);
                        strcpy(ditu[a][b],"0");
                        a = a-1;
                    if(a-1<0){
                        a = a+1;
                        strcpy(ditu[a][b],diren);
                        continue;
                }
        }
                if(z==4){//发射子弹 向左
                        if(b!=0){
                        for(n=0;n<b;n++){
                                strcpy(ditu[z][n],"0");
                    }
                }
                    else{
                            continue;
                        }
        }
                if(z==5){//发射子弹 向右
                        if(b!=8){
                        for(n=8;n>b;n--){
                                strcpy(ditu[z][n],"0");
                        }
                }
                    else{
                            continue;
                    }
        }
                if(z==6){//发射子弹 向上
                        if(a!=0){
                        for(n=0;n<z;n++){
                                strcpy(ditu[n][b],"0");
                        }
                }
                    else{
                            continue;
                    }
        }
                if(z==7){//发射子弹 向下
                        if(a!=8){
                        for(n=8;n>z;n--){
                                strcpy(ditu[n][b],"0");
                        }
                }
                    else{
                            continue;
                        }
        }
        printf("\n%d\n",z);
                //以下是玩家的操作 ,如果没有敌军,就重复一遍srand
                for(n=0;n<9;n++){
                        for(m=0;m<9;m++){
                                printf("%4s ",ditu[n][m]);
                        }
                        printf("\n");
                }
                printf("\n");
                scanf("%d",&put);
        }while(put!=-1);
        return 0;
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2023-11-30 20:22:01 | 显示全部楼层
这个代码中出现“?”字符的原因是,你在定义字符数组时使用了错误的语法。在C语言中,字符数组应该用单引号而不是双引号来定义,例如`char wanjia[3] = {'玩', '家', '\0'};`表示一个包含两个字符的字符串,最后一个`\0`表示字符串的结束符。

另外,你可能需要修改do-while循环中的for循环部分,因为它目前没有正确的结束条件。以下是修改后的代码示例:

#include <stdio.h>
#include <stdlib.h>
#include <time.h>

int main() {
    char ditu[100] = {'0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0',
                      '0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0',
                      '0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0',
                      '0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0'};
    char wanjia[3] = {'玩', '家', '\0'};
    char diren[3] = {'敌', '军', '\0'};

    srand((unsigned)time(NULL));
    int a = rand() % 10;
    int b = rand() % 10;
    int c = rand() % 10;
    int d = rand() % 10;
    int n = 0, m = 0, put, z;

    do {
        for (n = 0; n < 100; n++) {
            printf("%c ", ditu[n]);
            if ((n + 1) % 10 == 0) {
                printf("\n");
            }
        }

        printf("请输入坐标:");
        scanf("%d", &put);

        if (put >= 0 && put < 100) {
            ditu[put] = '1';
        }

        for (z = 0; z < 100; z++) {
            printf("%c ", ditu[z]);
            if ((z + 1) % 10 == 0) {
                printf("\n");
            }
        }

        printf("是否继续?(1/0)");
        scanf("%d", &m);
    } while (m == 1);

    return 0;
}

这段代码会循环打印一个地图,接收用户输入的坐标并在地图上标记。然后询问用户是否继续操作,如果用户输入1,则继续下一轮循环,否则结束程序。注意,这里只用到了地图的前100个位置,如果需要使用更多位置,请自行修改代码。

以上回复来自 -- ChatGPT(FishC官方接口),如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-11-23 08:46

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表