#include enum { JOB_YUUSHA, JOB_SENSHI, JOB_MAHOUTSUKAI, JOB_SOURYO }; struct Human { int HP; int HP_MAX; int MP; int MP_MAX; int job; }; void kaifuku(Human* man, int gain) { switch (man->job) { case JOB_YUUSHA: man->HP+=gain*1.5; man->MP+=gain*1.5; //最大値を超えないように飽和処理. man->HP = (man->HPHP_MAX)?man->HP:man->HP; man->MP = (man->MPMP_MAX)?man->MP:man->MP; break; case JOB_SENSHI: man->HP+=gain*2.0; man->MP+=gain*0.5; //最大値を超えないように飽和処理. man->HP = (man->HPHP_MAX)?man->HP:man->HP; man->MP = (man->MPMP_MAX)?man->MP:man->MP; break; case JOB_MAHOUTSUKAI: man->HP+=gain*0.5; man->MP+=gain*2.0; //最大値を超えないように飽和処理. man->HP = (man->HPHP_MAX)?man->HP:man->HP; man->MP = (man->MPMP_MAX)?man->MP:man->MP; break; case JOB_SOURYO: man->HP+=gain*0.8; man->MP+=gain*1.8; //最大値を超えないように飽和処理. man->HP = (man->HPHP_MAX)?man->HP:man->HP; man->MP = (man->MPMP_MAX)?man->MP:man->MP; break; default: man->HP+=gain; man->MP+=gain; //最大値を超えないように飽和処理. man->HP = (man->HPHP_MAX)?man->HP:man->HP; man->MP = (man->MPMP_MAX)?man->MP:man->MP; break; } } void showStatus(Human* man) { switch (man->job) { case JOB_YUUSHA: printf("Job YUUSHA: "); break; case JOB_SENSHI: printf("Job SENSHI: "); break; case JOB_MAHOUTSUKAI: printf("Job MAHOUTSUKAI: "); break; case JOB_SOURYO: printf("Job SOURYO: "); break; default: printf("Job NEET: "); break; } printf("HP/MAXHP %d/%d MP/MAXMP %d/%d\n", man->HP,man->HP_MAX, man->MP,man->MP_MAX); } class CHuman { public: int HP; int HP_MAX; int MP; int MP_MAX; virtual void kaifuku(int gain)=0; CHuman(int hp, int hp_max, int mp, int mp_max) { HP=hp; HP_MAX=hp_max; MP=mp; MP_MAX=mp_max; } void showshowStatus() { printf("HP/MAXHP %d/%d MP/MAXMP %d/%d\n", HP, HP_MAX, MP, MP_MAX); } }; class CYuusha :public CHuman { public: //子クラスから親クラスのコンストラクタを呼ぶ CYuusha(int hp, int hp_max, int mp, int mp_max) : CHuman(hp, hp_max, mp, mp_max){;} void kaifuku(int gain) { HP+=gain*1.5; MP+=gain*1.5; //最大値を超えないように飽和処理. HP = (HPkaifuku(gain); } }; void struct_example() { int base_gain = 10; Human yuusha = {10, 100, 20, 100, JOB_YUUSHA}; Human senshi = {10, 100, 20, 100, JOB_SENSHI}; Human souryo = {10, 100, 20, 100, JOB_MAHOUTSUKAI}; Human mahoutsukai = {10, 100, 20, 100, JOB_SOURYO}; showStatus(&yuusha); showStatus(&senshi); showStatus(&mahoutsukai); showStatus(&souryo); printf("Kaifuku\n"); kaifuku(&yuusha, base_gain); kaifuku(&senshi, base_gain); kaifuku(&mahoutsukai, base_gain); kaifuku(&souryo, base_gain); showStatus(&yuusha); showStatus(&senshi); showStatus(&mahoutsukai); showStatus(&souryo); } void class_example() { int base_gain = 10; CYuusha cyuusha=CYuusha(10, 100, 20, 100); CSenshi csenshi=CSenshi(10, 100, 20, 100); CYadoya yadoya(base_gain); yadoya.kaifuku(&cyuusha); yadoya.kaifuku(&csenshi); cyuusha.showshowStatus(); csenshi.showshowStatus(); } int main() { struct_example(); class_example(); return 0; }