gp.cpp 8.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310
  1. /*
  2. *
  3. * This file is part of Luces de 1984 SDL version (L1-sdl).
  4. * Copyright (C) <2017> <alkeon> [alkeon@autistici.org]
  5. * L1-sdl is free software: you can redistribute it and/or modify
  6. * it under the terms of the GNU General Public License as published by
  7. * the Free Software Foundation, either version 3 of the License, or
  8. * (at your option) any later version.
  9. *
  10. * L1-sdl is distributed in the hope that it will be useful,
  11. * but WITHOUT ANY WARRANTY; without even the implied warranty of
  12. * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  13. * GNU General Public License for more details.
  14. *
  15. * You should have received a copy of the GNU General Public License
  16. * along with l1-sdl. If not, see <http://www.gnu.org/licenses/>.
  17. *
  18. */
  19. #include <string>
  20. #include <cstring>
  21. #include <fstream>
  22. #include <sstream>
  23. #include "metodos.h"
  24. #include "personajes.h"
  25. #include "SDL.h"
  26. #include "SDL_ttf.h"
  27. using namespace std;
  28. #define VERSION "1.1-sdl"
  29. void juego::guardar(std::string guardar,Personaje& v){
  30. if(this->guardados_automaticos==1 ){
  31. printa("Narrador:Guardando partida...\n");
  32. string line;
  33. std::ofstream out("save.dat");
  34. out << "Nombre: " << v.nombre << "\nVida: " << to_string(v.vida) << "\nAtaque: " << to_string(v.ataque) << "\nBotiquín: " << to_string(v.botiquin) << "\nBalas: " << to_string(v.balas) << "\nDaño " << to_string(v.balas_dano) << "\nGanzúa: " << to_string(v.ganzua) << "\nGuardado: " << guardar << "\nGuardados automáticos: " << to_string(this->guardados_automaticos) << "\nVersión: " << VERSION << "\nPsicosis: " << to_string(v.psicosis) << "\nSoledad: " << to_string(v.soledad) << "\nEsperpento: " << to_string(v.esperpento) << "\nHola Dave: " << to_string(v.hola_dave) << "\nBug: " << to_string(v.bug) << "\nPistola: " << to_string(v.pistola);
  35. printa("Narrador:Partida guardada.\n");
  36. }
  37. }
  38. void juego::cargarcompleto(string partida,Personaje& v,Personaje& h){
  39. string line;
  40. ifstream in(partida.c_str());
  41. while(getline(in,line)){
  42. size_t aux=line.find("Nombre: ");
  43. if(aux!=std::string::npos){
  44. line=line.substr(aux+8);
  45. v.nombre=line;
  46. }
  47. aux=line.find("Vida: ");
  48. if(aux!=std::string::npos){
  49. line=line.substr(aux+6);
  50. stringstream(line) >> v.vida;
  51. }
  52. aux=line.find("Ataque: ");
  53. if(aux!=std::string::npos){
  54. line=line.substr(aux+8);
  55. stringstream(line) >> v.ataque;
  56. }
  57. aux=line.find("Botiquín: ");
  58. if(aux!=std::string::npos){
  59. line=line.substr(aux+10);
  60. stringstream(line) >> v.botiquin;
  61. }
  62. aux=line.find("Balas: ");
  63. if(aux!=std::string::npos){
  64. line=line.substr(aux+7);
  65. stringstream(line) >> v.balas;
  66. }
  67. aux=line.find("Daño: ");
  68. if(aux!=std::string::npos){
  69. line=line.substr(aux+6);
  70. stringstream(line) >> v.balas_dano;
  71. }
  72. aux=line.find("Ganzúa: ");
  73. if(aux!=std::string::npos){
  74. line=line.substr(aux+8);
  75. stringstream(line) >> v.ganzua;
  76. }
  77. aux=line.find("Guardado: ");
  78. if(aux!=std::string::npos){
  79. line=line.substr(aux+10);
  80. v.funcion_guardada=line;
  81. }
  82. aux=line.find("Guardados automáticos: ");
  83. if(aux!=std::string::npos){
  84. line=line.substr(aux+23);
  85. stringstream(line) >> this->guardados_automaticos;
  86. }
  87. aux=line.find("Psicosis: ");
  88. if(aux!=std::string::npos){
  89. line=line.substr(aux+10);
  90. stringstream(line) >> v.psicosis;
  91. }
  92. aux=line.find("Pistola: ");
  93. if(aux!=std::string::npos){
  94. line=line.substr(aux+9);
  95. stringstream(line) >> v.pistola;
  96. }
  97. aux=line.find("Soledad: ");
  98. if(aux!=std::string::npos){
  99. line=line.substr(aux+8);
  100. stringstream(line) >> v.soledad;
  101. }
  102. aux=line.find("Esperpento: ");
  103. if(aux!=std::string::npos){
  104. line=line.substr(aux+12);
  105. stringstream(line) >> v.esperpento;
  106. }
  107. aux=line.find("Hola Dave: ");
  108. if(aux!=std::string::npos){
  109. line=line.substr(aux+11);
  110. stringstream(line) >> v.hola_dave;
  111. }
  112. aux=line.find("Bug: ");
  113. if(aux!=std::string::npos){
  114. line=line.substr(aux+5);
  115. stringstream(line) >> v.bug;
  116. }
  117. }
  118. this->cargarnivel(v,h);
  119. }
  120. void juego::cargarnivel(Personaje& v, Personaje& h){
  121. if(v.funcion_guardada[0]=='a'){
  122. if(v.funcion_guardada[1]=='2'){
  123. this->interrogatorio(v,h);
  124. }
  125. if(v.funcion_guardada[1]=='3'){
  126. this->huida(v,h);
  127. }
  128. if(v.funcion_guardada[1]=='4'){
  129. this->provisiones(v,h);
  130. }
  131. if(v.funcion_guardada[1]=='6'){
  132. this->flashback(v,h);
  133. }
  134. if(v.funcion_guardada[1]=='7'){
  135. this->informacion(v,h);
  136. }
  137. if(v.funcion_guardada[1]=='9'){
  138. this->usas_un_ordenador(v,h);
  139. }
  140. }else{
  141. if(v.funcion_guardada[0]=='1'){
  142. this->preguntas_principales(v,h);
  143. }
  144. if(v.funcion_guardada=="-1"){
  145. v.vida=200;
  146. v.ataque=20;
  147. h.vida=80;
  148. h.ataque=4;
  149. this->preguntas_principales(v,h);
  150. }
  151. if(v.funcion_guardada[1]=='2'){
  152. this->huida_ruidosa(v,h);
  153. }
  154. if(v.funcion_guardada[1]=='3'){
  155. this->vuelves(v,h);
  156. }
  157. if(v.funcion_guardada[1]=='4'){
  158. this->ayudantes_cerradura(v,h);
  159. }
  160. if(v.funcion_guardada[1]=='5'){
  161. this->muerte_al_francotirador(v,h);
  162. }
  163. if(v.funcion_guardada[0]!='1' && v.funcion_guardada[0]!='b'){
  164. if(v.funcion_guardada[0]=='2'&& v.funcion_guardada[1]=='0'){
  165. this->non_plus_ultra(v,h);
  166. }else{
  167. this->preguntas_principales(v,h);
  168. }
  169. }
  170. }
  171. }
  172. void juego::vista_previa_partida(string partida_carga){
  173. string line;
  174. string nombrel;
  175. bool partida;
  176. int vida;
  177. string version;
  178. ifstream in(partida_carga.c_str());
  179. int final1=1;
  180. int final2=1;
  181. int final3=1;
  182. int final4=1;
  183. int final5=1;
  184. for(int i=0;i<17 && getline(in,line); ++i){
  185. size_t aux=line.find("Nombre: ");
  186. if(aux!=std::string::npos){
  187. line=line.substr(aux+8);
  188. nombrel=line;
  189. }
  190. aux=line.find("Vida: ");
  191. if(aux!=std::string::npos){
  192. line=line.substr(aux+6);
  193. stringstream(line) >> vida;
  194. }
  195. aux=line.find("Versión: ");
  196. if(aux!=std::string::npos){
  197. line=line.substr(aux+9);
  198. version=line;
  199. partida=true;
  200. }
  201. aux=line.find("Psicosis: ");
  202. if(aux!=std::string::npos){
  203. line=line.substr(aux+10);
  204. stringstream(line) >> final1;
  205. }
  206. aux=line.find("Soledad: ");
  207. if(aux!=std::string::npos){
  208. line=line.substr(aux+8);
  209. stringstream(line) >> final2;
  210. }
  211. aux=line.find("Esperpento: ");
  212. if(aux!=std::string::npos){
  213. line=line.substr(aux+12);
  214. stringstream(line) >> final3;
  215. }
  216. aux=line.find("Hola Dave: ");
  217. if(aux!=std::string::npos){
  218. line=line.substr(aux+11);
  219. stringstream(line) >> final4;
  220. }
  221. aux=line.find("Bug: ");
  222. if(aux!=std::string::npos){
  223. line=line.substr(aux+5);
  224. stringstream(line) >> final5;
  225. }
  226. }
  227. std::string final1_str;
  228. std::string final2_str;
  229. std::string final3_str;
  230. std::string final4_str;
  231. std::string final5_str;
  232. if(final1==0)
  233. final1_str="Conseguido";
  234. if(final1==1)
  235. final1_str="No conseguido";
  236. if(final2==0)
  237. final2_str="Conseguido";
  238. if(final2==1)
  239. final2_str="No conseguido";
  240. if(final3==0)
  241. final3_str="Conseguido";
  242. if(final3==1)
  243. final3_str="No conseguido";
  244. if(final4==0)
  245. final4_str="Conseguido";
  246. if(final4==1)
  247. final4_str="No conseguido";
  248. if(final5==0)
  249. final5_str="Conseguido";
  250. if(final5==1)
  251. final5_str="No conseguido";
  252. if(partida){
  253. std::string line;
  254. std::stringstream numeros;
  255. numeros.str( "" );
  256. numeros << "Vida \t\t\t " << vida << "\n";
  257. this->printa("Partida encontrada\n");
  258. line="Nombre \t\t\t "+nombrel+"\n";
  259. this->printa(line);
  260. this->printa(numeros.str());
  261. line="Final 1 \t\t "+final1_str+"\n";
  262. this->printa(line);
  263. line="Final 2 \t\t "+final2_str+"\n";
  264. this->printa(line);
  265. line="Final 3 \t\t "+final3_str+"\n";
  266. this->printa(line);
  267. line="Final 4 \t\t "+final4_str+"\n";
  268. this->printa(line);
  269. line="Final 5 \t\t "+final5_str+"\n";
  270. this->printa(line);
  271. if(final1==0 && final2==0 && final3==0 && final4==0 && final5==0){
  272. this->printa("Esta partida ha sido completada con todos los finales. Enhorabuena al jugador y espero que haya disfrutado (dentro de las limitaciones) del juego. \nAtte:Alkeon\n");
  273. }
  274. if(version!=VERSION)
  275. this->printa("La partida guardada está desactualizada y puede provocar fallos inesperados\n");
  276. this->printa("¿Quieres cargar esta partida?\n" );
  277. this->printa("1.- Sí \n2.- No\n");
  278. SDL_Event e;
  279. bool continua=true;
  280. while(continua){
  281. if( SDL_WaitEvent( &e ) != 0 ){
  282. if( e.type == SDL_KEYDOWN ){
  283. if(e.key.keysym.sym == SDLK_1){
  284. Personaje v(0,20,0,0,0);
  285. v.nombre=nombrel;
  286. Personaje h(0,30,0,0,1);
  287. this->cargarcompleto("save.dat",v,h);
  288. continua=false;
  289. }else{
  290. juego juego_actual;
  291. Personaje molde(0,30,0,0,1);
  292. Personaje Winston(0,20,0,0,0);
  293. this->menu(Winston,molde);
  294. }
  295. }
  296. if(e.type == SDL_QUIT){
  297. continua=false;
  298. }
  299. }
  300. }
  301. }
  302. }