ソースコードは以下のとおりです。
Main.cpp
#include "Main.h"
#include "Player.h"
#include "Mapping.h"
CGameMain Main;
CFmfMap MapObj;
int CGameMain::MapLoad(const char* file_name, int stage_num) {
MapBitCount = MapObj.GetLayerBitCount() == 8 ? 16 : 256;
if (!MapObj.Open(file_name)) {
return -1;
}
BYTE* layer = (BYTE*)MapObj.GetLayerCount();
if (layer == NULL) {
return -1;
}
return 0;
}
int CGameMain::Init() {
ChangeWindowMode(TRUE), SetGraphMode(320, 240, 32);
//DXライブラリの初期化エラーが発生したときに終了。
if (DxLib_Init() == -1) { return -1; }
Time = GetNowCount();
new CPlayer(0.0F, 0.0F);
SetDrawScreen(DX_SCREEN_BACK);
SetWaitVSyncFlag(FALSE);
Player.Init();
return 0;
}
void CGameMain::Main() {
Time = GetNowCount();
//1/60秒立つまで待つ
while(GetNowCount()-Time<1000/60){}
Player.Update();
Player.Draw();
}
void CGameMain::Fin() {
Player.Fin();
DxLib_End();
}
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) {
Main.Init();
while (ScreenFlip() == 0 && ProcessMessage() == 0 && ClearDrawScreen() == 0) {
Main.Main();
}
Main.Fin();
return 0;
}
#pragma once
#include "DxLib.h"
class CTaskList;
class CPlayer;
class CGameMain {
int Time;
CPlayer Player;
public:
int MapLoad(const char* file_name, int stage_num);
int Init();
void Main();
void Fin();
};
#pragma once
class Task {
public:
virtual ~Task() {}
virtual void Initialize() {} //初期化処理は実装してもしなくてもいい
virtual void Finalize() {} //終了処理は実装してもしなくてもいい
virtual void Update() = 0; //更新処理は必ず継承先で実装する
virtual void Draw() = 0; //描画処理は必ず継承先で実装する
};
#pragma once
class CMover {
public:
float X, Y, L, R, T, B;
float VX, VY;
CMover() {};
CMover(float x, float y, float l, float t, float r, float b);
bool Hit(CMover* m);
};
#include "Dxlib.h"
#include "CharMove.h"
#include "Mover.h"
CMover::CMover(float x, float y, float l, float t, float r, float b)
:X(x), Y(y), L(l), T(t), R(r), B(b),VX(0.0F),VY(0.0F){
}
bool CMover::Hit(CMover* m) {
return
X + L < m->X + m->R && m->X + m->L < X + R &&
Y + T < m->Y + m->B && m->Y + m->T < Y + B;
}
#pragma once
//マップチップ
const int MapCell = 16;
class CCharMove {
float Clx, Crx, Cty, Cby;
POINT mPt[8];
int ColType;
public:
CCharMove() {};
CCharMove(POINT pt[], float clx, float crx, float cty, float cby,int coltype);
void Init();
POINT CheckMap(int x, int y);
void MapDraw();
};
#include "DxLib.h"
#include "Main.h"
#include "CharMove.h"
#include "Mapping.h"
int MapBitCount;
CCharMove::CCharMove(POINT pt[], float clx, float crx, float cty, float cby, int coltype)
: Clx(clx), Crx(crx), Cty(cty), Cby(cby),ColType(coltype)
{
Init();
for (int i = 0; i < 8; i++) {
mPt[i].x = pt[i].x;
mPt[i].y = pt[i].y;
}
}
void CCharMove::Init() {
ZeroMemory(mPt, sizeof(mPt));
}
POINT CCharMove::CheckMap(int x, int y) {
POINT pt[] = {
{ x + mPt[0].x, y + mPt[0].y },//左上
{ x + mPt[1].x, y + mPt[1].y },//上真ん中
{ x + mPt[2].x, y + mPt[2].y },//右上
{ x + mPt[3].x, y + mPt[3].y },//左真ん中
{ x + mPt[4].x, y + mPt[4].y },//右真ん中
{ x + mPt[5].x, y + mPt[5].y },//左下
{ x + mPt[6].x, y + mPt[6].y },//下真ん中
{ x + mPt[7].x, y + mPt[7].y },//右下
};
POINT res = { x, y };
DWORD cwidth = MapObj.GetChipWidth();
DWORD cheight = MapObj.GetChipHeight();
for (int i = 0; i < 8; i++) {
int index = MapObj.GetValue(1, pt[i].x / MapCell, pt[i].y / MapCell);
int src_x = (index % MapBitCount) * cwidth;
int src_y = (index / MapBitCount) * cheight;
if (src_x == 0 && src_y == 0) // 取得したindexが壁だったら
{
res.x = pt[i].x / MapCell; // 壁の座標を代入
res.y = pt[i].y / MapCell;
return res; // 壁の座標を返す
}
}
res.x = -1;
res.y = -1;
return res;
}
void CCharMove::MapDraw() {
DWORD swidth = MapObj.GetMapWidth();
DWORD sheight = MapObj.GetMapHeight();
DWORD cwidth = MapObj.GetChipWidth();
DWORD cheight = MapObj.GetChipHeight();
DWORD i, j;
int index, src_x, src_y;
for (i = 0; i < sheight / MapCell; i++) {
for (j = 0; j = swidth / MapCell; i++) {
index = MapObj.GetValue(0, i, j);
src_x = (index % MapBitCount) * cwidth;
src_y = (index / MapBitCount) * cheight;
}
}
}
1>Main.cpp
1>c:\users\keito940\documents\visual studio 2017\projects\スタアド\スタアド\main.h(7): error C2079: 'CGameMain::Player' が 未定義の class 'CPlayer' で使用しています。
1>c:\users\keito940\documents\visual studio 2017\projects\スタアド\スタアド\main.cpp(30): error C2228: '.Init' の左側はクラス、構造体、共用体でなければなりません
1>c:\users\keito940\documents\visual studio 2017\projects\スタアド\スタアド\main.cpp(30): note: 型は 'int' です。
1>c:\users\keito940\documents\visual studio 2017\projects\スタアド\スタアド\main.cpp(38): error C2228: '.Update' の左側はクラス、構造体、共用体でなければなりません
1>c:\users\keito940\documents\visual studio 2017\projects\スタアド\スタアド\main.cpp(38): note: 型は 'int' です。
1>c:\users\keito940\documents\visual studio 2017\projects\スタアド\スタアド\main.cpp(39): error C2228: '.Draw' の左側はクラス、構造体、共用体でなければなりません
1>c:\users\keito940\documents\visual studio 2017\projects\スタアド\スタアド\main.cpp(39): note: 型は 'int' です。
1>c:\users\keito940\documents\visual studio 2017\projects\スタアド\スタアド\main.cpp(43): error C2228: '.Fin' の左側はクラス、構造体、共用体でなければなりません
1>c:\users\keito940\documents\visual studio 2017\projects\スタアド\スタアド\main.cpp(43): note: 型は 'int' です。
1>CharMove.cpp
1>c:\users\keito940\documents\visual studio 2017\projects\スタアド\スタアド\main.h(7): error C2079: 'CGameMain::Player' が 未定義の class 'CPlayer' で使用しています。