変わらず「14歳からはじめるc言語わくわくゲームプログラミング教室」とにらめっこしています。
その中にマップデータをtxtファイルから読み取る章があるのですが、そのソースが数字の1ケタしか読み取れない仕様なので
困っています。調べてみるとstrtolがよくヒットするのですが、どうソースに組み込むかわかりません。
理想はアルファベット小文字「a~f」大文字「A~F」をtxtファイルから読み取ることです。
gamemain.h
#ifndef __GAMEMAIN_H__
#define __GAMEMAIN_H__
#include <DxLib.h>
#include "main.h"
#define IMG_CHIPSIZE 25
#define MAP_WIDTH 500
#define SHOW_WIDTH 16
#define MAP_HEIGHT 15
#define MOVERATE 5
extern char g_mapdata[MAP_HEIGHT][MAP_WIDTH];
struct StageData{
int movecounter;
int scroll_x;
int stage_width;
};
extern StageData g_stagedata;
void GameMain();
void DrawMap();
void InitStage();
#endif
#include "gamemain.h"
char g_mapdata[MAP_HEIGHT][MAP_WIDTH];
StageData g_stagedata;
//ステージ初期化
void InitStage(){
int fh = FileRead_open("media\\mapdata2.txt");
for (int y = 0; y < MAP_HEIGHT; y++){
FileRead_gets(g_mapdata[y], 256, fh);
}
FileRead_close(fh);
//マップの長さを調べる
g_stagedata.stage_width = strlen(g_mapdata[0]);
if (g_stagedata.scroll_x >= g_stagedata.stage_width - SHOW_WIDTH){
g_stagedata.scroll_x = g_stagedata.stage_width - SHOW_WIDTH;
}
}
void GameMain(){
//移動制限
g_stagedata.movecounter++;
g_stagedata.movecounter %= MOVERATE;
DrawMap();
//スクロール移動
int key = GetJoypadInputState(DX_INPUT_KEY_PAD1);
if (g_stagedata.movecounter == 0){
int sx = g_stagedata.scroll_x;
if (key & PAD_INPUT_LEFT) sx -= 1;
if (key & PAD_INPUT_RIGHT) sx += 1;
//範囲チェック
if (sx < 0) sx = 0;
if (sx > g_stagedata.stage_width - SHOW_WIDTH) {
sx = g_stagedata.stage_width - SHOW_WIDTH;
}
g_stagedata.scroll_x = sx;
}
//Zキーをチェックしてリロード
if (IsAKeyTrigger(key) == TRUE) {
InitStage();
}
}
void DrawMap(){
for (int y = 0; y < MAP_HEIGHT; y++){
for (int x = 0; x < SHOW_WIDTH; x++){
int c = g_mapdata[y][g_stagedata.scroll_x + x] - '0';
DrawRotaGraph2(x*IMG_CHIPSIZE, y*IMG_CHIPSIZE, 0, 0, 0.5, 0,
g_imghandles.mapitems[c], TRUE, FALSE);
}
}
}