2Dゲーム制作㉓(2025/09/08)

GameSceneClassにメンバ関数の宣言を追加していく。
(GameScene.h)

#pragma once

#include"StDefine.h"

class SceneManager;

class GameScene
{
public:
	static constexpr int STAGE_NUM_MAX = 5;	//最大ステージ数

	GameScene(SceneManager* scenem);
	~GameScene(void);

	bool SystemInit(void);		//ゲーム起動時の初期化処理
	void GameInit(void);		//ゲームシーンの初期化処理
	void SceneGameNextStageInit(void);//ステージクリア時の初期化処理
	void Update(void);			//ゲームシーンの更新処理
	void Draw(void);			//ゲームシーンの描画処理
	bool Release(void);			//ゲームシーンの解放処理

	void ExitConditionProc(void);


private:
	SceneManager* sceneM;		//SceneManagerClassのインスタンスのポインタ

	eStageExitConditionsKind StageExitConditionsCheck(void);
	
	bool CollisionCheckPlayerBullet(void);//衝突判定
	bool CollisionCheckEnemyBullet(void); //敵弾との衝突判定

};

//---------------------------------
// 定数定義
//---------------------------------

//---------------------------------
//他のファイルでも参照が必要な変数のextern宣言
//---------------------------------
extern int nowStageNum;
// テスト用のキーの状態
extern int nowWKeyPress;
extern int prevWKeyPress;
extern int nowLKeyPress;
extern int prevLKeyPress;
extern int nowOKeyPress;
extern int prevOKeyPress;
extern int nowBKeyPress;
extern int prevBKeyPress;



//-------------------------------------------------
// プロトタイプ宣言
//-------------------------------------------------

インクルードファイルを整理。
(GameScene.cpp)

#include <DxLib.h>
#include "main.h"
#include "SceneGame.h"
#include "Player.h"
#include "PlayerBullet.h"
#include "Enemy.h"
#include "EnemyBullet.h"
#include "GameScene.h"

空の関数を作っていく。
(GameScene.cpp)

#include <DxLib.h>
#include "GameScene.h"


//コンストラクタ
GameScene::GameScene(SceneManager* scenem)
{
	sceneM = scenem;
}

//デストラクタ
GameScene::~GameScene(void)
{

}

bool GameScene::SystemInit(void)
{
	return true;
}

void GameScene::GameInit(void)
{

}

//プレイヤーが勝利した時の再初期化処理
void GameScene::SceneGameNextStageInit(void)
{

}

void GameScene::Update(void)
{

}

void GameScene::Draw(void)
{

}

void GameScene::Release(void)
{

}

void GameScene::ExitConditionProc(void)
{

}

Playerクラスを作成していく。(Player.cpp、Player.hのインポート⇒修正)
(Player.h)

#pragma once

#include "StDefine.h"

class Player
{
public:
	// プレイヤー
	const constexpr int PLAYER_WID = 32;		// プレイヤー画像の横サイズ
	const constexpr int PLAYER_HIG = 19;		// プレイヤー画像の縦サイズ
	const constexpr int PLAYER_MOVE_SPEED = 6;	// プレイヤーの左右の移動速度
	const constexpr int PLAYER_PLANE_MAX = 3;	// プレイヤーの最大保有機数

	Player(void);
	~Player(void);

	bool SystemInit(void);	//初期化処理(最初の1回のみ実行)
	void GameInit(void);	//ゲーム起動・再開時に必ず呼び出す関数
	void Update(void);		//更新処理
	void Draw(void);		//描画処理
	bool Release(void);		//解放処理(最後の1回のみ実行)

private:

};

座標用の構造体を宣言。
(StDefine.h)

#pragma once

//------------------
// 列挙型定数
//------------------
//シーンの種類
enum eSceneKind {
	SCENE_KIND_NON = -1,	//ゲーム開始時
	SCENE_KIND_TITLE,		//タイトルシーン
	SCENE_KIND_GAME,		//ゲームシーン
	SCENE_KIND_GAMEOVER,	//ゲームオーバー

	SCENE_KIND_MAX,			//
};

//ゲーム進行状況
enum eStageExitConditionsKind {
	ESTAGE_EXIT_NON = -1,			//戦闘中
	ESTAGE_EXIT_CLEAR,				//条件1:プレイヤーの勝利
	ESTAGE_EXIT_ENEMY_SHOT,			//条件2:敵弾がプレイヤーにヒット
	ESTAGE_EXIT_ENEMY_OCCUPATION,	//条件3:敵が最下段に到達

	ESTAGE_EXIT_KIND_MAX,
};

// 移動方向
enum eEnemyMoveDirection {
	ENEMY_DIR_NON = -1,	//方向設定がない場合
	ENEMY_DIR_RIGHT,	//0 :右方向
	ENEMY_DIR_LEFT,		//1 :左方向
	ENEMY_DIR_DOWN,		//2 :下方向

	ENEMY_DIR_MAX,		//
};

//接触している端の方向
enum eEnemyHitEdgeDir {
	ENEMY_HIT_EDGE_NON = -1,	//どの端にも接触していない
	ENEMY_HIT_EDGE_RIGHT,		//0:右方向
	ENEMY_HIT_EDGE_LEFT,		//1:左方向
	ENEMY_HIT_EDGE_DOWN,		//2:下端に接触

	ENEMY_HIT_EDGE_MAX,
};

//構造体の宣言
struct POSITION {
	int x;		//X座標
	int y;		//Y座標
};

PlayerClassを作成していく。(Player.cpp、Player.hをインポート⇒修正)
(Player.h)

#pragma once

#include "StDefine.h"

