You are on page 1of 4

// � Z� � � ө� �

class WeaponStore
{
public:
virtual void Show() = 0; // �Z���H���i��
virtual Weapon *CreatWeapon(int flag) = 0; // �Ы‫ت‬Z��
// ��R�c��ơA����R�c�@��A�n�|�@�b
virtual ~WeaponStore() {}
};

// �Ԥh�Z���ө��
class WarriorWeaponStore : public WeaponStore
{
public:
void Show()
{
cout << "1.�ջȥ��C 500��� +70����O" << endl;
cout << "2.���C 1000��� +130����O" << endl;
cout << "3.�ժ�C 1800��� +220����O" << endl;
cout << "4.�p�‫��ۥ‬C 3000��� +350����O" << endl;
}
Weapon *CreatWeapon(int flag)
{
switch (flag)
{
case 1:
return new WarriorWeapon1();
break;
case 2:
return new WarriorWeapon2();
break;
case 3:
return new WarriorWeapon3();
break;
case 4:
return new WarriorWeapon4();
break;
}
}
~WarriorWeaponStore() {}
};

// �Z�J�Z���ө��
class TankWeaponStore : public WeaponStore
{
public:
void Show()
{
cout << "1.�ջȬި� 400��� +50����O" << endl;
cout << "2.���ި� 800��� +100����O" << endl;
cout << "3.�ժ�ި� 1500��� +180����O" << endl;
cout << "4.�p�۬ި� 2500��� +300����O" << endl;
}
Weapon *CreatWeapon(int flag)
{
switch (flag)
{
case 1:
return new TankWeapon1();
break;
case 2:
return new TankWeapon2();
break;
case 3:
return new TankWeapon3();
break;
case 4:
return new TankWeapon4();
break;
}
}
~TankWeaponStore() {}
};

// ��ȪZ���ө��
class AssassinWeaponStore : public WeaponStore
{
public:
void Show()
{
cout << "1.�ջȪZ�h�M 450��� +60����O" << endl;
cout << "2.���Z�h�M 900��� +120����O" << endl;
cout << "3.�ժ�Z�h�M 1650��� +200����O" << endl;
cout << "4.�p�۪Z�h�M 2750��� +320����O" << endl;
}
Weapon *CreatWeapon(int flag)
{
switch (flag)
{
case 1:
return new AssassinWeapon1();
break;
case 2:
return new AssassinWeapon2();
break;
case 3:
return new AssassinWeapon3();
break;
case 4:
return new AssassinWeapon4();
break;
}
}
~AssassinWeaponStore() {}
};

// ���Ұө��
class ArmorStore
{
public:
virtual void Show() = 0; // ���ҫH���i��
virtual Armor *CreatArmor(int flag) = 0; // �Ы‫���ز‬
virtual ~ArmorStore() {}
};

// �Ԥh���Ұө��
class WarriorArmorStore : public ArmorStore
{
public:
void Show()
{
cout << "1.�ջ��Z�� 300��� +30���m�O" << endl;
cout << "2.����Z�� 600��� +60���m�O" << endl;
cout << "3.�ժ��Z�� 1200��� +100���m�O" << endl;
cout << "4.�p���Z�� 2000��� +200���m�O" << endl;
}
Armor *CreatArmor(int flag)
{
switch (flag)
{
case 1:
return new WarriorArmor1();
break;
case 2:
return new WarriorArmor2();
break;
case 3:
return new WarriorArmor3();
break;
case 4:
return new WarriorArmor4();
break;
}
}
~WarriorArmorStore() {}
};

// �Z�J���Ұө��
class TankArmorStore : public ArmorStore
{
public:
void Show()
{
cout << "1.�ջȶW�q�޵P 400��� +40���m�O" << endl;
cout << "2.���W�q�޵P 800��� +80���m�O" << endl;
cout << "3.�ժ�W�q�޵P 1500��� +160���m�O" << endl;
cout << "4.�p�۶ W�q�޵P 2500��� +250���m�O" << endl;
}
Armor *CreatArmor(int flag)
{
switch (flag)
{
case 1:
return new TankArmor1();
break;
case 2:
return new TankArmor2();
break;
case 3:
return new TankArmor3();
break;
case 4:
return new TankArmor4();
break;
}
}
~TankArmorStore() {}
};

// ��Ȳ��Ұө��
class AssassinArmorStore : public ArmorStore
{
public:
void Show()
{
cout << "1.�ջȯS���Z�� 350��� +35���m�O" << endl;
cout << "2.���S���Z�� 700��� +70���m�O" << endl;
cout << "3.�ժ�S���Z�� 1350��� +130���m�O" << endl;
cout << "4.�p�‫ۯ‬S���Z�� 2300��� +220���m�O" << endl;
}
Armor *CreatArmor(int flag)
{
switch (flag)
{
case 1:
return new AssassinArmor1();
break;
case 2:
return new AssassinArmor2();
break;
case 3:
return new AssassinArmor3();
break;
case 4:
return new AssassinArmor4();
break;
}
}
~AssassinArmorStore() {}
};

// �޲z�ө��
class StoreManager
{
public:
WeaponStore *CreatWeaponStore(string name)
{
if (name == "�Ԥh")
return new WarriorWeaponStore();
if (name == "�Z�J")
return new TankWeaponStore();
if (name == "���")
return new AssassinWeaponStore();
}
ArmorStore *CreatArmorStore(string name)
{
if (name == "�Ԥh")
return new WarriorArmorStore();
if (name == "�Z�J")
return new TankArmorStore();
if (name == "���")
return new AssassinArmorStore();
}
};

You might also like