[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Eliot-dev] Changes to eliot/game/game_factory.cpp [antoine-1]
From: |
eliot-dev |
Subject: |
[Eliot-dev] Changes to eliot/game/game_factory.cpp [antoine-1] |
Date: |
Sun, 23 Oct 2005 13:16:33 -0400 |
Index: eliot/game/game_factory.cpp
diff -u /dev/null eliot/game/game_factory.cpp:1.5.2.1
--- /dev/null Sun Oct 23 17:16:32 2005
+++ eliot/game/game_factory.cpp Sun Oct 23 17:16:24 2005
@@ -0,0 +1,244 @@
+/*****************************************************************************
+ * Copyright (C) 2005 Eliot
+ * Authors: Olivier Teuliere <address@hidden>
+ *
+ * $Id: game_factory.cpp,v 1.5.2.1 2005/10/23 17:16:24 afrab Exp $
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+ *****************************************************************************/
+
+#include <getopt.h>
+
+#include "config.h"
+#include "dic.h"
+#include "game_factory.h"
+
+
+GameFactory *GameFactory::m_factory = NULL;
+
+
+GameFactory::GameFactory(): m_dic(NULL), m_human(0), m_ai(0), m_joker(false)
+{
+}
+
+
+GameFactory::~GameFactory()
+{
+ if (m_dic)
+ Dic_destroy(m_dic);
+}
+
+
+GameFactory *GameFactory::Instance()
+{
+ if (m_factory == NULL)
+ m_factory = new GameFactory;
+ return m_factory;
+}
+
+
+void GameFactory::Destroy()
+{
+ if (m_factory)
+ delete m_factory;
+ m_factory = NULL;
+}
+
+
+Training *GameFactory::createTraining(const Dictionary iDic)
+{
+ Training *game = new Training(iDic);
+ return game;
+}
+
+
+FreeGame *GameFactory::createFreeGame(const Dictionary iDic)
+{
+ FreeGame *game = new FreeGame(iDic);
+ return game;
+}
+
+
+Duplicate *GameFactory::createDuplicate(const Dictionary iDic)
+{
+ Duplicate *game = new Duplicate(iDic);
+ return game;
+}
+
+
+Game *GameFactory::createFromCmdLine(int argc, char **argv)
+{
+ // 1) Parse command-line and store everything in member variables
+ static struct option long_options[] =
+ {
+ {"help", no_argument, NULL, 'h'},
+ {"version", no_argument, NULL, 'v'},
+ {"dictionary", required_argument, NULL, 'd'},
+ {"dict", required_argument, NULL, 'd'},
+ {"mode", required_argument, NULL, 'm'},
+ {"human", no_argument, NULL, 300},
+ {"ai", no_argument, NULL, 400},
+ {"joker", no_argument, NULL, 500},
+ {0, 0, 0, 0}
+ };
+ static char short_options[] = "hvd:m:";
+
+ int option_index = 1;
+ int res;
+ bool found_d = false;
+ bool found_m = false;
+ while ((res = getopt_long(argc, argv, short_options,
+ long_options, &option_index)) != -1)
+ {
+ switch (res)
+ {
+ case 'h':
+ // Help requested, display it and exit
+ printUsage(argv[0]);
+ return NULL;
+ case 'v':
+ // Version requested, display it and exit
+ printVersion();
+ return NULL;
+ case 'd':
+ m_dicStr = optarg;
+ found_d = true;
+ break;
+ case 'm':
+ m_modeStr = optarg;
+ found_m = true;
+ break;
+ case 300:
+ m_human++;
+ break;
+ case 400:
+ m_ai++;
+ break;
+ case 500:
+ m_joker = true;
+ break;
+ }
+ }
+
+ // 2) Make sure the mandatory options are present
+ if (!found_d || !found_m)
+ {
+ cerr << "Mandatory option missing: ";
+ if (!found_d)
+ cerr << "dict";
+ else if (!found_m)
+ cerr << "mode";
+ cerr << "\n";
+
+ printUsage(argv[0]);
+ return NULL;
+ }
+
+ // 3) Try to load the dictionary
+ if (Dic_load(&m_dic, m_dicStr.c_str()))
+ {
+ std::cerr << "Could not load dictionary '" << m_dicStr << "'\n";
+ return NULL;
+ }
+
+ // 4) Try to create a game object
+ Game *game = NULL;
+ if (m_modeStr == "training" || m_modeStr == "t")
+ {
+ game = createTraining(m_dic);
+ }
+ else if (m_modeStr == "freegame" || m_modeStr == "f")
+ {
+ game = createFreeGame(m_dic);
+ }
+ else if (m_modeStr == "duplicate" || m_modeStr == "d")
+ {
+ game = createDuplicate(m_dic);
+ }
+ else
+ {
+ std::cerr << "Invalid game mode '" << m_modeStr << "'\n";
+ return NULL;
+ }
+
+<<<<<<< game_factory.cpp
+#if 0
+ // 4) Add the players
+=======
+ // 5) Add the players
+>>>>>>> 1.5
+ for (int i = 0; i < m_human; i++)
+ game->addHumanPlayer();
+ for (int i = 0; i < m_ai; i++)
+ game->addAIPlayer();
+#endif
+
+ // 6) Set the variant
+ if (m_joker)
+ game->setVariant(Game::kJOKER);
+
+ return game;
+}
+
+
+void GameFactory::releaseGame(Game &iGame)
+{
+ delete &iGame;
+}
+
+
+void GameFactory::printUsage(const std::string &iBinaryName) const
+{
+<<<<<<< game_factory.cpp
+ std::cout << "Usage: " << iBinaryName << " [options]\n"
+ << "\n"
+ << " -h, --help Print this help and exit\n"
+ << " -v, --version Print version information and
exit\n"
+ << " -m, --mode {duplicate,d,freegame,f,training,t}\n"
+ << " Choose game mode\n"
+ << " -d, --dict <string> Choose a dictionary\n"
+ << " --human Add a human player\n"
+ << " --ai Add a AI (Artificial Intelligence)
player\n"
+ << " --joker Play with the \"Joker game\"
variant\n";
+=======
+ cout << "Usage: " << iBinaryName << " [options]\n"
+ << "Options:\n"
+ << " -h, --help Print this help and exit\n"
+ << " -v, --version Print version information and exit\n"
+ << " -m, --mode {duplicate,d,freegame,f,training,t}\n"
+ << " Choose game mode (mandatory)\n"
+ << " -d, --dict <string> Choose a dictionary (mandatory)\n"
+ << " --human Add a human player\n"
+ << " --ai Add a AI (Artificial Intelligence)
player\n"
+ << " --joker Play with the \"Joker game\"
variant\n";
+>>>>>>> 1.5
+}
+
+
+void GameFactory::printVersion() const
+{
+ std::cout << PACKAGE_STRING << "\n"
+ << "This program comes with NO WARRANTY, to the extent permitted by
"
+ << "law.\nYou may redistribute it under the terms of the GNU
General "
+ << "Public License;\nsee the file named COPYING for details.\n";
+}
+
+
+
+/// Local Variables:
+/// mode: hs-minor
+/// c-basic-offset: 4
+/// End:
+
- [Eliot-dev] Changes to eliot/game/game_factory.cpp [antoine-1],
eliot-dev <=