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

 

 


Tema destacado: Rompecabezas de Bitcoin, Medio millón USD en premios


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  Snake C++
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Snake C++  (Leído 1,479 veces)
paahca

Desconectado Desconectado

Mensajes: 1


Ver Perfil
Snake C++
« en: 26 Noviembre 2015, 05:51 am »

Buenas noches señores, resulta que tengo que hacer el juego de la culebrita en c++, y ya tengo todo el programa base, lo unico que me falta es hacer una función especial para hacer la matriz transpuesta (el tablero girado ) e invertir los controles (si es arriba vaya abajo, si es derecha vaya a izquierda) con este ultimo punto es que tengo problemas, por favor ayuda.
Esto es lo que tengo

#include <iostream>
#include <windows.h>
#include <conio.h>

using namespace std;

int** crear_matriz_int(int n, int m){
   int** X = new int*[n];
   for(int i = 0; i < n; i++){
      X = new int[m];
   };
   return X;
};

void liberar_matriz_int(int** X, int n, int m){
    for(int i = 0; i < n; i++){
       delete[] X;
    };
    delete[] X;
    return;
};

int** leer_matriz_int(istream& is, int** X, int n, int m){
    for(int i = 0; i < n; i++){
       for(int j = 0; j < m; j++){
           is >> X[j];
       };
    };
    return X;
};

ostream& escribir_matriz_int(ostream& os, int** X, int n, int m){
    for(int i = 0; i < n; i++){
        for(int j = 0; j < m; j++){
           os << X[j];
           if(j < m - 1){
              os << "\t";
           };
        };
        os << "\n";
    };
    return os;
};

ostream& imprime_matriz_game(ostream& os, int** X, int n, int m){
    os << "\n";
    for(int i = 0; i < n; i++){
        for(int j = 0; j < m; j++){
           if(X[j] == 1){
               os << (char)254;
               if(j < m - 1){
                  os << " ";
               };
           }else if(X[j] == -1){
               os << (char)2;
               if(j < m - 1){
                  os << " ";
               };
           }else if(X[j] == -2){
               os << (char)177;
               if(j < m - 1){
                  os << " ";
               };
           }else{
               os << " ";
               if(j < m - 1){
                  os << " ";
               };
           };
        };
        os << "\n";
    };
    return os;
};


int** inicializar_matriz(int** X, int n, int m){
    for(int i = 0; i < n; i++){
       for(int j = 0; j < m; j++){
           X[j]=0;
       };
    };
    return X;
};

int** poner_rastro(int** X, int n, int m){
    for(int i = 0; i < n; i++){
       for(int j = 0; j < m; j++){
           if(X[j] == 1){
               X[j] = -1;
           };
       };
    };
    return X;
};

int** poner_personaje(int** X, int n, int m, int posf, int posc){
    X[posf][posc] = 1;
    return X;
};


int** poner_obstaculos(int** X, int n, int m){
    X[2][0] = -2;
    X[2][1] = -2;
    X[2][2] = -2;
    X[2][3] = -2;
    X[2][4] = -2;
    X[2][5] = -2;
    X[5][4] = -2;
    X[6][3] = -2;
    X[7][2] = -2;
    X[8][1] = -2;
    X[9][0] = -2;
    return X;
};

int calcular_puntaje(int** X, int n, int m){
int puntaje=0;
for(int i = 0; i < n; i++){
      for(int j = 0; j < m; j++){
        if(X[j]==-1){
  puntaje++;
}}}
return puntaje;
};

int** transponer_mapa(int** X, int**Y, int n, int m, int posf, int posc){//transponer

  for(int i = 0; i < n; i++){
       for(int j = 0; j < m; j++){
           Y[j]=X[j];
       };
       Y[posf][posc]=X[posc][posf];
    };
    return Y;
};


int main(){
    int n = 10;
    int m = 10;
    int r = 2;
    int k = 500;
    //ifstream ifs("mat.txt");
    int **A = crear_matriz_int(n,m);
    int **B = crear_matriz_int(n,m);
    char c = 0;
    int x = 0;
    int posf = 4;
    int posc = 3;
    int i;

    int modo = 0;

    do{
        cout << "Bienvenido\n";
        cout << "Digite el modo de juego:\n";
        cout << "1. No Toroidal\n";
        cout << "2. Toroidal\n";
        cin >> modo;
        system("cls"); //limpia pantalla
    }while(modo != 1 && modo != 2);

    A = inicializar_matriz(A, n, m);
    A = poner_obstaculos(A,n,m);

    A = poner_personaje(A, n, m, posf, posc);
    i = 750;

    while((c != 'p')){
       cout << "Presione 'p' para salir\n";
       cout << "fil:" << posf;
       cout << ", col:" << posc;
       cout << ", puntaje:" << calcular_puntaje(A, n, m);

       if(c == 't'){ //aqui se transpone el mapa, me falta cambiar los controles
            A = transponer_mapa(A,B,n, m,posf,posc);
            c = 0;
       };

       A = poner_rastro(A, n, m);
       A = poner_personaje(A, n, m, posf, posc);
       imprime_matriz_game(cout, A, n, m);


       Beep( i, k );
       k -= 10;

       if(k < 10){
        k = 10;
       };

       switch(c){
         case 72:
             posf --;
             if(posf < 0){
                 if(modo == 1){
                    posf = 0;
                 }else{         
                posf=n-1;
                 };
             };
             break;
         case 80:
             posf ++;
             break;
         case 75:
             posc --;
             if(posc < 0){
                if(modo == 1){
                    posc = n;
                }else{         
                  posc=m-1;
                };
             };
             break;
         case 77:
             posc ++;
             break;
       };

       if(modo == 1){ 
          if(posf == n){
            posf = n-1;
          };

          if(posc == m){
            posc = m-1;
          };
       }else{
      if(posf == n){
            posf = 0;
          };

          if(posc == m){
            posc = 0;
          };

       };

       if(A[posf][posc] == -1 || A[posf][posc] == -2){
           cout << "muere!";
           Beep( 900 , 1000 );
           break;
       };

       if(kbhit()){
          c = getch();
       };
       system("cls");
     };

     liberar_matriz_int(A, n, m);

     if (c == 'p'){
          system("cls");
          cout<< "       Gracias por jugar         \n";
          cout<< "             :D ";
          cout<< "\n";
     };
     system("pause");
     return 0;
};


En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
juego SNAKE en C# « 1 2 »
.NET (C#, VB.NET, ASP)
lokot3 14 41,488 Último mensaje 2 Junio 2006, 19:39 pm
por SeniorX
[C] Juego snake
Programación C/C++
Dacan 4 4,959 Último mensaje 22 Marzo 2013, 05:32 am
por Dacan
[Tutorial] Snake en C++/SDL « 1 2 »
Programación C/C++
kaltorak 12 11,928 Último mensaje 20 Agosto 2013, 14:38 pm
por maxim_o
Ayuda con mi programa de Snake Dev C++
Programación C/C++
hidraimbot 0 1,931 Último mensaje 28 Mayo 2016, 03:39 am
por hidraimbot
Poner sonido a Snake HTML5
Programación General
piete2 2 2,678 Último mensaje 29 Septiembre 2017, 22:50 pm
por ivancea96
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines