Если вы хотите узнать, как сделать правильный дизайн программы C с самого начала, то это так.
Правильный способ сделать это - создать item.h и файл item.c. Вместе они образуют «модуль кода» (или класс, если хотите).
Ваш заголовочный файл item.h должен содержать защитные оболочки typedef и header. Вы также должны написать функцию инициализации.
// item.h
#ifndef ITEM_H
#define ITEM_H
#include <string.h>
typedef struct {
char name[20];
char desc[100];
int lp;
int shield;
int weapon;
} item_t;
void item_init (item_t* item,
const char name[20],
const char desc[100],
int lp,
int shield,
int weapon);
#endif
Вы можете реализовать функцию инициализации в init.c:
// item.c
#include "item.h"
void item_init (item_t* item,
const char name[20],
const char desc[100],
int lp,
int shield,
int weapon)
{
strcpy(item->name, name);
strcpy(item->desc, desc);
item->lp = lp;
item->shield = shield;
item->weapon = weapon;
}
Эти два файла, init.h и init.c озабочены только о поведении всех item_t
переменных. Вы можете расширить их с помощью большего количества функций. Они не содержат и не должны содержать никаких фактических данных.
Теперь, если вы хотите сохранить эти данные отдельно, вы можете создать отдельную пару файлов для него, как это:
// item_data.h
#include "item.h"
#define ITEMS_N 36
item_t* item_data_get (int item_n);
Это просто функция «добытчик», который позволяет получить доступ к данным. Фактические данные инкапсулированные в файле .c:
// item_data.c
#include "item_data.h"
static item_t items [ITEM_N] =
{
[0] = {.name="name", .desc="none", .lp=0, .shield=0, .weapon=200},
[1] = ... // fill up data here
};
item_t* item_data_get (int item_n)
{
return items[n];
}
Если позже вы хотите изменить данные данного элемента, вы можете сделать это по телефону item_init(item_data_get(n), ...);
Да, вы можете это сделать в отдельном файле. Скорее всего, это не лучший способ инициализации массива. Вы должны посмотреть, как правильно инициализировать массив: 'int array [6] [6] = {{1, 3, 9, 8, 3, 4}, {2, 9, 1, 0, -1, 7} , ...}; 'делает это для' int'; вам просто нужно заменить номера с помощью инициализатора, заключенного в скобки для каждой структуры. –
за 36 предметов, почему вы делаете предмет сокровища [6] [6], а не предмет сокровища [36]. Хотя оба они правильны, но последний подход более понятен. –