반응형
#include <string.h>
#include <stdio.h>
#include <stdlib.h>
#include <vector>
#include <algorithm>
#pragma warning (disable : 4996)
using namespace std;
class ItemInfo
{
public :
char m_Name[128];
int m_Level;
int m_Cost;
float m_AttRate; //공격력 상승률 0.0f~ 1.0f
public:
void PrintInfo()
{
printf("아이템이름(%s) 레벨(%d) 가격(%d) 공격상승률(%.2f)\n",m_Name, m_Level, m_Cost, m_AttRate);
}
};
void LoadItemList(vector<ItemInfo>* a_ItemList)
{
//파일로딩
FILE* a_rFP = fopen("MySaveItem.txt", "rt");
if (a_rFP != NULL)
{
int num =0;
fscanf(a_rFP, "%d", &num);
for (int i = 0; i < num; i++)
{
ItemInfo TempList;
fscanf(a_rFP, "%s %d %d %f", TempList.m_Name, &TempList.m_Level, &TempList.m_Cost, &TempList.m_AttRate);
a_ItemList->push_back(TempList);
}
fclose(a_rFP);
printf("파일을 정상적으로 로딩했습니다.\n");
}
else
printf("파일이 존재하지 않거나 파일 읽기를 실패했습니다.\n");
}
void SaveItemList(vector<ItemInfo>* a_ItemList)
{
//파일저장
FILE* a_wFP = fopen("MySaveItem.txt", "wt");
if (a_wFP != NULL)
{
fprintf(a_wFP, "%d", a_ItemList->size());
for (int i = 0; i < a_ItemList->size(); i++)
{
fprintf(a_wFP, "%s %d %d %f\n", (*a_ItemList)[i].m_Name, (*a_ItemList)[i].m_Level, (*a_ItemList)[i].m_Cost, (*a_ItemList)[i].m_AttRate);
}
fclose(a_wFP);
printf("파일이 정상적으로 저장 되었습니다.\n");
}
else
printf("파일 저장이 실패 하였습니다.\n");
}
void PrintList(vector<ItemInfo>* a_ItemList)
{
printf("<아이템 리스트>\n");
for (int i = 0; i < a_ItemList->size(); i++)
{
printf("%d번",i+1);
(*a_ItemList)[i].PrintInfo();
}
}
void NewItemAdd(vector<ItemInfo>* a_ItemList)
{
ItemInfo TempList;
printf("%d번 아이템의 이름을 입력하세요 : ", a_ItemList->size() + 1);
scanf("%s", TempList.m_Name);
getchar();
printf("레벨을 입력하세요 : ");
scanf("%d", &TempList.m_Level);
getchar();
printf("가격을 입력하세요 : ");
scanf("%d", &TempList.m_Cost);
getchar();
printf("공격 상승률을 입력하세요 : ");
scanf("%f", &TempList.m_AttRate);
getchar();
a_ItemList->push_back(TempList);
SaveItemList(a_ItemList);
PrintList(a_ItemList);
}
bool MySort(const ItemInfo& a, const ItemInfo& b)
{
return a.m_Level > b.m_Level;
}
void SortList(vector<ItemInfo>* a_ItemList)
{
sort(a_ItemList->begin(), a_ItemList->end(), MySort);
PrintList(a_ItemList);
}
void DeleteItem(vector<ItemInfo>* a_ItemList)
{
PrintList(a_ItemList);
printf("삭제할 아이템 번호를 선택해 주세요 :");
int a_Sel = 0;
scanf_s("%d", &a_Sel);
getchar();
a_Sel--;
(*a_ItemList).erase((*a_ItemList).begin() + a_Sel);
SaveItemList(a_ItemList);
PrintList(a_ItemList);
}
void main()
{
vector<ItemInfo> m_ItemList;
LoadItemList(&m_ItemList);
while (true)
{
system("cls");
printf("1.아이템 추가 2.아이템 리스트 보기(레벨순) 3.아이템 삭제 99.프로그램 종료 :");
int a_Sel = 0;
scanf("%d", &a_Sel);
getchar();
if (a_Sel < 1 || a_Sel >3)
{
if (a_Sel == 99)
break;
continue;
system("cls");
}
if (a_Sel == 1)//추가
{
NewItemAdd(&m_ItemList);
}//추가
else if (a_Sel == 2)//리스트
{
SortList(&m_ItemList);
}//리스트
else if (a_Sel == 3)//삭제
{
DeleteItem(&m_ItemList);
}//삭제
getchar();
system("cls");
}//while (true)
}
반응형
'C++' 카테고리의 다른 글
[c++] STL Container의 종류 (0) | 2021.08.18 |
---|---|
[c++] STL 이란? (0) | 2021.08.18 |
[c++] 스택(Stack)과 힙(Heap) (0) | 2021.08.16 |
[c++] 포인터와 레퍼런스 (0) | 2021.08.09 |
[c++]게임 인벤토리 (0) | 2020.04.02 |