C++ creando juego simple.Ayuda

Publicado en 'Programación' por Yaphets, 24 Jun 2013.





  1. Yaphets

    Yaphets Miembro frecuente

    Registro:
    5 Ene 2013
    Mensajes:
    110
    Likes:
    4




    Bueno estoy creando un juego simple, ya que recien empiezo a programar en c++.

    El juego consiste en que en un tablero hecho de casilleros , el
    jugador pueda pasar de la zona verde del lado izquierdo(punto de partida), hacia el otro
    extremo verde al lado derecho.

    En el camino existirán ciertos obstáculos que están en constante movimiento horizontal de
    izquierda a derecha y viceversa.

    El jugador es el cuadrado rojo, que debe evadir a los círculos azules y coleccionar los
    círculos amarillos. Una vez que haya recolectado todos los círculos amarillos debe moverse
    hasta la meta verde para pasar al siguiente nivel.

    El puntaje es calculado en base a cuantos movimientos hizo el jugador para llegar a pasar de
    nivel. El puntaje del nivel está dado por la cantidad de movimientos que realiza el jugador en
    completar con los objetivos planteados en el nivel.




    Bueno este es mi codigo:



    #include "stdafx.h"
    #include "stdio.h"
    #include "conio.h"
    #include "windows.h"


    #define FIL 40
    #define COL 80

    #define ARRIBA 72
    #define ABAJO 80
    #define IZQUIERDA 75
    #define DERECHA 77
    #define ESCAPE 27
    #define JUGADOR 2
    #define ENEMIGOS 2

    //funciones para el mapa
    void inicializa_matriz();
    void genera_mapa(int nivel);
    void imprime_mapa();
    void genera_enemigos(int vector_ex[], int vector_ey[], int nivel);
    void mueve_enemigos(int vector_ex[], int vector_ey[], int nivel);
    //funciones de movimiento
    void mover_abajo(int col, int fil);
    void mover_arriba(int col, int fil);
    void mover_izquierda(int col, int fil);
    void mover_derecha(int col, int fil);
    void imprime_jugador(int col, int fil);

    using namespace System;

    //variables globales
    int matriz[FIL][COL];
    int x=COL/2,y=FIL/2;
    int nivel = 0;
    int aparicion = 0;
    //vector para enemigos
    int ex[ENEMIGOS]={0}, ey[ENEMIGOS]={0};
    int accion1=0;
    /*Programa Principal*/
    int main(array<System::String ^> ^args)
    {
    //variables
    char tecla;

    Console::SetWindowSize(80,45);//tama�o de la consola

    genera_mapa(0); //genra mapa para nivel 0
    genera_enemigos(ex,ey,0); //genera enemigos para nivel 0

    int ciclo=0; //cuenta las iteraciones del while(1);
    while(1)
    {
    //Mensajes
    Console::SetCursorPosition(0,42); Console::ForegroundColor = ConsoleColor::Cyan;
    printf("MUEVE EL JUGADOR A LA DERECHA HASTA EL BORDE DE LA PANTALLA");
    printf("\nPARA CAMBAIR DE NIVEL");

    if(_kbhit())
    {
    tecla=_getch();
    switch (tecla)
    {
    case ABAJO:
    y++; mover_abajo(x,y);
    break;
    case ARRIBA:
    y--; mover_arriba(x,y);
    break;
    case DERECHA:
    x++; mover_derecha(x,y);
    break;
    case IZQUIERDA:
    x--; mover_izquierda(x,y);
    break;
    }
    //fin switch
    }
    else
    imprime_jugador(x,y);

    //Control de juego
    if(x==79 && y==20 && nivel==0) //cambiar nivel
    {
    //Aqui reinician las variables que usan: vidas, puntos, etc.
    genera_mapa(1);//nivel 1
    x=10; y=10;
    genera_enemigos(ex,ey,1);
    nivel=1;
    }
    if(x==79 && y==10 && nivel==1) //cambiar nivel
    {
    //Aqui reinician las variables que usan: vidas, puntos, etc.
    genera_mapa(2);//nivel 2
    x=10; y=20;
    genera_enemigos(ex,ey,2);
    nivel=0;
    }

    if(ciclo%500==0) mueve_enemigos(ex,ey,nivel); //Por ejemplo cada vez que la variable ciclo sea divisible entre 500 invoco a la funcion enemigos

    ciclo++;
    }


    _getch();
    return 0;
    }
    /*Fin Programa Principal*/

    void inicializa_matriz()
    {
    for(int i=0;i<FIL;i++)
    for(int j=0;j<COL;j++)
    matriz[j] = 0;
    }

    void imprime_mapa()
    {
    for(int i=0;i<FIL;i++)
    for(int j=0;j<COL;j++)
    {
    Console::SetCursorPosition(j,i);
    Console::ForegroundColor = ConsoleColor::White;
    printf("%c",matriz[j]);
    }
    }

    void genera_mapa(int nivel)
    {
    inicializa_matriz(); //Inicializa la matriz
    Console::Clear;
    if(nivel == 0)
    {
    for(int i=0;i<FIL;i++)
    for(int j=0;j<COL;j++)
    {
    if((i*j)%13 == 0 && i!=20 && i!=21) matriz[j] = 178;
    }
    }

    if(nivel == 1)
    {
    for(int i=0;i<FIL;i++)
    for(int j=0;j<COL;j++)
    {
    if((i*j)%20 == 0 && i!=10 && i!=11 ) matriz[j] = 178;
    }
    }

    if(nivel == 2)
    {
    for(int i=0;i<FIL;i++)
    for(int j=0;j<COL;j++)
    {
    if((i*j)%35 == 0 && i!=10 && i!=11 ) matriz[j] = 178;
    }
    }
    imprime_mapa(); //Imprime la matriz
    }


    //Funciones de Movimiento
    //Funciones de movimiento
    void mover_abajo(int col, int fil)
    {
    Console::SetCursorPosition(col,fil-1); printf("%c",0); //borra el rastro
    imprime_jugador(col,fil);
    }
    void mover_arriba(int col, int fil)
    {
    Console::SetCursorPosition(col,fil+1); printf("%c",0); //borra el rastro
    imprime_jugador(col,fil);
    }
    void mover_derecha(int col, int fil)
    {
    Console::SetCursorPosition(col-1,fil); printf("%c",0); //borra el rastro
    imprime_jugador(col,fil);
    }
    void mover_izquierda(int col, int fil)
    {
    Console::SetCursorPosition(col+1,fil); printf("%c",0); //borra el rastro
    imprime_jugador(col,fil);
    }
    void imprime_jugador(int col, int fil)
    {
    Console::SetCursorPosition(col,fil);
    Console::ForegroundColor = ConsoleColor::Yellow;
    printf("%c",JUGADOR);
    }

    void genera_enemigos(int vector_ex[], int vector_ey[], int nivel)
    {
    Random r;

    if(nivel==0)
    {
    for(int i=0; i<ENEMIGOS; i++)
    {
    vector_ex = r.Next(10,20);// de 10 a 19 en el eje X
    vector_ey = r.Next(10,40);// de 10 a 39 en el eje Y
    }
    }

    if(nivel==1)
    {
    for(int i=0; i<ENEMIGOS; i++)
    {
    vector_ex = r.Next(50,70);// de 50 a 70 en el eje X
    vector_ey = r.Next(20,30);// de 20 a 29 en el eje X
    }
    }

    if(nivel==2)
    {
    for(int i=0; i<ENEMIGOS; i++)
    {
    vector_ex = r.Next(10,30);// de 10 a 29 en el eje X
    vector_ey = r.Next(15,35);// de 15 a 34 en el eje X
    }
    }
    }

    void mueve_enemigos(int ex[], int ey[], int nivel)
    {
    for(int i=0;i<ENEMIGOS;i++)
    {
    if(nivel == 0)
    {
    if (ex == 19) accion1=1; //accion1 controla si se va a la derecha o a la izquierda y es una variable global
    if (ex == 10) accion1=0;
    }
    if(nivel == 1)
    {
    if (ex == 69) accion1=1; //accion1 controla si se va a la derecha o a la izquierda y es una variable global
    if (ex == 50) accion1=0;
    }
    if(nivel == 2)
    {
    if (ex == 29) accion1=1; //accion1 controla si se va a la derecha o a la izquierda y es una variable global
    if (ex == 10) accion1=0;
    }
    if (accion1==0) { ex++; Console::SetCursorPosition(ex-1, ey); printf(" "); }
    if (accion1==1) { ex[i]--; Console::SetCursorPosition(ex[i]+1, ey[i]); printf(" "); }
    Console::ForegroundColor = ConsoleColor::Red;
    Console::SetCursorPosition(ex[i], ey[i]); printf("%c",15);
    }
    }





    [SIZE="3"][COLOR="blue"][COLOR="blue"]gracias de antemano[/COLOR][/COLOR][/SIZE][/i][/i][/i][/i][/i]