Ver Mensaje Individual
  #3 (permalink)  
Antiguo 05/07/2014, 04:44
Dempo87
 
Fecha de Ingreso: octubre-2013
Ubicación: Murcia
Mensajes: 54
Antigüedad: 10 años, 7 meses
Puntos: 0
Respuesta: Problema Snake

Aprovecho este tema para hacer mi pregunta, tambien sobre el snake.

Estoy intentando imprimir en pantalla la comida usando en el cuerpo del programa una instancia a la funcion (de la clase comida) que genera las coordenadas donde se imprimira la comida, pero no aparece en pantalla. El movimiento de la serpiente y si esta toca las paredes funciona perfecto. Haver si veis algo que yo no veo en la funcion "muestra_comida" de la clase "Comida":

Código C++:
Ver original
  1. // snake.cpp: define el punto de entrada de la aplicación de consola.
  2. #include "stdafx.h"
  3.  
  4. /*Desarrollo del juego
  5. Funciones                Clases
  6.  - pintarParedes         GUI
  7.  - tocar_Paredes         GUI
  8.  - puntuacion            GUI
  9.  - aumentarVelocidad     GUI
  10.  - borrar_serpiente      Serpiente
  11.  - guardar_posicion      Serpiente
  12.  - pintar_serpiente      Serpiente
  13.  - manejo                Serpiente
  14.  - muestra_comida        Comida
  15. */
  16.  
  17. //Incluyendo librerias
  18. #include <cstdlib>
  19. #include <iostream>  //Imprime en pantalla
  20. #include <windows.h> //Definir funcion gotoxy
  21. #include <conio.h>
  22. #include <stdlib.h>  //Para el uso del randon
  23.  
  24. //Incluyendo clases
  25. #include "GUI.h"
  26. #include "Serpiente.h"
  27. #include "Comida.h"
  28.  
  29. //Codigo ASCII para salir del juego
  30. #define ESC 27
  31. ;
  32.  
  33. using namespace std;
  34.  
  35. int main(int argc, char *argv[])
  36. {
  37.     //Declaracion de variables para acceder a sus correspondientes clases
  38.     Gui interfaz;
  39.     Serpiente snake;
  40.     Comida food;
  41.    
  42.     //Variables
  43.     snake.tecla = 'p';    //es una asignacion? es una llamada a una fuincion ?
  44.  
  45.     //snake.serpiente[0][0] = 0;
  46.  
  47.     //Previo al dos
  48.     //asignar valores iniciales a todo !!!!!!!!!
  49.     snake.x = 37;
  50.     snake.y = 13;
  51.  
  52.     //Mostrar interfaz
  53.     interfaz.pintarParedes();    
  54.     snake.pintar_serpiente();
  55.  
  56.     //2. Ejecutar juego
  57.     while((snake.tecla != ESC) && (!(interfaz.tocar_Paredes(snake.x, snake.y)))){
  58.           snake.borrar_serpiente();
  59.  
  60.           //INPUT
  61.           //Duplico la llamada a la funcion "anejo" para usar dos teclas a la vez
  62.           snake.manejo();
  63.           snake.manejo();
  64.  
  65.           //UPDATE
  66.           if (snake.movimiento == 1) snake.y--;
  67.           if (snake.movimiento == 2) snake.y++;
  68.           if (snake.movimiento == 3) snake.x++;
  69.           if (snake.movimiento == 4) snake.x--;
  70.          
  71.           //REDRAW
  72.           //snake.guardar_posicion();
  73.           snake.pintar_serpiente();
  74.        
  75.           //interfaz.puntuacion();
  76.           //interfaz.aumentarVelocidad();
  77.           food.muestra_comida();
  78.        
  79.           Sleep (800);
  80.                
  81.           }//Fin del while
  82.    
  83.     system("PAUSE > null"); //Indicando "Pause > null", quitamos el mensaje de presionar para continuar
  84.     return EXIT_SUCCESS;
  85. }

Código C++:
Ver original
  1. #include <iostream>
  2.  
  3. using namespace std;
  4.  
  5. class Comida{
  6.       public:
  7.              //Constructor
  8.              Comida();
  9.  
  10.              //Atributos
  11.              int comida_X;
  12.              int comida_Y;
  13.              
  14.              //Operaciones
  15.              void muestra_comida();
  16.              
  17.       private:
  18.       };

Código C++:
Ver original
  1. #include "StdAfx.h"
  2. #include "Comida.h"
  3. #include <windows.h>
  4.  
  5. Comida::Comida(){//Constructor
  6.      x = 0;
  7.      y = 0;
  8.      comida_X = 0;
  9.      comida_Y = 0;
  10.      
  11.      }
  12.      
  13. void gotoxy_Comida(int x, int y){
  14.      HANDLE hCon;
  15.      COORD dwPos;
  16.      
  17.      dwPos.X = x;
  18.      dwPos.Y = y;
  19.      hCon = GetStdHandle (STD_OUTPUT_HANDLE);
  20.      SetConsoleCursorPosition(hCon, dwPos);
  21.      }
  22.  
  23. void Comida::muestra_comida(){
  24.      comida_X = 30;
  25.      comida_Y = 15;
  26.      
  27.      //if ((x == comida_X) && (y == comida_Y)){
  28.            comida_X = (rand()%73) + 4;
  29.            comida_Y = (rand()%19) + 4;
  30.            
  31.            gotoxy_Comida(comida_X, comida_Y);
  32.            cout << "\xB8";
  33.            
  34.            //}//Fin del if
  35.      }//Fin de funcion muestra_comida()