class Player
{
public:
	// プレイヤー
	const constexpr int PLAYER_WID = 32;	// プレイヤー画像の横サイズ
	const constexpr int PLAYER_HIG = 19;	// プレイヤー画像の縦サイズ
	const constexpr int PLAYER_MOVE_SPEED = 6;	// プレイヤーの左右の移動速度
	const constexpr int PLAYER_PLANE_MAX = 3;	// プレイヤーの最大保有機数

	Player(void);
	~Player(void);

	bool SystemInit(void);	//初期化処理(最初の1回のみ実行)
	void GameInit(void);	//ゲーム起動・再開時に必ず呼び出す関数
	void Update(void);	//更新処理
	void Draw(void);	//描画処理
	bool Release(void);	//解放処理(最後の1回のみ実行)

private:
	int img;		//プレイヤー画像のハンドル番号を格納する変数
	POSITION pos;		//プレイヤーの座標
	bool aliveFlg;		//プレイヤーの存在フラグ(true:生存、false:撃破)
	int playerStock;	//プレイヤーの残機
};

インクルードファイルの修正と空の関数を準備。
(Player.cpp)

//-----------------------------------------------------------------------------
// インベーダーゲーム
// 氏 名:ゆき
//-----------------------------------------------------------------------------
#include <DxLib.h>
#include"main.h"
#include"Player.h"
#include"Application.h"

Player::Player(void) 
{

}

Player::~Player(void)
{

}

bool Player::SystemInit(void)
{

}

void Player::GameInit(void)
{

}

void Player::Update(void)
{

}

void Player::Draw(void)
{

}

bool Player::Release(void)
{

}

空の関数に中身を記述していく。
(Player.cpp)

Player::Player(void) 
{
	img = -1;
}

Player::~Player(void)
{

}
/*
* Input:なし
* Output:
* true=正常終了 /false=エラー終了
*/
bool Player::SystemInit(void)
{
	// プレイヤー画像の読込み
	img = LoadGraph("image/player.png");
	if (img == -1)return false;

}
/*
プレイヤー情報の初期化処理
Input:なし
Output:なし
*/
void Player::GameInit(void)
{
	pos.x = (Application::WINDOW_WID - PLAYER_WID) / 2;	//画面中央
	pos.y = (Application::WINDOW_HIG - PLAYER_HIG);		//画面下端
	aliveFlg = true;
	playerStock = PLAYER_PLANE_MAX;
}

void Player::Update(void)//PlayerMove()から中身を移動して編集。
{
	// プレイヤーの移動
	if (aliveFlg) {
		//右キーが押されたか
		if (CheckHitKey(KEY_INPUT_RIGHT) == 1) {
			pos.x += PLAYER_MOVE_SPEED; //右に移動
		}
		//左キーが押されたか
		if (CheckHitKey(KEY_INPUT_LEFT) == 1) {
			pos.x -= PLAYER_MOVE_SPEED; //左に移動
		}
		//左端のチェック
		if (pos.x < 0)pos.x = 0;
		//右端のチェック
		if (pos.x > (Application::WINDOW_WID - PLAYER_WID - 1))pos.x = (Application::WINDOW_WID - PLAYER_WID - 1);
	}

}
void Player::Draw(void)//PlayerDraw()から中身を移動。変数を修正
{
	// プレイヤーの描画
	if (aliveFlg) {
		DrawGraph(pos.x, pos.y, img, true);
	}
}

bool Player::Release(void)//PlayerRelease()から中身を移動。変数を修正
{
	if (DeleteGraph(img) == -1)return false;
	return true;
}

Player.cppとPlayer.hの残骸を削除。

PlayerBullet.cpp、PlayerBullet.hをインポートして編集していく。

PlayerBulletClassを宣言してメンバを記載。
(PlayerBullet.h)

#pragma once
#include"StDefine.h"

class SceneManager;
class Player;

class PlayerBullet
{
public:
	constexpr int PLAYER_BULLET_WID = 6;	// プレイヤー弾の画像の横サイズ
	constexpr int PLAYER_BULLET_HIG = 30;	// プレイヤー弾の画像の縦サイズ
	constexpr int PLAYER_BULLET_MOVE = 12;	// プレイヤー弾の移動速度
	constexpr int BOMB_MAX = 4;		// 押し戻しの最大回数

	PlayerBullet(SceneManager* scm, Player* pl); //Player型のインスタンスのポインタ
	~PlayerBullet(void);

	bool BulletSysInit(void);
	void BulletInit(void);
	void BulletShot(void);
	void BulletMove(void);
	void BulletDraw(void);
	void Bomb(void);
	bool BulletRelease(void);

private:
	SceneManager* csmInst;		//SceneManagerクラスのインスタンスのポインタ
	Player* pInst;			//Playerクラスのインスタンスのポインタ

	int img;		//プレイヤー弾の画像ハンドル番号
	POSITION pos;		//プレイヤー弾の座標
	bool aliveFlg;		//プレイヤー弾の存在フラグ(true:表示、false:非表示)
}

//-----------------
// 定数定義
//-----------------
// プレイヤー弾

//----------------------------------------------
//他のファイルでも参照が必要な変数の extern宣言
//----------------------------------------------
extern int playerBulletPosX;		// プレイヤー弾のX座標
extern int playerBulletPosY;		// プレイヤー弾のY座標
extern bool playerBulletFlg;		// プレイヤー弾の発射状態管理用フラグ(true:表示、false:非表示)
extern int bombStock;				//押し戻しの使用回数

//---------------------------------------
// プロトタイプ宣言
//---------------------------------------

インクルードファイルを修正して、空の関数を準備。
(PlayerBullet.cpp)

#include <DxLib.h>
#include"main.h"
#include"PlayerBullet.h"
#include"Player.h"
#include"Enemy.h"
#include"SceneManager.h"

・・・しようと思ったが時間切れ。本日はここまで。

コメント

タイトルとURLをコピーしました