シューティングゲームです
原因がわからないのでご指摘のほどよろしくお願いします
一回クラスなしで書いてみたのを勉強のためにクラスを用いて書き直してるのですがクラスなしのときは動いたのでそちらも必要であればあげます
main.cppーーーーーーーーーーーーーーーーーー
#include"DxLib.h"
#include"CHECKKEY.h"
#include"FpS.h"
#include"Medjed.h"
#include"Bullet.h"
#include"MENU.h"
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)
{
CheckKey a; FpS fps; Medjed arbm; Bullet arbb; Menu arb;
SetFullScreenResolutionMode(DX_FSRESOLUTIONMODE_DESKTOP);
ChangeWindowMode(FALSE);
if (DxLib_Init() == -1) return -1;
SetDrawScreen(DX_SCREEN_BACK);
int col = GetColor(255, 255, 255);
if (arb.menu() == 0)
while (1)
{
fps.Fpckg();
ClearDrawScreen();
a.checkkey();
DrawFormatString(100, 100, col, "準備中です\n(escキーを押してください)");
ScreenFlip();
if (a.key(KEY_INPUT_ESCAPE))break;
ProcessMessage();
}
if (arb.menu() == 2)
return 0;
const int time0 = GetNowCount();
int eh[3], ph = LoadGraph("画像\\キャラクタ01.png"), MN = 0,EoE[mxenmy];
CDSPACE plm(290, 220);
eh[0] = LoadGraph("画像\\enmy1.png"); eh[1] = LoadGraph("画像\\enmy1.png"); eh[2] = LoadGraph("画像\\enmy1.png");
while (1)
{
fps.Fpckg();
a.checkkey();
ClearDrawScreen();
if (arbm.mcul() == TRUE && MN == 0)
MN = arbb.bcul();
else MN = 0;
arbm.mdisp();
arbb.bbhv();
arbb.bdisp();
ScreenFlip();
ProcessMessage();
if (a.key(KEY_INPUT_ESCAPE))break;
}
DxLib::DxLib_End();
return 0;
}
#pragma once
#include"CDSPACE.h"
class Menu:public CDSPACE
{
static Menu item[3];
char* itmnm;
static int col[2];
void cpy(const char* a);
int len(const char* a);
public:
Menu();
~Menu();
Menu(int a, int b,const char* c);
int menu();
int slct(int a);
};
#include"DxLib.h"
#include"CHECKKEY.h"
#include"MENU.h"
int Menu::col[2] = { static_cast<int>(GetColor(255, 255, 255)),static_cast<int>(GetColor(255, 255, 0)) };
Menu Menu::item[3] = { Menu(100,100," チュートリアル"),Menu(100,150," ゲームスタート"),Menu(100,200," ゲーム終了") };
Menu::Menu(int a, int b, const char* c) :CDSPACE(a, b) { itmnm = new char[len(c) + 1]; cpy(c); }
Menu::Menu() {}
Menu::~Menu() { delete[]itmnm; }
int Menu::len(const char* a) { int n = 0; while (*(++a)) { ++n; }return n; }
void Menu::cpy(const char* a) { for (int i = 0; *(itmnm + i) = *(++a); ++i) { ; } }
int Menu::slct(int n)
{
CheckKey a;
a.checkkey();
static int u = 0;
if (a.key(KEY_INPUT_S))
{
if (u == 0)
++n;
++u;
}else if (a.key(KEY_INPUT_W)){
if (u == 0)
n += 2;
++u;
}else u = 0;
n %= 3;
for (int i = 0, j = 0; i <= 2; ++i)
{
if (i == n) j = 1, item[i].x = 80;
else j = 0, item[i].x = 100;
DrawFormatString(item[i].x, item[i].y, col[j], item[i].itmnm);
}
return n;
}
int Menu::menu()
{
CheckKey a;
int n = 0;
while (1)
{
a.checkkey();
ClearDrawScreen();
n = slct(n);
ScreenFlip();
if (a.key(KEY_INPUT_RETURN))break;
if (a.key(KEY_INPUT_ESCAPE))return 2;
ProcessMessage();
}
return n;
}
#pragma once
#include"Medjed.h"
class Bullet :public CDSPACE
{
static const int mxblt=27;
static int bh, EoB[mxblt];
static Bullet blt[mxblt];
bool check(Bullet a);
public:
Bullet();
Bullet(int a, int b);
Bullet(int a, int b, int c);
Bullet operator=(Medjed);
int bcul();
void bbhv();
void bdisp();
};
#include"DxLib.h"
#include"Bullet.h"
int Bullet::EoB[mxblt] = {},Bullet::bh = LoadGraph("画像\\Shot.png");
Bullet Bullet::blt[mxblt];
Bullet::Bullet():CDSPACE(){}
Bullet::Bullet(int a,int b):CDSPACE(a,b){}
Bullet::Bullet(int a, int b, int c) : CDSPACE(a, b) { d = c; }
Bullet Bullet::operator=(Medjed a)
{
return Bullet(a.hx(), a.hy(),a.hd());
}
bool Bullet::check(Bullet blt)
{
if (blt.y < -20 || blt.y>500 || blt.x < -20 || blt.x>660)
return FALSE;
else return TRUE;
}
int Bullet::bcul()
{
Medjed mjd = mjd.hndm();
for (int i = 0; i <= mxblt - 1; ++i)
{
if (EoB[i] == 0)
{
++EoB[i];
blt[i] = mjd;
blt[i].x += 16;
break;
}
}
return 1;
}
void Bullet::bbhv()
{
for (int i = 0; i <= mxblt - 1; ++i)
{
if (EoB[i] == 1)
{
for (int j = 0; j <= 3; ++j)
if (blt[i].d == j)blt[i] += blt[i];
if (check(blt[i]) == FALSE)
EoB[i] = 0;
}
}
}
void Bullet::bdisp()
{
for (int i = 0; i <= mxblt - 1; ++i)
if (EoB[i] == 1)DrawGraph(blt[i].x, blt[i].y, bh, TRUE);
}
#pragma once
#include"CDSPACE.h"
class Medjed :public CDSPACE
{
static int mh[4];
static Medjed md;
const static int AGI;
public:
void mdisp();
bool mcul();
Medjed(int a, int b);
Medjed();
int hx();
int hy();
int hd();
Medjed hndm();
};
#include"DxLib.h"
#include"Medjed.h"
#include"CHECKKEY.h"
Medjed Medjed::md(290, 220);
int Medjed::mh[4] = { LoadGraph("画像\\md0.png"), LoadGraph("画像\\md1.png"), LoadGraph("画像\\md2.png"), LoadGraph("画像\\md3.png") };
int Medjed::hx(){return x;}
int Medjed::hy(){return y;}
int Medjed::hd(){return d;}
Medjed::Medjed(int a, int b):CDSPACE(a, b){}
Medjed::Medjed():CDSPACE(){}
bool Medjed::mcul()
{
CheckKey a;
a.checkkey();
if (a.key(KEY_INPUT_D)) {
++md;
md.d = 3;
}if (a.key(KEY_INPUT_S)) {
++md;
md.d = 0;
}if (a.key(KEY_INPUT_A)) {
++md;
md.d = 1;
}if (a.key(KEY_INPUT_W)) {
++md;
md.d = 2;
}
if (md.x < 0)md.x=0;
if (md.x > 593)md.x=593;
if (md.y < 0)md.y = 0;
if (md.y > 440)md.y = 440;
if (a.key(KEY_INPUT_SPACE))
return TRUE;
return FALSE;
}
void Medjed::mdisp()
{
for (int i = 0; i <= 3; ++i)
if (md.d == i)DrawGraph(md.x, md.y, mh[i], TRUE);
}
Medjed Medjed::hndm()
{
return md;
}
#pragma once
class CheckKey {
static int KEY[256];
public:
void checkkey();
bool key(int a);
};
checkkey.cpp
#include"DxLib.h"
#include"CHECKKEY.h"
int CheckKey::KEY[256] = {};
void CheckKey::checkkey()
{
char tmpKey[256];
GetHitKeyStateAll(tmpKey);
for (int i = 0; i < 256; ++i) {
if (tmpKey[i] != 0) {
KEY[i] = 1;
}
else {
KEY[i] = 0;
}
}
}
bool CheckKey::key(int a)
{
return KEY[a];
}
#pragma once
#define mxenmy 30
class CDSPACE
{
protected:
int x, y, d;
public:
CDSPACE();
CDSPACE(int u, int v);
CDSPACE(int u, int v, int w);
CDSPACE operator+(CDSPACE p);
CDSPACE operator++();
CDSPACE operator--();
CDSPACE operator+=(CDSPACE p);
};
#include"CDSPACE.h"
#define AGI 5
CDSPACE CDSPACE::operator--()
{
if (d == 3) {
x -= AGI;
}
else if (d == 0) {
y -= AGI;
}
else if (d == 1) {
x += AGI;
}
else if (d == 2) {
y += AGI;
}
return CDSPACE(x, y);
}
CDSPACE CDSPACE::operator++()
{
if (d == 3) {
x += AGI;
}
else if (d == 0) {
y += AGI;
}
else if (d == 1) {
x -= AGI;
}
else if (d == 2) {
y -= AGI;
}
return CDSPACE(x, y);
}
CDSPACE CDSPACE::operator+=(CDSPACE p)
{
if (d == 3) {
x += 15;
}
else if (d == 0) {
y += 15;
}
else if (d == 1) {
x -= 15;
}
else if (d == 2) {
y -= 15;
}
return CDSPACE(x, y);
}
CDSPACE CDSPACE::operator+(CDSPACE p)
{
return CDSPACE(x + p.x, y + p.y);
}
CDSPACE::CDSPACE()
{
x = 0; y = 0; d = 0;
}
CDSPACE::CDSPACE(int u, int v)
{
x = u; y = v; d = 0;
}
CDSPACE::CDSPACE(int u, int v, int w)
{
x = u; y = v; d = w;
}
#pragma once
class FpS {
int mStartTime; //測定開始時刻
int mCount; //カウンタ
float mFps; //fps
static const int FPS; //設定したFPS
static const int N;
public:
FpS();
bool Update();
void Wait();
void Fpckg();
};
#include"DxLib.h"
#include"FpS.h"
const int FpS::FPS = 60;
const int FpS::N = 60;
FpS::FpS()
{
mStartTime = 0;
mCount = 0;
mFps = 0;
}
bool FpS::Update()
{
if (mCount == 0) { //1フレーム目なら時刻を記憶
mStartTime = GetNowCount();
}
if (mCount == N) { //60フレーム目なら平均を計算する
int t = GetNowCount();
mFps = 1000.f / ((t - mStartTime) / (float)N);
mCount = 0;
mStartTime = t;
}
mCount++;
return true;
}
void FpS::Wait()
{
int tookTime = GetNowCount() - mStartTime; //かかった時間
int waitTime = mCount * 1000 / FPS - tookTime; //待つべき時間
if (waitTime > 0) {
Sleep(waitTime); //待機
}
}
void FpS::Fpckg()
{
Update();
Wait();
}};