Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 28.05.2012, 11:54   #1
PitMagnum
Новичок
Джуниор
 
Регистрация: 28.05.2012
Сообщений: 1
По умолчанию C++ Абстрактная фабрика

Здравствуйте, у меня проблема следующего рода. Есть абстрактный класс Player. Есть два класса наследника Human и Computer, предназначенные для абсолютно дурацкой игры "3 пальца" (но это не важно)

Код:
class Player{
private:
	int fing;  // Количество пальцев
	int score; // Очки
public:
	Player(){
		fing = 0;       // Конструктор
		score = 0;
	}
	~Player(){
		fing = 0;       // Деструктор
		score = 0;
	}

	void win(int y)	{score += y;}	//Прибавить счет
	int  score()	{return score;}	//Выдать счет
	int  get_fing()	{return fing;}	//Выдать палец

	virtual void set_fing() = 0;	//Присвоить палец
	
};


class Computer: public Player{
public:
	virtual void set_fing(){	//Присвоить палец
		fing = rand()%3+1;
		printf("Computer has shown %d fingers\n", fing);
		sleep(1);
	}
	
};

class Human: public Player{
public:
	virtual void set_fing(){	//Присвоить палец
		printf("Enter a number from 1 to 3: ");

		int t = 1;
		while(t){
			scanf("%d\n", &fing);
			if (fing<1 || fing>3){
				printf("Incorrect number, please try again\n");
			}
			else t = 0;
		}
		printf("Player has shown   %d fingers\n", fing);
		sleep(1);
	}
};
В самом начале этой игры консоль должна опоросить пользователя, в какой режим игры он выбирает: Human vs Computer, Computer vs Computer или Human vs Human. Если режим выбран Human vs Computer, то также требуется спросить пользователя, хочет ли он быть четным или нечетным (всмысле ходить первым или вторым). В зависимости от того, что выберет в итоге пользователь, мы создадим два объекта - A и B. A будет ходить первым и будет считаться нечетным, B - наоборот, второй и четный. Так вот, A и B могут быть как Human, так и Computer (это зависит от режима игры). Лично я создавал эти объекты простым case'ом:

Код:
switch(gmode){

case 1:{
	int ev;
	printf("\nWould you like to be odd or even? (O/E) ");
	int t = 1;
	while(t){
		scanf("%d", &ev);
		if (ev!="O" || ev!="E"){
			printf("Incorrect character, please try again\n");
		}
		else t = 0;
	}

	if(ev=="O"){
		Player *A = new Human;
		Player *B = new Computer;
	}
	else{
		Player *A = new Computer;
		Player *B = new Human;
	}
}
break;

case 2:{
	Player *A = new Human;
	Player *B = new Human;
}
break;

case 3:{
	Player *A = new Computer;
	Player *B = new Computer;
}
break;
}
Однако же препод забраковал такой подход и сказал, что было бы куда лучше если бы я использовал абстрактную фабрику для создания объектов, а case это плохо и нечитабельно (хотя по мне, так все предельно понятно).

Я понимаю, что из себя представляет фабричный метод и что такое абстрактная фабрика, но концы с концами свести не могу - запутался. Помогите, пожалуйста
PitMagnum вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц