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// snake.cpp: define el punto de entrada de la aplicación de consola.
#include "stdafx.h"
/*Desarrollo del juego
Funciones Clases
- pintarParedes GUI
- tocar_Paredes GUI
- puntuacion GUI
- aumentarVelocidad GUI
- borrar_serpiente Serpiente
- guardar_posicion Serpiente
- pintar_serpiente Serpiente
- manejo Serpiente
- muestra_comida Comida
*/
//Incluyendo librerias
#include <cstdlib>
#include <iostream> //Imprime en pantalla
#include <windows.h> //Definir funcion gotoxy
#include <conio.h>
#include <stdlib.h> //Para el uso del randon
//Incluyendo clases
#include "GUI.h"
#include "Serpiente.h"
#include "Comida.h"
//Codigo ASCII para salir del juego
#define ESC 27
;
using namespace std;
int main(int argc, char *argv[])
{
//Declaracion de variables para acceder a sus correspondientes clases
Gui interfaz;
Serpiente snake;
Comida food;
//Variables
snake.tecla = 'p'; //es una asignacion? es una llamada a una fuincion ?
//snake.serpiente[0][0] = 0;
//Previo al dos
//asignar valores iniciales a todo !!!!!!!!!
snake.x = 37;
snake.y = 13;
//Mostrar interfaz
interfaz.pintarParedes();
snake.pintar_serpiente();
//2. Ejecutar juego
while((snake.tecla != ESC) && (!(interfaz.tocar_Paredes(snake.x, snake.y)))){
snake.borrar_serpiente();
//INPUT
//Duplico la llamada a la funcion "anejo" para usar dos teclas a la vez
snake.manejo();
snake.manejo();
//UPDATE
if (snake.movimiento == 1) snake.y--;
if (snake.movimiento == 2) snake.y++;
if (snake.movimiento == 3) snake.x++;
if (snake.movimiento == 4) snake.x--;
//REDRAW
//snake.guardar_posicion();
snake.pintar_serpiente();
//interfaz.puntuacion();
//interfaz.aumentarVelocidad();
food.muestra_comida();
Sleep (800);
}//Fin del while
system("PAUSE > null"); //Indicando "Pause > null", quitamos el mensaje de presionar para continuar return EXIT_SUCCESS;
}
Código C++:
Ver original#include <iostream>
using namespace std;
class Comida{
public:
//Constructor
Comida();
//Atributos
int comida_X;
int comida_Y;
//Operaciones
void muestra_comida();
private:
};
Código C++:
Ver original#include "StdAfx.h"
#include "Comida.h"
#include <windows.h>
Comida::Comida(){//Constructor
x = 0;
y = 0;
comida_X = 0;
comida_Y = 0;
}
void gotoxy_Comida(int x, int y){
HANDLE hCon;
COORD dwPos;
dwPos.X = x;
dwPos.Y = y;
hCon = GetStdHandle (STD_OUTPUT_HANDLE);
SetConsoleCursorPosition(hCon, dwPos);
}
void Comida::muestra_comida(){
comida_X = 30;
comida_Y = 15;
//if ((x == comida_X) && (y == comida_Y)){
comida_X
= (rand()%73) + 4; comida_Y
= (rand()%19) + 4;
gotoxy_Comida(comida_X, comida_Y);
cout << "\xB8";
//}//Fin del if
}//Fin de funcion muestra_comida()