首先我想說的是我是編程的初學者。我無法找到有關我想知道的具體建議。(C++)面向對象的分類 - 初學者的困境
我正在通過幾本書學習C++,並且總是通過提出我自己的小創意並將它們編碼以盡我所能地使用我正在學習的內容。我想到的一個這樣的事情是一個基於短文本的RPG,它具有分支選擇。在這個角色扮演遊戲中,你有幾個不同的種族和職業可供選擇,當你創建你的角色。它被組織成幾個事件,這些事件可能受到你以前的行爲(甚至是你的角色的屬性)的影響 - 例如,如果你在第一個事件中選擇了選項3,那麼你可以在第二個事件中解鎖一個額外的選項。或者如果你的角色是X,你可能會錯過其他人的選擇。
我最初是在我開始學習和編碼4個這樣的事件之後幾天纔開始的,它相當沒有錯誤(但代碼非常混亂)。現在我正在進入面向對象編程,我決定用類來重做這個程序。我到目前爲止編寫的是一個「Character」類,它包含數據成員,如種族,職業,性別等等,以及獲取和設置所有這些成員函數的成員函數,以及初始化創建的構造函數(I在這篇文章的末尾會添加整個班級,這樣你就可以檢查這些內容,並指出任何缺陷或如何改進)。我在主函數中唯一的事情就是調用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
}
無法找出所有冗長的文字,藉口和示例的問題!有一點,你有一個不是一個,至少不是這個論壇... –
有更深入的瞭解(我的視網膜仍然閃爍)我想你應該得到一些關於[類工廠模式]的知識(http: //en.wikipedia.org/wiki/Factory_method_pattern)和OOP [設計模式](http://en.wikipedia.org/wiki/Design_Patterns)。可能是這個幫助... –
你想在這裏? – ikis