lunes, 25 de junio de 2012

Juego de Bolos en C/C++ (Allegro)


El año pasado hice este mini-juego por diversión y revisando el disco duro lo encontré y decidí compartirlo con ustedes, el código no es el mejor pero puede servir de ejemplo para alguien que este interesado en programar juegos con Allegro. Allegro es una librería gráfica multiplataforma así que solo compilen el código en linux/mac o abran el proyecto de Devc++ en window$. Si no es mas acá les dejo el código:

Descargar rapidshare
Descargar mediafire

Nota: para compilar en linux deben agregar `allegro-config --libs` como argumentos en gcc al (o g++) al momento de compilar.

He empezado con un proyecto en android, asi que si me da tiempo publicare tutoriales para crear juegos en C/C++ con Allegro.
Saludos

martes, 19 de junio de 2012

Calcular determinante de una matriz NxM - Java

Aquí les dejo un algoritmo genérico para calcular determinante con cualquier matriz de dimensiones NxM. En esta ocacion en lenguaje Java, pero es facilmente adaptable a cualquier otro lenguaje. Espero le sea útil a alguien.
package calcularDeterminantes;

public class Determinantes {
 
    public int calDeterminante (int [][] matriz)
    {
        int determinante = 0;
        int filas = matriz.length;
        int columnas = matriz[0].length;

        // En caso de que sea una matriz 1x1
        if ((filas==1) && (columnas==1))
        return matriz[0][0];

        int signo=1;
        for (int col=0;col<columnas;col++)
        {
             int[][] submatriz = getSubmatriz(matriz, filas, columnas, col);
             determinante = determinante + signo*matriz[0][col]*calDeterminante(submatriz);
  signo*=-1;
        }
            return determinante;
    }

    public int[][] getSubmatriz(int[][] matriz,int filas,int col,int columna) {
  
         int [][] submatriz = new int[filas-1][col-1];
         int contador=0;
  
         for (int x=0;x<col;x++)
         {
             if (x==col) continue;         
             for (int y=1;y<filas;y++){
                 submatriz[y-1][contador]=matriz[y][x];
             }
         contador++;
         }
  return submatriz;
 }
}

Scripts útiles en bash

Llevaba tiempo sin actualizar el blog, me disculpo por eso la universidad me quitó mucho tiempo con ecuaciones diferenciales y física II, pero ya estoy de vuelta. Esta vez traigo un par de scripts personales que me han facilitado la vida, veamos:

El primero es esencial para mi, programa la maquina para apagarla en "x" minutos, así puedo irme a dormir y continuar descargando algún archivo pesado sin desperdiciar mas energía eléctrica de la necesaria:

#!/bin/bash 
echo "Tiempo de apagado (min): "
read time sudo shutdown -h $time

El segundo es un script que encontre por internet hace un tiempo y le he modificado unos detalles, nos sirve para crear lanzadores en el escritorio (un dolor de cabeza ponerle un icono especifico al eclipse T_T )



#!/bin/bash
read -p "Nombre del lanzador: " NOMBRE # Se nos pide el nombre del lanzador. 
if [ -e /usr/share/applications/$NOMBRE.desktop ]; then # Si el lanzador ya existe... echo "ERROR: El lanzador ya existe. Abortado."
exit # ...salimos del script.
fi read -p "Ruta completa del archivo ejecutable: " RUTAEXE # Se nos pide la ruta completa del archivo ejecutable. 
if [ ! -e $RUTAEXE ]; then # Si el archivo ejecutable no existe... 
echo "ERROR: El archivo no existe. Abortado."
exit # ...salimos del script.
elif [ ! -x $RUTAEXE ]; then # O si el archivo no es ejecutable... 
echo "ERROR: El archivo no es ejecutable. Abortado."
exit # ...salimos del script. 
fi read -p "Ruta completa del archivo de icono: " RUTAICO # Se nos pide la ruta completa del archivo de icono. 
if [ ! -e $RUTAICO ]; then # Si el archivo de icono no existe... 
echo "ERROR: El archivo no existe. Abortado."
exit # ...salimos del script. 
fi echo "[Desktop Entry]" > $NOMBRE.desktop # Creamos el archivo lanzador 
echo "Type=Application" >> $NOMBRE.desktop # escribiendo en él los datos
echo "Terminal=false" >> $NOMBRE.desktop # anteriormente facilitados.
echo "Name=$NOMBRE" >> $NOMBRE.desktop 
echo "Exec=$RUTAEXE" >> $NOMBRE.desktop 
echo "Icon=$RUTAICO" >> $NOMBRE.desktop
echo "Lanzador creado."
echo "Ahora se moverá al directorio '/usr/share/applications/'." 
echo "Introduce tu contraseña de 'root' si es necesario."
sudo chown root:root $NOMBRE.desktop # Hacemos que el lanzador pertenezca a root 
sudo mv $NOMBRE.desktop /usr/share/applications/ # se envia al directorio de los lanzadores. 
read -n 1 -p "Finalizado. Pulsa una tecla para salir..."