L1.cpp 6.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255
  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 <iostream>
  20. #include <string>
  21. #include "metodos.h"
  22. #include "SDL_ttf.h"
  23. #include "SDL.h"
  24. using namespace std;
  25. int main (){
  26. //Iniciar pantalla (NCURSES)
  27. //Comprueba si se inicia SDL
  28. if( SDL_Init( SDL_INIT_VIDEO ) < 0 )
  29. {
  30. printf( "No se inició SDL. %s\n", SDL_GetError() );
  31. }
  32. else
  33. {
  34. //Crea una ventana
  35. SDL_Window * gWindow = SDL_CreateWindow( "DQM", SDL_WINDOWPOS_UNDEFINED, SDL_WINDOWPOS_UNDEFINED, 700, 480, SDL_WINDOW_RESIZABLE);
  36. //Comprueba la creación de la ventana
  37. if( gWindow == NULL )
  38. {
  39. printf( "La ventana no se inició. %s\n", SDL_GetError() );
  40. }
  41. else
  42. {
  43. //Crea el render
  44. SDL_Renderer * gRenderer = SDL_CreateRenderer( gWindow, -1, SDL_RENDERER_PRESENTVSYNC);
  45. //Comprueba la creación de la ventana
  46. if( gRenderer==NULL ){
  47. printf( "El render no se inició. %s\n", SDL_GetError() );
  48. }
  49. TTF_Init();
  50. if(TTF_Init()==-1) {
  51. printf("TTF_Init: %s\n", TTF_GetError());
  52. }
  53. TTF_Font * gFont = TTF_OpenFont( "LiberationMono-Regular.ttf", 13 );
  54. if(!gFont) {
  55. printf("TTF_OpenFont: %s\n", TTF_GetError());
  56. }else{
  57. juego juego;
  58. juego.ventana=gWindow;
  59. juego.render=gRenderer;
  60. juego.font=gFont;
  61. juego.inicio();
  62. }
  63. }
  64. }
  65. SDL_Quit();
  66. }
  67. void juego::inicio(){
  68. printa("Bienvenido a Luces de 1984\n");//0
  69. printa("un juego creado por Alkeon.\n");
  70. //Iniciando personajes
  71. Personaje molde(0,30,0,0,1);
  72. Personaje Winston(0,20,0,0,0);
  73. //Final 1
  74. Winston.psicosis=1;
  75. //Final 2
  76. Winston.soledad=1;
  77. //Final 3
  78. Winston.esperpento=1;
  79. //Final 4
  80. Winston.hola_dave=1;
  81. Winston.vida=200;
  82. Winston.ataque=20;
  83. molde.vida=80;
  84. molde.ataque=4;
  85. //Menú
  86. this->menu(Winston,molde);
  87. }
  88. void juego::printa(std::string linea){
  89. for(int i=16;i>0;i--){
  90. this->texto[i]=this->texto[i-1];
  91. }
  92. this->texto[0]=linea;
  93. std::string texto2="";
  94. for(int e=16;e>=0;e--){
  95. texto2+=this->texto[e];
  96. }
  97. SDL_Surface * textSurface = TTF_RenderUTF8_Blended_Wrapped( this->font, texto2.c_str(), this->blanco,660);
  98. SDL_Rect renderQuad;
  99. renderQuad.x = 0;
  100. renderQuad.y = 0;
  101. renderQuad.w = textSurface->w;
  102. renderQuad.h = textSurface->h;
  103. SDL_Texture * mTexture = SDL_CreateTextureFromSurface( this->render, textSurface);
  104. SDL_SetRenderDrawColor( this->render, 0, 0, 0, 255 );
  105. SDL_RenderClear( this->render );
  106. SDL_RenderCopy( this->render, mTexture, NULL, &renderQuad);
  107. SDL_RenderPresent( this->render );
  108. SDL_Delay(200);
  109. }
  110. void juego::pausa(){
  111. printa("Pulsa la tecla 'Enter'.\n");
  112. SDL_Event e;
  113. bool continua=true;
  114. while( SDL_WaitEvent( &e ) != 0 && continua){
  115. if( e.type == SDL_KEYDOWN && e.key.keysym.sym == SDLK_RETURN ){
  116. continua=false;
  117. }
  118. }
  119. }
  120. void juego::menu(Personaje& v, Personaje& h){
  121. printa("En este menú puedes escoger distintos puntos:\n");
  122. printa("1.- Guía sencilla y recomendaciones\n");
  123. printa("2.- Comenzar el juego\n");
  124. printa("3.- Cargar juego\n");
  125. printa("4.- Créditos\n");
  126. printa("5.- Salir\n");
  127. SDL_Event e;
  128. bool continua=true;
  129. while(continua){
  130. if( SDL_WaitEvent( &e ) != 0 ){
  131. if(e.type == SDL_KEYDOWN){
  132. if(e.key.keysym.sym == SDLK_1){
  133. this->tutorial(); menu(v,h);
  134. continua=false;
  135. }
  136. if(e.key.keysym.sym == SDLK_2){
  137. this->escoger_opciones(v,h);
  138. continua=false;
  139. }
  140. if(e.key.keysym.sym == SDLK_3){
  141. vista_previa_partida("save.dat");
  142. continua=false;
  143. }
  144. if(e.key.keysym.sym == SDLK_4){
  145. this->creditos(v); menu(v,h);
  146. continua=false;
  147. }
  148. if(e.key.keysym.sym == SDLK_5){
  149. continua=false;
  150. }
  151. }
  152. if(e.type == SDL_QUIT){
  153. continua=false;
  154. }
  155. }
  156. }
  157. }
  158. void juego::tutorial(){
  159. printa("Narrador:Buenas soy el narrador de esta historia.\n");
  160. printa("Alkeon me tiene (y no me paga) para explicar todo el juego.\n");
  161. printa("Como veis al intervenir un personaje ocurre como en el teatro escrito.\n");
  162. printa("Si sigo hablando no se repite. Solo se espera a que cambie de personaje.\n");
  163. printa("Como consejos, no escribas letras si te piden números y este juego es dinámico.\n");
  164. printa("Cada vez que se puede, es modificado de ahí las actualizaciones.\n");
  165. printa("Si tuvieras alguna queja, se las mandas a Alkeon.\n");
  166. printa("¿No sabes cómo? Recuerda su página es https://autistici.org/alkeon\n\n");
  167. }
  168. void juego::escoger_opciones(Personaje& v, Personaje& h){
  169. printa("Antes de empezar la partida puedes escoger ciertas opciones que te hacen la experiencia de juego más personalizable y compatible con tu modo de juego.\n");
  170. if(this->guardados_automaticos!=2){
  171. this->opcion_guardado(v,h);
  172. }
  173. this->opcion_nombre(v,h);
  174. this->preguntas_principales(v,h);
  175. }
  176. void juego::opcion_guardado(Personaje& v, Personaje& h){
  177. printa("¿Prefieres guardados automáticos?\n");
  178. printa("1.- Sí\n");
  179. printa("2.- No\n");
  180. SDL_Event e;
  181. bool continua=true;
  182. while(continua){
  183. if( SDL_WaitEvent( &e ) != 0){
  184. if(e.type == SDL_KEYDOWN){
  185. if(e.key.keysym.sym == SDLK_1){
  186. this->guardados_automaticos=1;
  187. continua=false;
  188. }
  189. if(e.key.keysym.sym == SDLK_2){
  190. this->guardados_automaticos=2;
  191. continua=false;
  192. }
  193. }
  194. if(e.type == SDL_QUIT){
  195. continua=false;
  196. }
  197. }
  198. }
  199. }
  200. void juego::opcion_nombre(Personaje& v, Personaje& h){
  201. printa("Antes de empezar puedes escoger otro nombre distinto del predeterminado\n");
  202. printa("Te recomendamos por la historia y el tema principal que mantengas Winston\n");
  203. printa("Como referencia a uno de los finales puedes usar el nombre de Dave\n");
  204. printa("1.- Dejar el nombre de Winston\n");
  205. printa("2.- Quiero llamarme Dave\n");
  206. SDL_Event e;
  207. bool continua=true;
  208. while(continua){
  209. if( SDL_WaitEvent( &e ) != 0){
  210. if( e.type == SDL_KEYDOWN ){
  211. if(e.key.keysym.sym == SDLK_1){
  212. v.nombre="Winston";
  213. continua=false;
  214. }
  215. if(e.key.keysym.sym == SDLK_2){
  216. v.nombre="Dave";
  217. continua=false;
  218. }
  219. }
  220. if(e.type == SDL_QUIT){
  221. continua=false;
  222. }
  223. }
  224. }
  225. }
  226. void juego::creditos(Personaje& v){
  227. printa("La licencia de este juego es GNU GPL versión 3.\n");
  228. printa("Puedes saber más sobre este juego en https://autistici.org/alkeon/\n");
  229. printa("Dedicatoria:\n");
  230. printa("Por los que se van, por los que se quedan.\n");
  231. printa("A todos ellos, gracias.\n\n");
  232. }