Advertisement
Guest User

Untitled

a guest
Nov 29th, 2017
84
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 10.46 KB | None | 0 0
  1. #include <iostream>
  2. #include <algorithm>
  3. #include <string>
  4. #include <mysql_connection.h>
  5. #include <cppconn/driver.h>
  6. #include <cppconn/exception.h>
  7. #include <cppconn/resultset.h>
  8. #include <cppconn/statement.h>
  9. #include <cppconn/prepared_statement.h>
  10.  
  11. #ifdef __cplusplus__
  12. #include <cstdlib>
  13. #else
  14. #include <stdlib.h>
  15. #endif
  16.  
  17.  
  18. #define TIME 2
  19. #define HOST "tcp://127.0.0.1:3306"
  20. #define USER "mudgame"
  21. #define PASSWORD "linux123"
  22. #define DATABASE "MUDGAMEDB"
  23.  
  24.  
  25. //Estados del juego
  26. enum GameState { START, LOGIN, NEWPLAYER, SELECTCHAR, NEWCHAR, GAME, EXIT };
  27.  
  28.  
  29. //Limpia la pantalla
  30. void sclear()
  31. {
  32. if (system("CLS")) system("clear");
  33. }
  34.  
  35.  
  36. int main()
  37. {
  38.  
  39. try
  40. {
  41. GameState status;
  42. status = START;
  43.  
  44. //Preparamos la conexion a la base de datos
  45. sql::Driver* driver = get_driver_instance();
  46. sql::Connection* con = driver->connect(HOST, USER, PASSWORD);
  47. con->setSchema(DATABASE); //establecemos la conexion
  48.  
  49. sql::Statement* stmt = con->createStatement(); //creamos el statement a partir de la conexion
  50.  
  51.  
  52. std::string sql, username, pwd1, pwd2, playerName, characterName;
  53. int i, exist, playerID, characterID, raceID;
  54. bool found;
  55. sql::ResultSet* res; //resultset donde guardaremos los resultados de las consultas
  56.  
  57.  
  58.  
  59. while(status != GameState::EXIT) //gameloop
  60. {
  61. sclear();
  62. std::cout << "======| MUDGAME v.0.1.|======" << std::endl;
  63. if(playerName != "")
  64. std::cout << "You are logged as <" << playerName << ">" << std::endl;
  65. if(characterName != "")
  66. std::cout << "Your selected character is <" << characterName << ">" << std::endl;
  67. std::cout << std::endl;
  68.  
  69. switch (status) {
  70. //inicio
  71. case START:
  72. username = "";
  73. std::cout << "Type in your username or type 'nuevo' to register a new player: " << std::endl;
  74. std::cin >> username;
  75. if(username == "nuevo") //si el jugador escribe "nuevo" crea un nuevo player
  76. {
  77. status = GameState::NEWPLAYER;
  78. }
  79. else
  80. {
  81. sql = "SELECT COUNT(*) FROM Players p WHERE p.PlayerName = '" + username + "';"; //mira si existe un player con el PlayerName introducido
  82. res = stmt->executeQuery(sql);
  83. if(res->next())
  84. {
  85. if(res->getInt(1) > 0) //existe el registro
  86. {
  87. status = GameState::LOGIN;
  88. }
  89. else //no existe el jugador
  90. {
  91. std::cout << "Error: Non existing player" << std::endl;
  92. sleep(TIME);
  93. }
  94. }
  95. delete(res);
  96. }
  97. break;
  98. case LOGIN:
  99. std::cout << "---| LOGIN |---" << std::endl;
  100. std::cout << "Type in your password: " <<std::endl;
  101. std::cin >> pwd1;
  102.  
  103. sql = "SELECT p.PlayerID FROM Players p WHERE p.PlayerName = '" + username + "' AND p.PlayerPassword = '" + pwd1 + "' LIMIT 0, 1;"; //comprueba si existe y recoge el playerID
  104. res = stmt->executeQuery(sql);
  105. while(res->next())
  106. {
  107. playerID = res->getInt("PlayerID"); //guardamos el playerID en la sesion
  108. playerName = username; //guardamos el playerName en la sesion
  109. status = GameState::SELECTCHAR;
  110. }
  111. if(playerID == NULL) //no existe un player con ese nombre y password
  112. {
  113. std::cout << "Error: Password is incorrect. Please try again." << std::endl;
  114. sleep(TIME);
  115. status = GameState::LOGIN;
  116. }
  117. delete(res);
  118. break;
  119. case NEWPLAYER:
  120. username = "";
  121. std::cout << "---| NEW PLAYER |---" << std::endl;
  122. std::cout << "Type in your new username: " << std::endl;
  123. std::cin >> username;
  124.  
  125. //Comprueba si el nombre de jugador existe
  126. sql = "SELECT COUNT(*) FROM Players p WHERE p.PlayerName = '" + username + "';"; //comprueba si el player name ya existe en la base de datos
  127. res = stmt->executeQuery(sql);
  128. if(res->next())
  129. {
  130. if(res->getInt(1) > 0) // el player name existe
  131. {
  132. std::cout << "Error: <" << username << "> is already taken. Try another name for your player." << std::endl;
  133. sleep(TIME);
  134. }
  135. else //el playername no existe
  136. {
  137. std::cout << "Type in your password: " <<std::endl;
  138. std::cin >> pwd1;
  139.  
  140. std::cout << "Type in again your password: " <<std::endl;
  141. std::cin >> pwd2;
  142.  
  143. if(pwd1 == pwd2) //comprueba que los passwords coincidan
  144. {
  145. //Crea el Player
  146. sql = "INSERT INTO Players (PlayerID, PlayerName, PlayerPassword) VALUES (NULL, '" + username + "', '" + pwd1 + "');";
  147. int numRows = stmt->executeUpdate(sql);
  148. if(numRows == 1)
  149. {
  150. res = stmt->executeQuery("SELECT PlayerID FROM Players ORDER BY PlayerID DESC LIMIT 0, 1 "); //Obtenemos el ID del player recien insertado
  151. res->next();
  152. playerID = res->getInt("PlayerID");
  153.  
  154. std::cout << "Player created successfully." << std::endl;
  155. sleep(TIME);
  156. status = GameState::NEWCHAR;
  157. }
  158.  
  159. }
  160. else //los passwords no coinciden
  161. {
  162. std::cout << "Error: Passwords don't match." << std::endl;
  163. sleep(TIME);
  164. }
  165. }
  166. }
  167. delete(res);
  168. break;
  169. case SELECTCHAR:
  170. username = "";
  171. std::cout << "---| SELECT CHARACTER |---" << std::endl;
  172. std::cout << "Type <index> to select character or type 'nuevo' to create a new one." << std::endl;
  173.  
  174. //Comprueba si el jugador tiene personajes disponibles
  175. sql = "SELECT COUNT(*) FROM Characters c WHERE c.PlayerID = " + std::to_string(playerID) + ";";
  176. res = stmt->executeQuery(sql);
  177. if(res->next())
  178. {
  179. exist = res->getInt(1);
  180. if(exist > 0) //si tiene personajes disponibles muestra la lista
  181. {
  182. std::string results[exist];
  183. std::cout << results[0] << " " << results[1] << std::endl;
  184.  
  185. sql = "SELECT c.CharacterID, c.CharacterName FROM Characters c WHERE c.PlayerID = " + std::to_string(playerID) + ";";
  186. res = stmt->executeQuery(sql);
  187. i = 0;
  188.  
  189. while(res->next())
  190. {
  191. results[i] = res->getString("CharacterName");
  192. std::cout << "<" << i << "> " << res->getString("CharacterName") << std::endl;
  193. i++;
  194.  
  195. }
  196. std::cin >> username;
  197.  
  198. if(username == "nuevo")
  199. {
  200. status = GameState::NEWCHAR;
  201. }
  202. else
  203. {
  204. characterName = results[atoi(username.c_str())];
  205. status = GameState::GAME;
  206. }
  207.  
  208. }
  209. else //si no tiene personajes disponibles crea un nuevo pj
  210. {
  211. std::cout << "There are no characters for this player. Create your first character" << std::endl;
  212. sleep(TIME);
  213. status = GameState::NEWCHAR;
  214. }
  215. }
  216. delete(res);
  217. break;
  218. case NEWCHAR:
  219. username = "";
  220. std::cout << "---| NEW CHARACTER |---" << std::endl;
  221. std::cout << "Type <index> to select Race: " << std::endl;
  222. sql = "SELECT r.RaceID, r.RaceName FROM Races r;";
  223. res = stmt->executeQuery(sql);
  224.  
  225. i = 0;
  226. while(res->next()) //lista las razas disponibles
  227. {
  228. std::cout << "<" << res->getInt("RaceID") << "> " << res->getString("RaceName") << std::endl;
  229. i++;
  230. }
  231.  
  232. std::cin >> raceID;
  233.  
  234. std::cout << "Type your character name: " << std::endl;
  235. std::cin >> characterName;
  236.  
  237. //Comprueba si el nombre de personaje existe
  238. sql = "SELECT COUNT(*) FROM Characters c WHERE c.CharacterName = '" + characterName + "';";
  239. res = stmt->executeQuery(sql);
  240. if(res->next())
  241. {
  242. if(res->getInt(1) > 0) //ya existe un personaje con ese nombre
  243. {
  244. std::cout << "Error: <" << characterName << "> is already taken. Try another name for your character." << std::endl;
  245. sleep(TIME);
  246. }
  247. else
  248. {
  249. //Crea un nuevo personaje para el player identificado con la raza seleccionada
  250. sql = "INSERT INTO Characters (CharacterID, CharacterName, PlayerID, RaceID) VALUES (NULL, '" + characterName + "', '" + std::to_string(playerID) + "', '" + std::to_string(raceID) + "');";
  251. int numRows = stmt->executeUpdate(sql);
  252. if(numRows == 1)
  253. {
  254.  
  255. std::cout << "Your character " << characterName << " has been created successfully." << std::endl;
  256. sleep(TIME);
  257. status = GameState::GAME;
  258.  
  259. }
  260.  
  261. }
  262. }
  263. delete(res);
  264. break;
  265. case GAME:
  266. std::cout << "GAME STARTS" << std::endl;
  267. status = GameState::EXIT;
  268. break;
  269. default:
  270. break;
  271. }
  272.  
  273. }
  274. delete(stmt);
  275. delete(con);
  276. }
  277. catch(sql::SQLException &e) //se ha producido alguna excepcion
  278. {
  279. std::cout << "ERROR: " << e.what() << std::endl;
  280. std::cout << "Closing..." << std::endl;
  281. }
  282.  
  283. return 0;
  284. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement