gp.cpp 8.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309
  1. /*
  2. *
  3. * This file is part of Luces de 1984 (L1).
  4. * Copyright (C) <2017> <alkeon> [alkeon@autistici.org]
  5. * L1 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 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. 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 <curses.h>
  26. #include <ncurses.h>
  27. using namespace std;
  28. #define VERSION "1.1"
  29. void juego::guardar(std::string guardar,Personaje& v){
  30. if(this->guardados_automaticos==1 ){
  31. printa("Narrador:Guardando partida...\n");
  32. std::ofstream out("save.dat");
  33. 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);
  34. printa("Narrador:Partida guardada.\n");
  35. }
  36. }
  37. void juego::cargarcompleto(string partida,Personaje& v,Personaje& h){
  38. string line;
  39. ifstream in(partida.c_str());
  40. while(getline(in,line)){
  41. size_t aux=line.find("Nombre: ");
  42. if(aux!=std::string::npos){
  43. line=line.substr(aux+8);
  44. v.nombre=line;
  45. }
  46. aux=line.find("Vida: ");
  47. if(aux!=std::string::npos){
  48. line=line.substr(aux+6);
  49. stringstream(line) >> v.vida;
  50. }
  51. aux=line.find("Ataque: ");
  52. if(aux!=std::string::npos){
  53. line=line.substr(aux+8);
  54. stringstream(line) >> v.ataque;
  55. }
  56. aux=line.find("Botiquín: ");
  57. if(aux!=std::string::npos){
  58. line=line.substr(aux+10);
  59. stringstream(line) >> v.botiquin;
  60. }
  61. aux=line.find("Balas: ");
  62. if(aux!=std::string::npos){
  63. line=line.substr(aux+7);
  64. stringstream(line) >> v.balas;
  65. }
  66. aux=line.find("Daño: ");
  67. if(aux!=std::string::npos){
  68. line=line.substr(aux+6);
  69. stringstream(line) >> v.balas_dano;
  70. }
  71. aux=line.find("Ganzúa: ");
  72. if(aux!=std::string::npos){
  73. line=line.substr(aux+8);
  74. stringstream(line) >> v.ganzua;
  75. }
  76. aux=line.find("Guardado: ");
  77. if(aux!=std::string::npos){
  78. line=line.substr(aux+10);
  79. v.funcion_guardada=line;
  80. }
  81. aux=line.find("Guardados automáticos: ");
  82. if(aux!=std::string::npos){
  83. line=line.substr(aux+23);
  84. stringstream(line) >> this->guardados_automaticos;
  85. }
  86. aux=line.find("Psicosis: ");
  87. if(aux!=std::string::npos){
  88. line=line.substr(aux+10);
  89. stringstream(line) >> v.psicosis;
  90. }
  91. aux=line.find("Soledad: ");
  92. if(aux!=std::string::npos){
  93. line=line.substr(aux+8);
  94. stringstream(line) >> v.soledad;
  95. }
  96. aux=line.find("Esperpento: ");
  97. if(aux!=std::string::npos){
  98. line=line.substr(aux+12);
  99. stringstream(line) >> v.esperpento;
  100. }
  101. aux=line.find("Hola Dave: ");
  102. if(aux!=std::string::npos){
  103. line=line.substr(aux+11);
  104. stringstream(line) >> v.hola_dave;
  105. }
  106. }
  107. this->cargarnivel(v,h);
  108. }
  109. void juego::cargarnivel(Personaje& v, Personaje& h){
  110. if(v.funcion_guardada[0]=='a'){
  111. if(v.funcion_guardada[1]=='2'){
  112. this->interrogatorio(v,h);
  113. }
  114. if(v.funcion_guardada[1]=='3'){
  115. this->huida(v,h);
  116. }
  117. if(v.funcion_guardada[1]=='4'){
  118. this->provisiones(v,h);
  119. }
  120. if(v.funcion_guardada[1]=='5'){
  121. this->asesinar(v,h);
  122. }
  123. if(v.funcion_guardada[1]=='6'){
  124. this->flashback(v,h);
  125. }
  126. if(v.funcion_guardada[1]=='7'){
  127. this->informacion(v,h);
  128. }
  129. if(v.funcion_guardada[1]=='8'){
  130. this->ira(v,h);
  131. }
  132. if(v.funcion_guardada[1]=='9'){
  133. this->usando_un_ordenador(v,h);
  134. }
  135. }else{
  136. if(v.funcion_guardada[0]=='1'){
  137. this->preguntas_principales(v,h);
  138. }
  139. if(v.funcion_guardada=="-1"){
  140. v.vida=200;
  141. v.ataque=20;
  142. h.vida=80;
  143. h.ataque=4;
  144. this->preguntas_principales(v,h);
  145. }
  146. if(v.funcion_guardada[1]=='2'){
  147. this->huida_ruidosa(v,h);
  148. }
  149. if(v.funcion_guardada[1]=='3'){
  150. this->vuelves(v,h);
  151. }
  152. if(v.funcion_guardada[1]=='4'){
  153. this->ayudantes_cerradura(v,h);
  154. }
  155. if(v.funcion_guardada[1]=='5'){
  156. this->muerte_al_francotirador(v,h);
  157. }
  158. if(v.funcion_guardada[0]!='1' && v.funcion_guardada[0]!='b'){
  159. this->preguntas_principales(v,h);
  160. }
  161. }
  162. }
  163. void vista_previa_partida(string partida_carga){
  164. clear();
  165. string line;
  166. string nombrel;
  167. bool partida;
  168. int vida;
  169. string version;
  170. ifstream in(partida_carga.c_str());
  171. int final1=1;
  172. int final2=1;
  173. int final3=1;
  174. int final4=1;
  175. while(getline(in,line)){
  176. size_t aux=line.find("Nombre: ");
  177. if(aux!=std::string::npos){
  178. line=line.substr(aux+8);
  179. nombrel=line;
  180. }
  181. aux=line.find("Vida: ");
  182. if(aux!=std::string::npos){
  183. line=line.substr(aux+6);
  184. stringstream(line) >> vida;
  185. }
  186. aux=line.find("Versión: ");
  187. if(aux!=std::string::npos){
  188. line=line.substr(aux+9);
  189. version=line;
  190. partida=true;
  191. }
  192. aux=line.find("Psicosis: ");
  193. if(aux!=std::string::npos){
  194. line=line.substr(aux+10);
  195. stringstream(line) >> final1;
  196. }
  197. aux=line.find("Soledad: ");
  198. if(aux!=std::string::npos){
  199. line=line.substr(aux+8);
  200. stringstream(line) >> final2;
  201. }
  202. aux=line.find("Esperpento: ");
  203. if(aux!=std::string::npos){
  204. line=line.substr(aux+12);
  205. stringstream(line) >> final3;
  206. }
  207. aux=line.find("Hola Dave: ");
  208. if(aux!=std::string::npos){
  209. line=line.substr(aux+11);
  210. stringstream(line) >> final4;
  211. }
  212. }
  213. char final1_str[30];
  214. char final2_str[30];
  215. char final3_str[30];
  216. char final4_str[30];
  217. if(final1==0)
  218. strcpy(final1_str,"Conseguido");
  219. if(final1==1)
  220. strcpy(final1_str,"No conseguido");
  221. if(final2==0)
  222. strcpy(final2_str,"Conseguido");
  223. if(final2==1)
  224. strcpy(final2_str,"No conseguido");
  225. if(final3==0)
  226. strcpy(final3_str,"Conseguido");
  227. if(final3==1)
  228. strcpy(final3_str,"No conseguido");
  229. if(final4==0)
  230. strcpy(final4_str,"Conseguido");
  231. if(final4==1)
  232. strcpy(final4_str,"No conseguido");
  233. if(partida){
  234. clear();
  235. printw("Partida encontrada\n");
  236. printw("Nombre \t\t\t %s\n",nombrel.c_str());
  237. printw("Vida \t\t\t %d\n",vida);
  238. printw("Final 1 \t\t %s\n",final1_str);
  239. printw("Final 2 \t\t %s\n",final2_str);
  240. printw("Final 3 \t\t %s\n",final3_str);
  241. printw("Final 4 \t\t %s\n",final4_str);
  242. if(final1==0 && final2==0 && final3==0 && final4==0){
  243. printw("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");
  244. }
  245. if(version!=VERSION)
  246. printw("La partida guardada está desactualizada y puede provocar fallos inesperados\n");
  247. printw("¿Quieres cargar esta partida?\n" );
  248. printw("1.- Sí \n2.- No\n");
  249. char eleccion[2];
  250. getstr(eleccion);
  251. if(eleccion[0] == '1'){
  252. juego juego_actual;
  253. Personaje v(0,20,0,0,0);
  254. v.nombre=nombrel;
  255. Personaje h(0,30,0,0,1);
  256. juego_actual.cargarcompleto("save.dat",v,h);
  257. }else{
  258. string partida_guardada;
  259. juego juego_actual;
  260. printw("¿Quieres cargar otra partida?\n" );
  261. printw("1.- Sí \n2.- No\n");
  262. char str[2];
  263. getstr(str);
  264. if(str[0]=='1'){
  265. printw("Escribe el nombre del archivo:" );
  266. char partida_mod[100];
  267. getstr(partida_mod);
  268. string partida_real(partida_mod);
  269. vista_previa_partida(partida_real);
  270. }else{
  271. juego juego_actual;
  272. Personaje molde(0,30,0,0,1);
  273. Personaje Winston(0,20,0,0,0);
  274. juego_actual.menu(Winston,molde);
  275. }
  276. }
  277. }else{
  278. printw("Ninguna partida encontrada\n");
  279. printw("¿Quieres cargar otra partida?\n" );
  280. printw("1.- Sí \n2.- No\n");
  281. char str[2];
  282. getstr(str);
  283. if(str[0]=='1'){
  284. printw("Escribe el nombre del archivo:");
  285. char str2[30];
  286. getstr(str2);
  287. string partida_guardada(str2);
  288. vista_previa_partida(partida_guardada);
  289. }else{
  290. Personaje molde(0,30,0,0,1);
  291. Personaje Winston(0,20,0,0,0);
  292. juego juego_actual;
  293. juego_actual.menu(Winston,molde);
  294. }
  295. }
  296. }