elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Los 10 CVE más críticos (peligrosos) de 2020


  Mostrar Mensajes
Páginas: 1 2 [3]
21  Programación / Programación C/C++ / Re: Dibujar e inicializar tablero de posibles distintos tamaños en C [?] en: 8 Junio 2015, 19:55 pm
Hola, yo de nuevo. Tengo 2 dudas,

Esta parte la quise cambiar para poder elegir quien empieza:

Código
  1. void mover_tirarflecha(int turno)
  2. {
  3. // [...]
  4.   scanf(" %d", turno);
  5. // [...]
  6.  

Bueno y así con abajo, derecha e izquierda. Acá el error es: warning: comparison between pointer and integer [enabled by default]|


De repente entre tanto código no te has dado cuenta, pero lo que te dice es simplemente que se espera una dirección de memoria, no un valor entero, simplemente cambia esa linea por

Código
  1. scanf(" %d", &turno);


Edit


El segundo error es similar, estas comparando una dirección de memoria con un entero en la condición del while

Código
  1. while((limite<5) && (arriba<6) && (bosque6x6!='X'))//para arriba

Dice que compara con entero porque 'X' es convertido automáticamente en su valor en la tabla ASCII. No entiendo muy bien la mecánica del juego, pero creo que lo que quieres es comparar los valores de la matriz bosque6x6. El nombre bosque6x6 apunta al inicio de la matriz. ¿Quizá quieras hacer esta comparación dentro del while y dejar un flag en la condición del mismo?

Código
  1. while( (tus_condicciones) && flag )
  2. {
  3.    // codigo
  4.    if ( (otra_condicion) ) flag = false;
  5.    // mas codigo
  6. }

Saludos
22  Programación / Programación C/C++ / [+] Juego plataformista en C++ en: 8 Junio 2015, 19:10 pm
Buenas, soy nuevo en esta comunidad y hoy quiero traer un aporte. EL siguiente código lo hice hace un par de meses a manera de prueba de SFML y Box2D. Más que un juego completo (niveles, menús, etc), se buscaba aplicar los conceptos básicos de las herramientas antes mencionadas.

SFML: es una librería que proporciona una capa a OpenGL para trabajar gráficos. Además de esto, da también otras características interesantes relacionadas con multimedia (sonido, por ejemplo) y networking (para juegos online). Es open source y además multiplataforma (puede, de hecho, compilarse para Android utilizando las herramientas correspondientes). Pagina principal: http://www.sfml-dev.org/

Box2D: es un engine para simulación física en dos dimensiones, proporciona una serie de características útiles. También es open source y además es multiplataforma. Pagina del proyecto: http://box2d.org/ (Un dato interesante es que es utilizado en varios Game Engines, dado que es muy eficiente en sus algoritmos)

Como funciona: en primera instancia se lleva acabo un paralelismo entre pixeles y metros. Al momento de proporcionar información a los objetos de Box2D se hace la conversión correspondiente, y al dibujar en pantalla se hace exactamente lo mismo.

Qué tener en cuenta del codigo fuente
1. El juego se hizo bajo Windows con Visual Studio, por lo tanto, para compilarlo en otras plataformas habría que hacer un par de cambios menores (una o dos líneas)
2. No es un juego completo, pero pienso que ilustra varios conceptos básicos como la pila de cuerpos de un mundo (Box2D) y los métodos más frecuentes de SFML, como crear sprites, renderizarlos, tomar teclas por pantalla, etc.
3. Para poder compilar es obviamente necesario tener las clases mencionadas arriba, en las páginas oficiales encontrarán información acorde a diferentes IDE y SO.

Enlace de descarga para codigo fuente dado que son varios archivos he decidido ponerlo en mediafire, y aquí, nada más el main.cpp
http://www.mediafire.com/download/0j8ab99e9fyzhkn/pltaformista.tar.gz
El comprimido contiene:
main.cpp
Player.cpp / Player.h (objeto que representa el jugador)
Blocks.cpp / Blocks.h (objeto que representa plataformas)
Constants.h (constantes que se usan a lo largo del resto del código)

Acá el main.cpp
Código
  1. /*   __                          
  2. /  |                        
  3. (___| ___  ___  ___       ___
  4. |\   |___)|   )|___)(_/_ |   )
  5. | \  |__  |__/ |__   / / |__/
  6.  __/         |    
  7.  *
  8.  *
  9.  * Este software se ha dado tal como es, el autor no se hace responsable
  10.  * del uso que le pueda dar el usuario final. Así mismo se da el derecho
  11.  * de editar, distribuir y utilizar el código a conveniencia, siempre y
  12.  * cuando se de crédito al autor.
  13.  *
  14.  *
  15.  */
  16.  
  17.  
  18. #pragma comment(linker, "/SUBSYSTEM:windows /ENTRY:mainCRTStartup")
  19.  
  20. #include <iostream>
  21. #include <Box2D/Box2D.h>
  22. #include <SFML/Graphics.hpp>
  23. #include <sstream>
  24. #include <ctime>
  25. #include "Constants.h"
  26. #include "Block.h"
  27. #include "Player.h"
  28. #include <stdio.h>
  29. #include <Windows.h>
  30.  
  31.  
  32.  
  33.  
  34. using namespace std;
  35.  
  36. int main() {
  37. sf::Clock clock;
  38. sf::Time time; //Esto es para que el simulador fisico se haga proporcional a los segundos que transcurren por frame
  39. //Inicializamos la camara del juego
  40. sf::View camera;
  41. camera.reset( sf::FloatRect(0,0, (int)width, (int)height) );
  42. camera.setViewport( sf::FloatRect(0, 0, 1.0f, 1.0f) );
  43. float cameraPosition;
  44.  
  45.  
  46. //Inicializacion de Box2D
  47. b2World* world = new b2World(gravity);
  48.  
  49. //Inicializacion del App
  50. sf::RenderWindow App(sf::VideoMode(width, height, 30), "Juego prueba");
  51. App.setKeyRepeatEnabled(true);
  52. App.setFramerateLimit(90);
  53. App.setView(camera);
  54. sf::Event Event;
  55.  
  56.  
  57. Player player(world, 32, 32, sf::Vector2f(30, 30), "playerSprite.png"); //Inicializamos un "jugador"
  58. // Recordar hacer clase nivel/mundo que controle eventos independientemente!
  59.  
  60.  
  61.  
  62. std::vector<Block> bloques;
  63. // Este vector de bloques va a contener plataformas y objetos
  64. sf::Texture grass;
  65. grass.loadFromFile("grass.png");
  66. grass.setRepeated(true);
  67. grass.setSmooth(true);
  68.  
  69. bloques.push_back(Block(world, 3000.0f, 50.0f, sf::Vector2f(-200, height - 50.0f), .5f, false, 0, 0, &grass));
  70. //Esto es un suelo!
  71.  
  72.  
  73. sf::Texture bricks;
  74. bricks.loadFromFile("bricks.jpg");
  75. bricks.setRepeated(true);
  76. bricks.setSmooth(true);
  77.  
  78. bloques.push_back(Block(world, 400.0f, 49.0f, sf::Vector2f(300, 300), .5f, false, .5f, 0, &bricks));
  79. bloques.push_back(Block(world, 400.0f, 49.0f, sf::Vector2f(850, 100), .5f, false, .5f, 0, &bricks));
  80. // Inicializamos algunas plataformas
  81.  
  82. //Agregamos un objeto dinamico...
  83. sf::Texture box;
  84. box.loadFromFile("box.png");
  85. box.setSmooth(true);
  86. bloques.push_back(Block(world, 100.0f, 100.0f, sf::Vector2f(450, 150), .5f, true, .5f,  0.0f, &box));
  87.  
  88. //Inicializamos el fondo del escenario (estatico)
  89. sf::Texture bgTexture;
  90. bgTexture.loadFromFile("desert.png");
  91. bgTexture.setSmooth(true);
  92.  
  93. sf::Sprite bgImg;
  94. bgImg.setTexture(bgTexture);
  95. bgImg.setPosition( sf::Vector2f( 0, 0 ) );
  96.  
  97.  
  98. // Game loop
  99. while (App.isOpen())
  100. {
  101. clock.restart();
  102. // Manejo de eventos
  103. while (App.pollEvent(Event))
  104. {
  105. // Si cierra la ventana se cierra el juego
  106. if (Event.type == sf::Event::Closed)
  107. App.close();
  108.  
  109. // Eventos de teclado
  110. if (Event.type == sf::Event::KeyPressed)
  111. {
  112. //Todo esto se puede cambiar por un switch! recordar cambiar!!
  113. if (Event.key.code == sf::Keyboard::D)
  114. player.Run("right");
  115.  
  116. if (Event.key.code == sf::Keyboard::A)
  117. player.Run("left");
  118.  
  119. if (Event.key.code == sf::Keyboard::W)
  120. player.Jump();
  121.  
  122. }
  123.  
  124. if (Event.type == sf::Event::KeyReleased)
  125. player.Stop();
  126.  
  127.  
  128. }
  129.  
  130. //Limpia Pantalla
  131. App.clear();
  132.  
  133. // DIbuja fondo del escenario
  134. App.draw(bgImg);
  135.  
  136. // Dibuja objetos
  137. for (int i = 0; i < int(bloques.size()); i++)
  138. {
  139. App.draw( bloques[i].GetShape() );
  140. }
  141.  
  142. //Dibuja el player
  143. App.draw( player.GetSprite() );
  144.  
  145.  
  146.  
  147. //Los muestra en pantalla
  148. App.display();
  149.  
  150. // Hace update fisico al mundo
  151. time = clock.getElapsedTime();
  152. world->Step(time.asSeconds(), velocityIterations, positionIterations);
  153.  
  154.  
  155. for (int i = 0; i < int(bloques.size()); i++)
  156. {
  157. bloques[i].Update();
  158. }
  159. player.Update();
  160. player.UpdateSprite();
  161.  
  162. // Movemos la camara para que tenga de centro al objeto player!!
  163. cameraPosition = player.dimentions().x + player.screenPosition().x - width/2;
  164. if (cameraPosition < 0)
  165. cameraPosition = 0;
  166.  
  167. camera.reset( sf::FloatRect( cameraPosition, 0, (int)width, (int)height ) );
  168. App.setView(camera);
  169. // Ponemos el fondo donde se pueda ver....
  170. bgImg.setPosition( sf::Vector2f( cameraPosition, bgImg.getPosition().y ) );
  171.  
  172. }
  173.  
  174.  
  175.  
  176. return 0;
  177. }
  178.  


Screenshot

El bloque que está arriba, puede empujarse, caer, etc.. y luego usarlo como plataforma. El resto de las plataformas no se mueven, son estáticas.

Bueno, eso es todo por ahora, acepto sugerencias y críticas. Si hay algunas personas interesadas, haré un tutorial (o más) detallado(s) sobre este tema.

Saludos  ::)
Páginas: 1 2 [3]
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines