struct没有名为...的成员,并且没有预期的标识符

时间:2019-01-28 15:22:17

标签: c arrays struct

我开始学习C语言,为此我正在编写一个小游戏,所以请对我保持温柔。 我想将数组放入两个不同的结构中。 第一个结构具有五个数组,描述了怪物的属性。 第二个应该描述您正在玩的角色的属性。

struct monster_eigenschaften {
    const int monster_leben[MONSTER_ANZAHL] = {10,12,15,19,25};
    const int monster_schaden_mod[MONSTER_ANZAHL] = {5,6,7,8,9};
    const int monster_schaden_const[MONSTER_ANZAHL] = {3,4,5,6,7};
    const int monster_erfahrung[MONSTER_ANZAHL] = {5,10,20,30,50};
    // Array aus 5 Pointern mit den jeweiligen Namen der Monster
    const char *monster_name [MONSTER_ANZAHL] = {"Bob","Horst","Gerd","Bonobo","Olaf"};
};
struct monster_eigenschaften -> eigenschaften[MONSTER_ANZAHL];

struct charakter_eigenschaften {
    // Anzahl der Heiltränke des Charakters
    int heiltrank;
    // Benötigte EXP zum nächsten level-up
    unsigned int char_erfahrung_need;
    // EXP des Charakters
    unsigned int char_erfahrung_haben;
    // Benötigte EXP zum level-up
    int char_erfahrung_aufstieg = 50;
    // Level des Charakters
    int char_level = 1;
    // Schaden den der Charakter mindestens macht
    int atk_char_const = 10;
    // modularer Schaden der auf den Konstanten Schaden gerechnet wird
    int atk_char_mod = 5;

int monster(int id, int spieler_leben) {
    struct charakter_eigenschaften -> charakter[MONSTER_ANZAHL];
    int leben = eigenschaften.monster_leben[id];
    int dmg;
    int atk_char;
    char kampf_flucht;
    char trank_auswahl;
    printf("Ein wildes %s erscheint!\n", eigenschaften.monster_name[id]);
    printf("Wollen sie Kaempfen oder flüchten? (k/f)\n");
    scanf("%s", &kampf_flucht);
    do{
        atk_char = rand() %  charakter.atk_char_const + charakter.atk_char_mod;
        dmg = rand() % eigenschaften.monster_schaden_mod[id] + eigenschaften.monster_schaden_const[id];
        // Wenn k oder K gedrückt wird, startet der Kampf und endet sobald die Lebenspunkte des Charakters oder des Monsters auf Null sind
        if (kampf_flucht == 'k' || kampf_flucht == 'K'){
            printf("%s greift an und richtet %d schaden an\n", eigenschaften.monster_name[id], dmg);
            spieler_leben = spieler_leben - dmg;
            printf("Sie greifen an und richten %d Schaden an\n", charakter.atk_char);
            leben = leben - charakter.atk_char;
            printf("%s hat %d Leben\n",eigenschaften.monster_name[id], leben);
            printf("Sie haben noch %d Leben\n", spieler_leben);
        }
        // Wenn f oder F gedrückt wird, soll der Charakter vor dem Monster fliehen
        else if(kampf_flucht == 'f' || kampf_flucht == 'F'){
            printf("Sie sind gefluechtet\n");
            break;
        }
        // Wenn weder k, K, f oder F gedrückt wird, wird die Schleife verlassen
        else{
            break;
        }
        if(charakter.heiltrank >= 1){
            printf("Möchten Sie einen Heiltrank benutzen?(y)\n");
            scanf("%s", &trank_auswahl);
            if(trank_auswahl == 'y' || trank_auswahl == 'Y'){
                spieler_leben = spieler_leben + HEILUNG;
                heiltrank --;
                printf("Sie haben einen Heiltrank getrunken und haben nun %d Lebenspunkte\n", spieler_leben);
                printf("Ihnen verbleiben %d Heiltränke\n", heiltrank);
            }
        }
    }

Logs

1 个答案:

答案 0 :(得分:0)

首先,您是cannot initialize values in the struct declaration。为了挽救您的代码,也许我会建议这样的事情。

#define MONSTER_ANZAHL 5

struct monster_eigenschaften {
    const int monster_leben[MONSTER_ANZAHL];
    const int monster_schaden_mod[MONSTER_ANZAHL];
    const int monster_schaden_const[MONSTER_ANZAHL];
    const int monster_erfahrung[MONSTER_ANZAHL];
    // Array aus 5 Pointern mit den jeweiligen Namen der Monster
    const char *monster_name [MONSTER_ANZAHL];
};

static const struct monster_eigenschaften EIGENSCHAFTEN = {
.monster_leben = {5, 10, 23, 25, 6},
.monster_schaden_mod = {...}
...
};

您的charakter_eigenschaften声明存在相同的问题(也缺少结尾的}