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"
・・・しようと思ったが時間切れ。本日はここまで。
コメント