Menú

Mostrar Mensajes

Esta sección te permite ver todos los mensajes escritos por este usuario. Ten en cuenta que sólo puedes ver los mensajes escritos en zonas a las que tienes acceso en este momento.

Mostrar Mensajes Menú

Mensajes - ssaammuu

#1
Esas dos funciones en rara ocasión son útiles así que pudes borrarlas, es más en la versión 5 de allegro creo que ya no existen. xD

Su movimiento depende de lo que intentes hacer. Se van a mover horizontalmente? verticalmente? movimiento complejo según la posición del jugador? Tendrás que definir los patrones de movimiento que quieres y después implementarlos con funciones matemáticas.

Por lo que veo, el código está bastante mal organizado. Si estás usando C++ usa clases!!

Podrías tener una clase que cree y manipule los marcianos como por ejemplo esta:

class cMarciano{
public:
~cMarciano();

void disparar();

static void anadirMarciano(float x, float y);
static void moverMarcianos();

static vector<cMarciano*> marcianitos;


private:
cMarciano();
float x, y;
};

Donde el constructor es privado para no poderlo llamar directamente. La funcion anadirMarcianos crearia un nuevo marciano y lo añadiría al vector. La función moverMarcianos iteraría el vector moviendo todos los marcianos. A parte le puedes añadir cualquier funcionalidad que veas oportuna.

No hay UNA manera de hacerlo, todo depende de lo que tú prefieras y con lo que mejor te manejes. Pero igualmente usa clases que van a hacer tu código más limpo, mejor estructurado y menos confuso.

:)
#2
Por lo que veo, tu juego no tiene ninguna forma de controlar el tiempo. La velocidad a la que se mueve la barra (y todo lo demas) es proporcional a la velocidad de la máquina donde se corre el programa. Te recomiendo que rectifiques esto. La opción más fácil y que necesita menos cambios en tu código, es "castrar" la velocidad a un FPS fijo, por ejemplo 50 (50 iteraciones por segundo). Esto lo puedes implementar así de fácil.

//codigo...

//funcion FPS constante
#define FPS 30 //o la que quieras
bool proceder = false;
void tiempoTranscurrido() { proceder=true; }

int main()
{
//init tus cosas...
install_timer();

LOCK_VARIABLE(proceder);
LOCK_FUNCTION(tiempoTranscurrido);
install_int_ex(tiempoTranscurrido, BPS_TO_TIMER(FPS));

//tus cosas...

//bucle principal
while (!key[KEY_ESC])
{
if(proceder){
proceder=false;

//aqui lo que va dentro del bucle principal

}
}

//el resto del codigo...


Esto lo que hace es que cada 1/FPS segundos, la función tiempoTranscurrido se ejecute, haciendo proceder=true. Esto nos permite ejecutar el código dentro de if(proceder), es decir el bucle principal, donde igualamos proceder a false, para que no se ejecute otra vez hasta (1/FPS) segundos más tarde. Así tienes una velocidad de juego constante y por ejemplo si tienes x++ dentro de la lógica, sabrás que la posición un segundo más tarde será 30 pixeles a la derecha con un FPS de 30 por lo que te dá mejor manejo.

Espero que esto te ayude. :)
#3
No he leido el código entero pero efectivamente la siguiente línea da error
BITMAP *buffer = create_bitmap(640,480);

Esto debe ir después de iniciar allegro. Pudes dejar la declaración de buffer allí arriba, pero crear el bitmap no puedes hasta que hagas la llamada allegro_init();

:D
#4
No se lo que intentas hacer pero de momento te puedo decir que no es correcto por la sintaxis.
miarreglo[j][j]= miarreglo(j,1);

Me parece que tu lo que quieres es un arreglo de palabras con su respectivo número de apariciones. Si es eso vas a tener que declarar una estructura y despues tener una pila de esa estructura o mejor aun, un vector.

struct sPalabra{
    string palabra;
    int numero;
};

class Tabla {
      private:
              vector<sPalabra> misPalabras;

      public:
             void agrega(string); // agrega pal al arreglo e inicializa su frecuencia en 1, si ya esta pal, aumenta la frecuencia en 1.
             void ordena(void); // ordena el arreglo de acuerdo a su frecuencia(una variable puede guardar la frecuencia de la palabra, siendo la palabra su clave)
             void despliega(void);//imprime en la salida estándar el arreglo ordenado, graficando la frecuencia de aparición de cada palabra.

};


Puedes agregar de esta manera

void Tabla::agrega(string palabra){
    //comprobamos todas las palabras y si se encuentra incrementa el numero
    for (int i=0;i<misPalabras.size();i++){
        if (misPalabras[i].palabra==palabra){
        misPalabras[i].numero++;
        return;
        }
    }
    //si no la agregamos
    misPalabras.push_back(sPalabra{palabra,1});
};


Pero, la verdad es que por la forma de intentar declarar arreglos, tendrías que aprender lo básico antes de saltar a las clases ya que si no te va a costar mucho avanzar.
#5
Primero que te falta un }
En C/C++

miarreglo[][] = ["",0];

Esto no lo puedes hacer

En todo caso:

for (int i=0;i<100;i++){
      miarreglo[i][0] = "";
      miarreglo[i][1] = "";
}
#6

const int max = 100;
string miarreglo[][] = new String [max,2];

No puedes asignarles el valor en la cabecera. Eso debes hacerlo en tabla.cpp A lo mejor te conviene definir max fuera de la clase y tener
string miarreglo[max][2];

También te estás olvidando del constructor y destructor, si quieres crear objetos de la clase vas a necesitarlos.
#7
Vas a tener que enseñar el código que has intentando crear y/o que partes no puedes hacer porque nadie va a crear el programa entero por ti.
#8
Programación C/C++ / Re: Temporizador
28 Abril 2011, 23:39 PM
Al empezar el programa puedes declarar el tiempo de inicio
clock_t tiempo_inicio = clock();

A partir de ahí puedes calcular el número de milisegundos que han pasado con
clock()-tiempo_inicio
#9
Si extraes el valor, este será 1 o 0, si tratamos 1 como booleano verdadero y 0 como booleano falso puedes hacer estado=!estado para cambiar.
#10
Seguramente con
printf("%s");
querías decir
printf("%s",msj);