Beispiel #1
0
//retorna objeto no arquivo
void* getObject(char* pathName, int indice, void (*reader)(void* obj, int seek, void* arq), void* (*allocar)()){

    FILE *arq;
    int c = 0;
    int pos, block;
    long int qtd;
    void* ob;
    char str[6], bn;
    mark emp;
    

    arq = fopen(pathName, "r+b");
    if(arq==NULL) return NULL;
    fread(&qtd, sizeof(long int), 1, arq);
    fread(&block, sizeof(int), 1, arq); 
    int primeiroItem = ftell(arq);   
    rewind(arq);
    pos = fseek(arq, primeiroItem, 0);
    qtd = fseek(arq, (primeiroItem + indice*(block + sizeof(mark))), SEEK_SET);    
    fread(&emp, sizeof(mark), 1, arq);  
    if(emp == empty) return NULL;
    ob = allocar();
    reader(ob, ftell(arq), arq);
    // fread(ob, block, 1, arq);
    fclose(arq);
    return ob;
} 
Beispiel #2
0
//retorna um vetor com todos os objetos do arquivo e ultima posição nula
void* getAll(char* pathName, void (*reader)(void* obj, int seek, void* arq), void* (*allocar)()){

    FILE *arq;
    int block, pos;
    long int qtd;
    mark emp;
    
    Lista lista = Lista_createLista();

    arq = fopen(pathName, "r+b");
    fread(&qtd, sizeof(long int), 1, arq);
    fread(&block, sizeof(int), 1, arq);  
    int primeiroItem = ftell(arq);
    //preenche lista
    rewind(arq);
    pos = fseek(arq, primeiroItem, 0);
    
    for(int c=0; c<qtd; c++){
        fseek(arq, (primeiroItem + c*(block + sizeof(mark))), SEEK_SET);    
        fread(&emp, sizeof(mark), 1, arq);
        if(emp == full){
             void *ob; ob = allocar();
             reader(ob, ftell(arq), arq);
            //  fread(ob, block, 1, arq);
             Lista_insert(lista, ob);
        }
    }
    fclose(arq);

    return lista;
}
int start(personagem *per,char **map){
	char test,test2;
	int slot,i;

	do{
	printf("BEM VINDO AO JUMUNCHIKIN\nNOVO JOGO(n)/CARREGAR JOGO(c):");
	scanf("%c",&test);
	}while(test!='c' && test!='n');

	if(test=='c'){
		do{
			printf("digite o slot que sera carregado:\n");
			scanf("%i",&slot);
		}while(slot<0 || slot>3);
		if(load(per,slot)){
			printf("slot invalido.\n");
			return 2;
		}
		system("pause");
	}//carrega um jogo

	if(test=='n'){
		printf("digite o nome do seu personagem:");
		scanf("%*c");
		gets((*per).nome);
		newGame(per);
		test2=save(*per);
		system("pause");
	}//cria um novo personagem

	test=allocar(map,*per);
		if(test){
			printf("erro na alocacao do mapa\n");
			return 1;
	}//aloca mapa

	test2=invSet((*per).slot);//seleciona inventario
	if(test2){
		return 1;
	}
	return 0;
}//inicializa o jogo e o personagem com new game ou load game