0

我是 C 语言的初学者,编程的第一年。有一个问题,当我从一个结构初始化一个整数时,它没有初始化,不仅如此,这段代码中还发生了其他问题,我什至无法开始解释,我将提供结构和与之相关的代码,我使用 SDL 1.2(由于大学的项目义务)。

这是我初始化的整数之一

标题:

typedef struct{
    SDL_Surface *background;
    SDL_Surface *credits;
    SDL_Surface *quitbtn[2];
    SDL_Surface *creditsbtn[2];
    SDL_Surface *continuebtn[2];
    SDL_Surface *gitbtn[2];
    SDL_Surface *settingsbtn[2];
    SDL_Surface *gitbtn_s;
    SDL_Surface *leftarrow;
    SDL_Surface *rightarrow;
    SDL_Surface *btnreset;
    int isselected[5];
}menuitems;

typedef struct{
    SDL_Surface *gamebackground;
}gameitems;

typedef struct{
    SDL_Surface *pausemenu;
    SDL_Surface *resumebtn[2];
    SDL_Surface *settingsbtnreal[2];
    int selectedresume;
    int selectedsettingsreal;
}pauseitems;

typedef struct{
    SDL_Surface *settings;
    SDL_Surface *donebtn[2];
    SDL_Surface *fsbtn[3];
    int isselected[2];
}settingsitems;

typedef struct{
    Mix_Music *music;
    Mix_Chunk *scratch;
    TTF_Font *font;
    TTF_Font *fontBig;
    int volume;
}misc;

代码:

int load_files(menuitems *MI, pauseitems *PI, gameitems *GI, settingsitems *SI, misc *M)
{
   



    //Due to a problem, I am not able to initialize 


    MI->background = load_image("images/background.png");
    MI->credits = IMG_Load("images/credits.png");
    MI->quitbtn[0] = IMG_Load("images/exitbtn_u.png");
    MI->quitbtn[1] = IMG_Load("images/exitbtn_s.png");
    MI->creditsbtn[0] = IMG_Load("images/creditsbtn_u.png");
    MI->creditsbtn[1] = IMG_Load("images/creditsbtn_s.png");
    MI->continuebtn[0] = IMG_Load("images/continuebtn_u.png");
    MI->continuebtn[1] = IMG_Load("images/continuebtn_s.png");
    MI->gitbtn[0] = IMG_Load("images/gitbtn_u.png");
    MI->gitbtn[1] = IMG_Load("images/gitbtn_s.png");
    MI->settingsbtn[0] = IMG_Load("images/settingsbtn_u.png");
    MI->settingsbtn[1] = IMG_Load("images/settingsbtn_s.png");
    MI->btnreset = IMG_Load("images/btnreset.png");
    MI->isselected[0] = 0;
    MI->isselected[1] = 0;
    MI->isselected[2] = 0;
    MI->isselected[3] = 0;
    MI->isselected[4] = 0;

    GI->gamebackground = load_image("images/gamebackground.png");


    SI->settings = IMG_Load("images/settings.png");
    SI->donebtn[0] = IMG_Load("images/done_u.png");
    SI->donebtn[1] = IMG_Load("images/done_s.png");
    SI->fsbtn[0]= IMG_Load("images/fsbtn_u.png");
    SI->fsbtn[1] = IMG_Load("images/fsbtn_s1.png");
    SI->fsbtn[2] = IMG_Load("images/fsbtn_s2.png");
    SI->isselected[0] = 0;
    SI->isselected[1] = 0;

    

    PI->pausemenu = IMG_Load("images/pausemenu.png");
    PI->resumebtn[0] = IMG_Load("images/resumebtn_u.png");
    PI->resumebtn[1] = IMG_Load("images/resumebtn_s.png");
    PI->settingsbtnreal[0] = IMG_Load("images/settingsbtnreal_u.png");
    PI->settingsbtnreal[1] = IMG_Load("images/settingsbtnreal_s.png");

    M->music = Mix_LoadMUS("sounds/beat.mp3");
    M->scratch = Mix_LoadWAV("sounds/scratch.wav");
    M->font = TTF_OpenFont("fonts/Retro.ttf", 48);
    M->fontBig = TTF_OpenFont("fonts/Retro.ttf", 72);
    M->volume = 128;
    
    if (M->music == NULL || M->font == NULL || M->scratch == NULL || SI->settings == NULL || MI->background == NULL || MI->quitbtn[0] == NULL || MI->creditsbtn[0] == NULL || MI->continuebtn[0] == NULL || MI->gitbtn[0] == NULL || MI->settingsbtn[0] == NULL || MI->quitbtn[1] == NULL || MI->creditsbtn[1] == NULL || MI->continuebtn[1] == NULL || MI->gitbtn[1] == NULL || MI->settingsbtn[1] == NULL || SI->donebtn[1] == NULL || SI->donebtn[0] == NULL || GI->gamebackground == NULL || PI->pausemenu == NULL || PI->settingsbtnreal[1] == NULL || PI->settingsbtnreal[0] == NULL || PI->resumebtn[1] == NULL || PI->resumebtn[0] == NULL)
    {
        return 0;
    }
    printf("%d\n", SI->isselected[0]);
    // If everything loaded fine
    return 1;
    
}

抱歉,如果这是杂乱无章的,因为这是我第一次在这里发帖!(注意load_image和IMG_Load一样)

4

1 回答 1

0

添加了新结构(将旧的现有 SDL_Surface 合并到此结构中)

typedef struct{
    SDL_Surface *quitbtn[2];
    SDL_Surface *creditsbtn[2];
    SDL_Surface *continuebtn[2];
    SDL_Surface *gitbtn[2];
    SDL_Surface *settingsbtn[2];
    SDL_Surface *resumebtn[2];
    SDL_Surface *settingsbtnreal[2];
    SDL_Surface *donebtn[2];
    SDL_Surface *fsbtn[3];
    int isselected[9];
}btn;

修复了我的问题。

于 2022-02-18T12:51:37.873 回答