ジャンケンゲームを作ろう。11


ファイル読み書きモジュールを作成してみました。
プロジェクトが現在テスト段階なので構造体をベタにセーブロードしてます。
最終的な公開版は簡単な暗号化を行う予定でいます。
ってもバイナリエディタでササッと見て弄られない程度の簡単なのしか用意しないつもりですけど
チェックサム+ XOR とか極々単純なもの)。


ビルドには下記ソースの他に「ジャンケンゲームを作ろう。8」で公開してる
Status.h, Status.c モジュールも含まれます。
また libfat を利用する為 makefile のライブラリインクルード部も変更してます。


ジャンケンゲームを作ろう。8
http://d.hatena.ne.jp/dumbo001/20100121/p1


file module test


main.c

/*---------------------------------------------------------------------------------
	
	file module test
	
	version 0.01
	Jan 24, 2010
	
	By. REGEKATSU
	
---------------------------------------------------------------------------------*/

#include <stdio.h>
#include <nds/ndstypes.h>
#include <nds/interrupts.h>
#include <nds/arm9/input.h>
#include <nds/arm9/console.h>
#include "File.h"
#include "Status.h"


void main_DrawStatus(void);

//---------------------------------------------------------------------------------
int main(void) {
//---------------------------------------------------------------------------------
	
	consoleDemoInit();
	
	printf("\x01b[0;0Hfile module test\n\nversion 0.01\nJan 24, 2010\n\nBy. REGEKATSU\n\n\n");
	
	
	Status_Clear();
	
	while(1) {
		
		swiWaitForVBlank();
		scanKeys();
		
		if(keysDown() & KEY_A){
			
			printf("\x01b[9;0HLoadStatus.");
			
			if(File_Load()){
				main_DrawStatus();
			}else{
				printf("\x01b[12;0HFileLoadError.");
			}
			
		}else if(keysDown() & KEY_B){
			
			printf("\x01b[9;0HSaveStatus.");
			
			if(File_Save()){
				main_DrawStatus();
			}else{
				printf("\x01b[12;0HFileSaveError.");
			}
			
		}
		
	}
	
}

//---------------------------------------------------------------------------------
void main_DrawStatus(void){
//---------------------------------------------------------------------------------
	
	Status status;
	
	status = Status_GetStatus();
	
	printf("\x01b[11;0H\n");
	printf("COIN_CASH     %010d\n", status.cash);
	printf("COIN_EXCHANGE %010d\n", status.exchange);
	printf("COIN_MEDAL    %010d\n", status.medal);
	printf("COIN_EXMEDAL  %010d\n\n", status.exmedal);
	
	printf("PLAY_CNT      %010d\n", status.play_cnt);
	printf("GAME_LEVEL    %01d\n", status.level);
	printf("1PLAY_NUM     %02d\n", status.one_play);
	printf("EXCHANGE_VAL  %02d\n", status.exchange_val);
	
}

//---------------------------------------------------------------------------------


File.h

/*---------------------------------------------------------------------------------
	
	file module header
	
	version 0.01
	Jan 24, 2010
	
	By. REGEKATSU
	
---------------------------------------------------------------------------------*/

#ifndef _FILE_H_
#define _FILE_H_


#ifdef __cplusplus
extern "C" {
#endif


//ファイル操作の正常終了は1、異常終了は0とする
int File_Load(void);
int File_Save(void);


#ifdef __cplusplus
}
#endif

#endif	//_FILE_H_

File.c

/*---------------------------------------------------------------------------------
	
	file module routine
	
	version 0.01
	Jan 24, 2010
	
	By. REGEKATSU
	
---------------------------------------------------------------------------------*/

#include <stdio.h>
#include <fat.h>
#include "File.h"
#include "Status.h"


#define FILE_NAME "JANKENMAN.DAT"


void file_Encrypt(void);
void file_Decrypt(void);


//---------------------------------------------------------------------------------
int File_Load(void){
//---------------------------------------------------------------------------------
	
	if(!fatInitDefault()) return 0;
	
	FILE *fp;
	Status status;
	
	if( (fp = fopen(FILE_NAME, "rb") ) == NULL ){
		fclose(fp);
		return 0;
	}
	
	fread(&status, sizeof(status), 1, fp);
	Status_SetStatus(status);
	fclose(fp);
	
	return 1;
	
}

//---------------------------------------------------------------------------------
int File_Save(void){
//---------------------------------------------------------------------------------
	
	if(!fatInitDefault()) return 0;
	
	FILE *fp;
	Status status;
	
	if( (fp = fopen(FILE_NAME, "wb") ) == NULL ){
		fclose(fp);
		return 0;
	}
	
	status = Status_GetStatus();
	fwrite(&status, sizeof(status), 1, fp);
	fclose(fp);
	
	return 1;
	
}

//---------------------------------------------------------------------------------
void file_Encrypt(void){
//---------------------------------------------------------------------------------
	//ToDo
}

//---------------------------------------------------------------------------------
void file_Decrypt(void){
//---------------------------------------------------------------------------------
	//ToDo
}

//---------------------------------------------------------------------------------