続きになります。
コード:
//PlayerObj.cpp
#include "PlayerObject.h"
CPlayerObj::CPlayerObj()
{
//PLAYER_HAVE_ITEM(P_Item) を NULL初期化
memset(&P_Item, NULL, sizeof(PLAYER_HAVE_ITEM));
LoadDivGraph("Player.png", 12, 4, 3, 73, 73, Playerimge[0]);
}
CPlayerObj::~CPlayerObj()
{
}
void CPlayerObj::PlayerMainAction()
{
//表示
DrawRotaGraphF(320, 240, 1.0f, 0.0f, Playerimge[0][0], TRUE);
}
コード:
//ItemObj.cpp
#include "ItemObject.h"
//コンスト
CItemObj::CItemObj()
{
LoadDivGraph("Player.png", 12, 4, 3, 73, 73, Itemimge[0]);
}
//デストラ
CItemObj::~CItemObj(){}
void CItemObj::ItemGetInitialize(CPlayerObj *PlayerObj)
{
//----------アイテム情報初期化----------
for(int i = 0 ; i < HAVE_MAX ; i++)
{
ItemDataInitialize(PlayerObj, i);
}
//----------アイテム取得----------
for(int i = 0 ; i < 12 ; i++)
{
AddItem(PlayerObj, i);
}
//----------装備アイテム取得----------
ItemEquipment(PlayerObj, 0, 0); //装備欄[0] に 所持アイテム[0]
ItemEquipment(PlayerObj, 1, 1); //装備欄[1] に 所持アイテム[1]
ItemEquipment(PlayerObj, 2, 2); //装備欄[2] に 所持アイテム[2]
ItemEquipment(PlayerObj, 3, 3); //装備欄[3] に 所持アイテム[3]
//所持アイテムの表示位置設定
for(int i = 0 ; i < HAVE_MAX ; i++)
{
ItemImgeRight[i] = 500;
ItemFontRight[i] = 550;
}
//装備アイテムの表示位置設定
for(int i = 0 ; i < Equipment_MAX ; i++)
{
ItemImgeLeft[i] = 50;
ItemFontLeft[i] = 100;
}
}
//----------アイテム装備関数----------
int CItemObj::ItemEquipment(CPlayerObj *PlayerObj, int PlayerEquipBox, int PlayerItemBox)
{
//P_Equip[i].ItemNo が "65535" なら 所持アイテム[i]からデータをコピーして、所持アイテム[i].Have--;
if(PlayerObj->P_Item.P_Equip[PlayerEquipBox].ItemNo == 65535)
{
PlayerObj->P_Item.P_Equip[PlayerEquipBox].ItemNo = PlayerObj->P_Item.P_Data[PlayerItemBox].ItemNo;
PlayerObj->P_Item.P_Equip[PlayerEquipBox].ItemImage = PlayerObj->P_Item.P_Data[PlayerItemBox].ItemImage;
PlayerObj->P_Item.P_Equip[PlayerEquipBox].ItemName = PlayerObj->P_Item.P_Data[PlayerItemBox].ItemName;
PlayerObj->P_Item.P_Equip[PlayerEquipBox].ItemType = PlayerObj->P_Item.P_Data[PlayerItemBox].ItemType;
PlayerObj->P_Item.P_Data[PlayerItemBox].Have--;
}
//P_Equip[i].ItemNo が "65535" 以外なら P_Equip[i]の装備アイテムにアイテム入手処理を行い ( 所持アイテムに戻し )
//所持アイテム[i]からデータをコピーして、所持アイテム[i].Have--;
else if(PlayerObj->P_Item.P_Equip[PlayerEquipBox].ItemNo != 65535)
{
AddItem(PlayerObj, PlayerObj->P_Item.P_Equip[PlayerEquipBox].ItemNo);
PlayerObj->P_Item.P_Equip[PlayerEquipBox].ItemNo = PlayerObj->P_Item.P_Data[PlayerItemBox].ItemNo;
PlayerObj->P_Item.P_Equip[PlayerEquipBox].ItemImage = PlayerObj->P_Item.P_Data[PlayerItemBox].ItemImage;
PlayerObj->P_Item.P_Equip[PlayerEquipBox].ItemName = PlayerObj->P_Item.P_Data[PlayerItemBox].ItemName;
PlayerObj->P_Item.P_Equip[PlayerEquipBox].ItemType = PlayerObj->P_Item.P_Data[PlayerItemBox].ItemType;
PlayerObj->P_Item.P_Data[PlayerItemBox].Have--;
}
return true;
}
//----------アイテム情報コピー関数----------
void CItemObj::ItemDataGet(CPlayerObj *PlayerObj, int PlayerItemBox, int GetItem)
{
//ItemData.h の RPG_ITEM_DATA DataItem[] から P_Data[i] へ データをコピー
PlayerObj->P_Item.P_Data[PlayerItemBox].ItemNo = DataItem[GetItem].ItemNo;
PlayerObj->P_Item.P_Data[PlayerItemBox].ItemImage = DataItem[GetItem].ItemImage;
PlayerObj->P_Item.P_Data[PlayerItemBox].ItemName = DataItem[GetItem].ItemName;
PlayerObj->P_Item.P_Data[PlayerItemBox].ItemType = DataItem[GetItem].ItemType;
PlayerObj->P_Item.P_Data[PlayerItemBox].Have += DataItem[GetItem].Have;
}
//----------アイテム情報初期化関数----------
void CItemObj::ItemDataInitialize(CPlayerObj *PlayerObj, int PlayerItemBox)
{
//P_Data[i] の データを指定数に設定 ( 初期化として考えています )
PlayerObj->P_Item.P_Data[PlayerItemBox].ItemNo = 65535;
PlayerObj->P_Item.P_Data[PlayerItemBox].ItemImage = -1;
PlayerObj->P_Item.P_Data[PlayerItemBox].ItemName = NULL;
PlayerObj->P_Item.P_Data[PlayerItemBox].ItemType = -1;
PlayerObj->P_Item.P_Data[PlayerItemBox].Have = 0;
}
//----------アイテム取得/複数所持関数----------
int CItemObj::AddItem(CPlayerObj *PlayerObj, int GetItem)
{
int CopyGetItem = GetItem;
//現在の ( PlayerObj->P_Item.HaveItem + 1 ) までループ
//( 現在の所持アイテム数 と 一つ下 を調べる)
for(int i = 0 ; i < (PlayerObj->P_Item.HaveItem + 1) ; i++)
{
//PlayerObj->P_Item.P_Data[i].ItemNo が CopyGetItem と同じのを発見なら
if(PlayerObj->P_Item.P_Data[i].ItemNo == CopyGetItem)
{
//PlayerObj->P_Item.P_Data[i].Have に ++
PlayerObj->P_Item.P_Data[i].Have++;
return true;
}
//そうでないなら新規追加
else if(PlayerObj->P_Item.P_Data[i].ItemNo == 65535)
{
ItemDataGet(PlayerObj, i, GetItem);
//P_Item.HaveItem++ 後、その場所を初期化
PlayerObj->P_Item.HaveItem++;
ItemDataInitialize(PlayerObj, PlayerObj->P_Item.HaveItem);
return true;
}
}
return false;
}
//----------アイテムメイン処理----------
void CItemObj::ItemMainAction(CPlayerObj *PlayerObj)
{
//( PlayerObj->P_Item.HaveItem + 1 ) までループ
for(int i = 0 ; i < (PlayerObj->P_Item.HaveItem + 1) ; i++)
{
//P_Data[i].ItemNo が "65535" なら P_Data[i].ItemName を "なし"
if(PlayerObj->P_Item.P_Data[i].ItemNo == 65535)
{
PlayerObj->P_Item.P_Data[i].ItemName = "なし";
//break;
}
//P_Data[i].ItemImage の 数値でアイテムイメージの変更
DrawRotaGraphF(ItemImgeRight[i], 50 + (i * 32), 1.0f, 0.0f, Itemimge[0][PlayerObj->P_Item.P_Data[i].ItemImage], TRUE);
//P_Data[i].ItemImage の 数値でアイテムネームの変更
DrawFormatString(ItemFontRight[i], 50 + (i * 32), GetColor(255, 255, 255), "%s * %d", PlayerObj->P_Item.P_Data[i].ItemName, PlayerObj->P_Item.P_Data[i].Have);
}
for(int i = 0 ; i < Equipment_MAX ; i++)
{
//P_Equip[i].ItemNo が "65535" なら P_Equip[i].ItemName を "なし"
if(PlayerObj->P_Item.P_Equip[i].ItemNo == 65535)
{
PlayerObj->P_Item.P_Equip[i].ItemName = "なし";
}
//P_Equip[i].ItemImage の 数値でアイテムイメージの変更
DrawRotaGraphF(ItemImgeLeft[i], 50 + (i * 32), 1.0f, 0.0f, Itemimge[0][PlayerObj->P_Item.P_Equip[i].ItemImage], TRUE);
//P_Equip[i].ItemImage の 数値でアイテムネームの変更
DrawFormatString(ItemFontLeft[i], 50 + (i * 32), GetColor(255, 255, 255), "%s", PlayerObj->P_Item.P_Equip[i].ItemName);
}
//P_Item.HaveItem数の表示
DrawFormatString(265, 0, GetColor(255, 0, 255), "HaveItem %d", PlayerObj->P_Item.HaveItem);
}
//セーブ関数
void CItemObj::DataSave(CPlayerObj *PlayerObj)
{
FILE *fp;
fopen_s(&fp, "Data.txt", "wb");
if(fp == NULL)
return;
fwrite(&PlayerObj->P_Item, sizeof(PLAYER_HAVE_ITEM), 1, fp);
fclose(fp);
}
//ロード関数
void CItemObj::DataLoad(CPlayerObj *PlayerObj)
{
FILE *fp;
fopen_s(&fp, "Data.txt", "rb");
fread(&PlayerObj->P_Item, sizeof(PLAYER_HAVE_ITEM), 1, fp);
fclose(fp);
}
コード:
//ItemObj.h
#ifndef ITEMOBJECT_H_
#define ITEMOBJECT_H_
#include "WinMain.h"
#include "ItemData.h"
#include "PlayerObject.h"
class CItemObj
{
private:
int Itemimge[1][12];
int ItemFontRight[HAVE_MAX], ItemImgeRight[HAVE_MAX], ItemFontLeft[Equipment_MAX], ItemImgeLeft[Equipment_MAX];
public:
CItemObj();
~CItemObj();
void ItemGetInitialize(CPlayerObj *PlayerObj);
int ItemEquipment(CPlayerObj *PlayerObj, int PlayerEquipBox, int PlayerItemBox);
void ItemDataGet(CPlayerObj *PlayerObj, int PlayerItemBox, int GetItem);
void ItemDataInitialize(CPlayerObj *PlayerObj, int PlayerItemBox);
int AddItem(CPlayerObj *PlayerObj, int GetItem);
void ItemMainAction(CPlayerObj *PlayerObj);
void GetItemName(CPlayerObj *PlayerObj, int ItemNo);
void DataSave(CPlayerObj *PlayerObj);
void DataLoad(CPlayerObj *PlayerObj);
};
#endif
コード:
//ItemData.h
#ifndef ITEMDATA_H_
#define ITEMDATA_H_
#include "StructBox.h"
#define NOT_ITEM 65535
#define ITEM_NORMAL 1
#define ITEM_EQUIP 2
#define ITEM_EVENT 3
static const RPG_ITEM_DATA DataItem[] =
{
//ItemNo, ItemImg, ItemName, ItemType, GetHave
{0, 6, "草", NOT_ITEM, 5,},
{1, 0, "薬草", ITEM_NORMAL, 5,},
{2, 3, "回復薬", ITEM_NORMAL, 5,},
{3, 4, "剣", ITEM_EQUIP, 5,},
{4, 7, "盾", ITEM_EQUIP, 5,},
{5, 8, "宝石", ITEM_EQUIP, 5,},
{6, 6, "海苔", ITEM_EQUIP, 5,},
{7, 0, "くるみ", ITEM_EQUIP, 5,},
{8, 3, "みかん", ITEM_NORMAL, 5,},
{9, 4, "箱", ITEM_NORMAL, 5,},
{10, 7, "敷物", ITEM_NORMAL, 5,},
{11, 8, "玉石", ITEM_NORMAL, 5,}
};
#endif
コード:
//struct.h
#ifndef STRUCTBOX_H_
#define STRUCTBOX_H_
#define Equipment_MAX 4
#define HAVE_MAX 15
struct RPG_ITEM_DATA
{
int ItemNo;
int ItemImage;
char *ItemName;
int ItemType;
int Have;
};
struct PLAYER_HAVE_ITEM
{
int HaveItem;
RPG_ITEM_DATA P_Data[HAVE_MAX];
RPG_ITEM_DATA P_Equip[Equipment_MAX];
};
#endif
以上です。
どこがおかしいのか御指導お願いします。