맨 먼저 프로그래밍 초보자라고 말하고 싶습니다. 내가 궁금해하는 것에 대해 구체적으로 조언을 구하지 못했습니다.(C++) OOP - 클래스로 초보자 화하기
저는 여러 권의 책을 통해 C++을 배우고 있으며, 제 자신의 작은 아이디어를 생각하고 자신의 능력을 최대한 발휘하여 배우는 것을 사용하고 있습니다. 내가 생각한 한 가지는 분지 선택이 가능한 짧은 텍스트 기반 RPG입니다. 이 RPG에서는 캐릭터를 만들 때 선택할 수있는 여러 종족과 직업이 있습니다. 이전 이벤트 (또는 캐릭터의 속성)에 의해 영향을받을 수있는 여러 이벤트로 구성됩니다. 예를 들어, 첫 번째 이벤트에서 옵션 3을 선택하면 두 번째 이벤트에서 추가 옵션의 잠금을 해제 할 수 있습니다. 또는 캐릭터가 X 인 경우 다른 사람이 가지고있는 옵션이 누락되었을 수 있습니다.
학습을 시작한 후 불과 며칠 만에이 이벤트가 시작되었지만 버그가 없었습니다 (코드는 매우 복잡했습니다). 이제는 객체 지향 프로그래밍에 착수 했으므로 클래스를 사용하여이 프로그램을 다시 수행하기로 결정했습니다. 지금까지 코딩 한 내용은 인종, 직업, 성별 등과 같은 데이터 멤버뿐만 아니라이 모든 것을 가져오고 설정하는 멤버 함수 및 생성을 초기화하는 생성자 (예 : 이 게시물의 끝에 전체 수업을 추가하여이를 검토하고 결함을 지적하거나 개선 할 수있는 방법을 지적하십시오.) 주 함수에서 유일한 것은 charCreate 함수를 호출하는 것입니다.
기본적으로 여기서부터 정확히 어디로 가야할 지 모르겠습니다. 나는 이것에 순전히 객체 지향적 인 접근 방식을 원한다. 다른 이벤트 클래스를 만들어야합니까? 이벤트가 Characters 클래스에 속해야합니까? OOP 방법을 사용하여 분기를 유도하려면 어떻게해야합니까?
나는이 질문의 핵심은 올바른 길로 나를 설정하고 학습자로서 성장하는 데 도움이되는 가치있는 조언을 제공 할 수있는 경험이있는 사람들로부터 조언을 얻는 것이다.
감사
Character.H
#ifndef CHARACTER_H
#define CHARACTER_H
#include <string>
using namespace std;
class Character
{
public: //these are fairly self explanatory... set/get functions for the data members
Character();
void charCreate();
void setName(string);
void setGender(int);
void setRace(int);
void setProf(int);
string getName();
string getGender();
string getRace();
string getProf();
private:
string charName; //character name
string charGender; //character gender
string charRace; //character race
string charProf; //character profession
int charGold = 50; //initial gold amount
int charMana; //this is only relevant for wizards, doesn't matter for other professions
string profWep; //profession-exclusive weapons
};
#endif // CHARACTER_H
Character.cpp
#include "Character.h"
#include <iostream>
#include <string>
using namespace std;
Character::Character()
{
Character::charCreate(); //constructor initializes the character creation function below
}
void Character::charCreate(){
string name;
bool gender;
int race;
int prof;
cout << "\n\n\n\nFirst, what is your name? (23 characters max) ";
getline(cin,name);
setName(name);
cout << "\n\nAre you male or female? (0 for female, 1 for male)";
cin >> gender;
while (gender > 1 || gender < 0){
cout << "\n\nInvalid. Please select a valid option.";
cin >> gender;
}
setGender(gender);
cout << "\n\nSelect your race: \n\n"
"1 - Human\n"
"2 - Dwarf\n"
"3 - Elf\n\n";
cin >> race;
while (race > 3 || race < 1){
cout << "\n\nInvalid. Please select a valid option.";
cin >> race;
}
setRace(race);
cout << "\n\nFinally, select your class: \n\n"
"1 - Warrior\n"
"2 - Thief\n"
"3 - Wizard\n\n";
cin >> prof;
while (prof > 3 || prof < 1){
cout << "\n\nInvalid. Please select a valid option.";
cin >> prof;
}
setProf(prof);
}
void Character::setName(string name){
if (name.length() <= 23){
charName = name;
}
else{
charName = name.substr(0,23);
cout << "\nName too long; limiting to 23 characters.\n\n"
"Your name is " << charName << ".";
}
}
void Character::setGender(int gender){
if(gender == 1){
charGender = "male" ;
}
else if (gender == 0){
charGender = "female";
}
}
void Character::setRace(int race){
if (race == 1){
charRace = "human";
}
else if (race == 2){
charRace = "dwarf";
}
else if (race == 3){
charRace = "elf";
}
}
void Character::setProf(int prof){
if (prof == 1){
charProf = "warrior";
profWep = "sword & shield";
}
else if (prof == 2){
charProf = "thief";
profWep = "dagger";
}
else if (prof == 3){
charProf = "wizard";
profWep = "staff";
}
}
string Character::getName(){
return charName;
}
string Character::getGender(){
return charGender;
}
string Character::getRace(){
return charRace;
}
string Character::getProf(){
return charProf;
return profWep; //the weapon is linked to the class, so I decided
//to have them both returned together
}
모든 긴 텍스트, 변명 및 샘플에서 질문을 알아낼 수 없습니다! 포인트를 가지고, 당신이 가지고있는 것은 적어도이 포럼을위한 것이 아닙니다. ... –
더 깊은 표정 (내 망막이 여전히 깜박입니다) 나는 당신이 [class factory patterns] (http : //en.wikipedia.org/wiki/Factory_method_pattern) 및 OOP [디자인 패턴] (http://en.wikipedia.org/wiki/Design_Patterns)을 참조하십시오. 이것은 도움이 될 수 있습니다 ... –
여기에서 원하는 것을 원하십니까? – ikis