domingo, 20 de febrero de 2011

ACDC v1 Acid Demostration Calculator

acdc

Se trata de una calculadora básica diseñada para servidores que siguen la normativa Gravity, es decir “originales”, la formula y damage esta basado en las especificaciones proporcionadas por iRO-Wiki en el siguiente enlace:  http://irowiki.org/wiki/Acid_Bomb

Especificaciones:

Java Version “1.6.0.21” O superior
Pantalla: 800 x 600 pixeles o superior
Multiplataforma
Procesador 1.0 Ghz o Superior
Memoria 512 Ram o Superior.

Descargar enlace:http://depositfiles.com/files/gi91zqvto

lunes, 24 de enero de 2011

Implementando interfaces en Java

Una de las ventajas de la programación orientada a objetos es la posibilidad de poder crear un código mucho más elegante, ordenado y reutilizable frente a la programación estructurada; esta vez vamos a hablar un poco de las interfaces utilizadas en la programación basada en Java; cabe de señalar que este mismo concepto se puede a aplicar a la programación en C++.
Definición Informal de una interfaz: según la Wikipedia es una colección de métodos abstractos y propiedades. En ella se especifica que es lo que se debe hacer pero no su implementación.
Cómo un ejemplo práctico realizare una pequeña interfaz que despliegue el mensaje “Hola Mundo”, el editor que utilizaré para este ejemplo es BlueJ.
Primero crearemos un nuevo proyecto al cual yo le he puesto interfaces, ustedes pueden optar por el nombre que quieran.

Ahora crearemos una interfaz (interface) a la cual yo le puse por nombre data, está interfaz incluye el siguiente código:
public interface data{ 
 public String holaMundo(String mensaje);
}

holaMundo, es el método que será implementado a futuro por otras clases, esta interfaz en su diseño almacenará información de datos dados por el usuario, pero en este ejemplo solo utilizaré un método para desplegar el mensaje; cabe de señalar que una interfaz puede incluir datos miembros los cuales deben de declararse como static o final.
Ahora creare una nueva clase la cuál ha de implementar los métodos de la interfaz, a esta clase yo le he puesto el nombre de “metodos”, está incluye el siguiente fragmento de código:
public class metodos implements data
{
  public metodos(){
    } 
   public String holaMundo(String mensaje){
        return mensaje;
    }
}
Está clase implementa los métodos de la interfaz llamada data, aquí se realizan las operaciones básicas de los métodos de la interfaz.
Por último crearemos la clase principal que controla el programa para ver nuestro método en función.
public class principal
{
   
    /**
     * Constructor for objects of class principal
     */
    public principal()
    {
      }
    public static void main (String [] arguments){
        metodos m= new metodos();
        System.out.println (m.holaMundo("Hola Mundo"));
    }
}
Como podemos observar, el uso de interfaces hace un poco más elegante el código ayudando de una forma a reutilizar las clases e interfaces en futuros programas, así nos ahorraremos líneas de código a futuro.

lunes, 1 de noviembre de 2010

No es lo mismo estudiar para un examen de cálculo que programar.

Hace unos días, para ser exactos el día jueves 28 de octubre presentamos el examen de programación avanzada, ciertamente para algunos un examen común y corriente "facil" en el contexto, pero para otros su peor pesadilla. 

Escribo este artículo como una reflexión personal, centrándome en dos materias importantes, aunque con fines diferentes.

¿Por qué estudiar para un examen de programación es distinto que para uno de matemáticas?, aunque son afines tienen sus diferencias, en matemáticas los algoritmos para la resolución del problema ya están predefinidos, es, solamente seguir los pasos tal cual se te han indicado; programación difiere mucho, pues, para poder concebir un programa dispones de un sinfín de alternativas para poder estructurarlo, entonces ¿por qué a muchos se les dificulta entender los algoritmos cuándo son buenos en materias como álgebra o cálculo?, puedo deducir que tal vez no les guste la materia de programación o que simplemente no ponen empeño en entenderla, el intentar estudiar "programación" como se si tratase de una materia más dentro de la curricula de estudios, seguir los pasos tal cual el maestro los dio... supone un grave problema a la hora de la resolución del algoritmo, pues, para programar lo primero que siempre se debe tomar en cuenta es ¿qué se quiere hacer? o ¿qué se quiere solucionar?.

Muchas veces he observado que intentan solucionar el problema tal cual se determina, intentando seguir los pasos de alguien que ya tiene estructurado su cerebro de tal manera que, cuándo se le entrega un problema de programación ya sabe lo que tiene que hacer. Programar, no es directamente sentarse a escribir millones de líneas de código a lo loco, se trata de comprender la problemática, que variables hay en juego así como determinar la mejor solución, pero para determinar la mejor solución debes de esforzarte en estudiar y entender para que te va a servir a futuro lo que estas estudiando, esto significa que no solo estudies por estudiar para pasar un examen, se trata de comprender los conceptos, de saber de que se te esta hablando, que alguien lleve ya varios años programando no significa que tú no puedas aprender a hacerlo, pues se supone que la persona que te lleva ventaja en un momento en su vida estúbo como estas ahorita tú... aprendiendo, pero ¿qué marca la diferencia? tal vez esa persona dedico el tiempo suficiente para aprender, le cayo el 20 de que ya estaba en la Universidad en segundo año de Ingenieria en Sistemas, se volvio autodidacta, aprendio a resolver las cosas. 

¿Por qué estudiar programación?, a caso no vez lo que puedes crear con semejante arma "la mente", o quieres ser otro borreguito Facebookcero, twittero, MySpacero, Chateador, que solo le interesa pasar, obtener un título más, sumarse a la lista de "pseudo-titulados" que al final dicen no hay trabajo?, si tan solo abrieras la mente un poco, pensaras... bien, me lleva tantas horas resolver un problema de Cálculo... ¿por qué no lo programo?, así tanto ejercitas tu práctica como programador, como repasas en paralelo algo de cálculo o de otra materia. 
No esperes que alguien te enseñe a programar, pues programación es un arte, en la cual, el artista principal eres tú, donde esa arte se puede embellecer aplicando un poco de disciplina; esa disciplina implica ser autodidacta y el ser autodidacta te abre mucho más posibilidades de posicionarte en el campo profesional por el conocimiento adquirido.

for (int i=0; i<=3; i++)
{
  printw("Hola Mundo");  
}

do{
   printw("hola mundo");
  i++;
}while (i<=3);

Las barreras solo tu te las pones, programar no es lo mismo que derivar, la soltura para resolver un algoritmo es lo que hace de la programación una de las disciplinas más versátiles para explotar la imaginación y el C.I.

lunes, 23 de agosto de 2010

Customizando algunas skills de Ninja (eAthena)

Esta vez, liberare algunas skills que edite para el servidor Stille-RO, el cual es un servidor elemental de Rates /30/30/ en desarrollo con las terceras class.

Las skills que se editaron fueron las siguientes:

Skill: Throw Shuriken
Formula: Skill * 4
Formula Stille: Skill * 200
Incrementa el daño de un shuriken (Ítem no arma 13250) acorde al nivel de la skill por 200.

El código fuente de esta skill queda de la siguiente manera:

En el archivo battle.c del emulador buscaremos la siguiente línea:

                    case NJ_SYURIKEN:
                         ATK_ADD(4*skill_lv);
                    break;

El ATK_ADD  se edita por el valor que queramos que el ninja pegue con está skill, si nuestro servidor es custom, en el caso de Stille-RO se estableció en valor 100*skill_lv que es un valor justo para el player en un pvp.


Skill: Thow Kunai
Formula: Agrega un 60% de Atk por skill Level.
Formula Stille: Agrega 100% de Atk Por Skill Level.

En el archivo battle.c del emulador buscaremos la siguiente línea:

if (skill_num == NJ_KUNAI)
                ATK_ADD(60);

El ATK_ADD se editar por el valor que queremos que el ninja pegue con está skill, si nuestro servidor es custom, en el caso de Stille-RO se estableció en valor 100, que es un valor justo para el player en un pvp/woe de manera que el ATK_ADD queda ATK_ADD(100);
               


Skill: Soul.
Formula: Skill Level * 1
Formula Stille: Skill Level * 2
Descripción: Incrementa Status Str/Int en 2*Skill Level

Está skill incrementa los valores de Str e Int en 1 * Skill Level, o sea que en nivel 5 de esta skill nosotros obtenemos str +5 e int +5, pero si queremos modificar este valor, editaremos la siguiente línea en el archivo status.c

if(sc->data[SC_NEN]) //Esto es para editar el valor de STR.
        str += sc->data[SC_NEN]->val1;

cambiamos str+=sc->data[SC_NEN->val1*2; // El 2 indica el multiplicador para los nuevos status, es decir que ese 2 se ira multiplicando por el nivel de la skill para obtener el nuevo valor de Str que en 5 sería STR + 10 y no 5 como anteriormente estaba configurado, el 2 puede ser cambiado por cualquier otro multiplicador que se adecue a nuestro servidor.

Para cambiar el valor de INT buscamos la siguiente línea de código que también esta en status.c

if(sc->data[SC_NEN])
        int_ += sc->data[SC_NEN]->val1

De igual forma agregamos un *2 en el val1 de manera que quedará int_ += sc->data[SC_NEN]->val1*2


Skill: Final Strike:
Descripción: Consume todo el hp del usuario en un solo ataque.
Descripción 2 Stille: Consume todo el SP del usuario en un solo ataque.

Está skill es muy conocida porque sacrifica todo el HP del ninja, nosotros en el servidor decidimos hacer un cambio sacrificando el SP del Ninja, para ello solamente editamos la siguiente línea de código que se localiza en el archivo battle.c

             case NJ_ISSEN:
                wd.damage = 40*sstatus->str +skill_lv*(sstatus->hp/10 + 35);
                wd.damage2 = 0;
                status_set_hp(src, 1, 0);
                break;

Y la dejamos de la siguiente manera:

              case NJ_ISSEN:
                wd.damage = 40*sstatus->str +skill_lv*(sstatus->hp/10 + 35);
                wd.damage2 = 0;
               //Está modificación fué realizada por remmi para Stille-RO
                status_set_sp(src, 1,0); //Convertir el SP a 0
                break;

De forma q’ ahora se consume todo el SP del jugador en lugar de su HP.

Es importante recalcar que estas customizaciones son en base a nuestro servidor :) pero igual pueden servir para otros.

Saludos

miércoles, 28 de julio de 2010

Mathematica: Sumar dos números

Una de las potencialidades de las cuales disfrutas de programar en Wolfram Mathematica, es la posibilidad de, construir pequeños módulos (scripts) que te permitan hacer cálculos repetitivos y tediosos, en esta ocasión y por ociosidad haremos un pequeño script en Mathematica, que dado dos números A y B introducidos por el usuario realice la condición de suma.

Para poder realizar está operación, nos valdremos del uso de un Panel y de la condición de un modulo dinámico (DynamicModule) que, cuando el usuario digite los dos números estos, automáticamente realicen la suma.

Veamos el código de la aplicación:

Panel[DynamicModule[{resultado = valora + valorb, valora = 0,
   valorb = 0},
  Panel[Grid[{{"Número A:",
      InputField[Dynamic[valora], FieldSize -> 3]}, {"Número B:",
      InputField[Dynamic[valorb], FieldSize -> 3]}, {"Resultado:",
      InputField[Dynamic[resultado], Enabled -> False,
       FieldSize -> 5]}}]]]]

Está es una forma sencilla y rápida de resolver un problema en el cual la velocidad de procesamiento para un resultado eficaz, Wolfram Mathematica podrá servir.

Y este es el resultado del Script:

image

sábado, 5 de junio de 2010

Eliminar un carácter de una cadena con Java.

Esta es una tarea que le dejaron a una amiga., es un código sencillo que busca un caracter, en este caso la letra “a” para eliminarla de la cadena introducida.

Clase: Fundamentos de Programación.

public class nombre
{
     public nombre()
    {
    }
    public void re(String Nombre1){
        int c= Nombre1.length();
        System.out.println ("Nombre Original:  "+Nombre1);
          for (int contador =0; contador<c; contador++){
            if (Nombre1.charAt(contador)=='a'){
                Nombre1.replace('a',' ');
            }
            else{
                System.out.print(Nombre1.charAt(contador)+ "");
            }
        }
}

    public static void main (String [] arguments){
        nombre n = new nombre();
        n.re("Javier Martinez");

    }

}

viernes, 4 de junio de 2010

Rombo con Java.

Escribir un programa que visualice el siguiente dibujo:

image

public class rombo
{

   public static void main (String [] arguments){
    char espacio = ' ';
    char asterisco = '*';
    for (int i= 1; i<=5; i++){
           for (int espacios = 5 - i; espacios >0; espacios--)      
                System.out.print(espacio);
                 for (int lineas = 1; lineas < 2 * i; lineas++)
                   System.out.print(asterisco);
                    System.out.println("");
        }
        for (int i= 4; i>=1; i--){
           for (int espacios = 5 - i; espacios >0; espacios--)      
                System.out.print(espacio);
                 for (int lineas = 1; lineas < 2 * i; lineas++)
                   System.out.print(asterisco);
                    System.out.println("");
        }
    }
}

domingo, 23 de mayo de 2010

Como crear un Hola Mundo con Silverlight 2a Parte

En el post anterior, vimos como escribir el mensaje “Hola Mundo”, cuando el usuario presiona el botón saludar, se dispara el evento de saludo, pero ahora ¿cómo le hacemos si queremos que nuestra aplicación pida también el nombre del usuario para saludarlo?

En este post aprenderemos a utilizar el TextBox, un componente que nos permitirá introducir información en una aplicación.

Paso 2: En la barra de Herramientas (Como anteriormente habiamos dicho la que esta al lado izquierdo) buscamos el "objeto” llamado TextBox, el cual arrastraremos a nuestra área de programación, de igual forma arrastramos una “Label” y lo colocamos delante del TextBox que ya hemos colocado en nuestra área de desarrollo.

En el área de programación XAML buscamos la nueva etiqueta y cambiamos Name: label1 por Name= “dNombre”, y agregamos un Content con la siguiente frase: Content= “Escriba su nombre”, el nuevo código del label quedará de la siguiente manera:

<dataInput:Label Height="23" HorizontalAlignment="Left" Margin="114,12,0,0" Name="dNombre" VerticalAlignment="Top" Width="114" Content="Escriba su nombre:"/>

También el TextBox lo tendremos que editar, en este caso solo cambiaremos el Name=”TextBox1” por Name=”leeNombre”, de forma que el nuevo código queda:

<TextBox Height="23" HorizontalAlignment="Left" Margin="234,12,0,0" Name="leeNombre" VerticalAlignment="Top" Width="120" />

Abrimos de nuevo el archivo MainPage.xaml.cs, buscamos la línea de código correspondiente al botón (Evento de Botón). En mi caso fue

private void SaludarUsuario(object sender, RoutedEventArgs e) {

       saludo.Content = "Hola Mundo";

   }

En este método agregaremos nuevas lineas de código para que nuestra aplicación Silverlight ahora salude al usuario.

creamos una variable String llamada nombre, ahora asignaremos el contenido del TextBox1 (al cual le pusimos leeNombre) a esta variable de la siguiente manera:

nombre = leenombre.Text;

Ahora solo falta desplegar el mensaje al usuario:

saludar.Content = "Hola "+nombre+" un gusto tenerte aquí.";

los símbolos de + significa que estamos concatenando cadenas y que el contenido que este antes y después de estos símbolos serán mostrados también.

El nuevo método del botón saludar luce así:

private void SaludarUsuario(object sender, RoutedEventArgs e) {

        String nombre;
        nombre = leeNombre.Text;

        saludo.Content = "Hola "+nombre+" un gusto.";
    }

Ahora solo falta probar nuestra aplicación, para ello presionamos F5 para comprobar que nuestra aplicación funciona.

image

Efectivamente nuestra aplicación esta funcionando

Hasta ahorita ya aprendimos como leer datos, como mostrar información y como programar eventos, en post posteriores iremos profundizando con el tema de la programación con silverlight.

viernes, 21 de mayo de 2010

Como crear un hola mundo con SilverLight + C#

En este tutorial mostraremos el funcionamiento básico de los eventos en Silverlight utilizando C# para crearlos, para poder seguir este tutorial necesitaremos tener instalado Visual Studio 2008 o Visual Studio 2010, Microsoft Silverlight versión 3 o 4.

Paso 1

Comenzaremos por ejecutar VisualStudio, una vez que tengamos cargada la interfaz de proyecto, crearemos un nuevo proyecto, para ello, nos dirigimos al Menú Archivo –> Luego Nuevo y seleccionaremos –> “Nuevo Proyecto”.

Nos aparecerá la ventana de proyectos:

 image

Figura 1.

Del lado izquierdo nos aparecerá los tipos de proyectos que podemos desarrollar (plantillas) y los lenguajes de programación que tenemos instalado en Visual Studio en el momento. Seleccionamos C# –> Nos dirigimos a Silverlight de lado derecho tenemos las “plantillas” con las que podemos trabajar, seleccionaremos “Silverlight Application”

image

Más a la derecha tenemos la descripción de la plantilla y el tipo de lenguaje con el que se trabajará.

En la parte inferior de la ventana tenemos Name: está opción hace referencia al nombre que llevará el proyecto.

Le pondremos “holamundo”

Paso 2: Interfaz de Programación

imageUna vez que ya completamos de llenar los campos de la ventana anterior, nos aparecerá el área de trabajo, la cual esta constituida de la siguiente manera:

  1. Herramientas (ToolBox), al lado izquierdo, que no son más que una serie de “objetos” que nos permitirán desarrollar nuestra aplicación Silverlight
  2. Área de programación (medio). Es el área donde se ubica la aplicación a ser desarrollada y las plantillas a ser programadas.
  3. Explorador de Soluciones ( lado derecho) Contiene los proyectos que tengamos abiertos al momento, en nuestro caso notaremos que tenemos un holamundo con el icono de C# (está es la aplicación en si), y un holamundo.web, este último genera un sitio web para que la aplicación silverlight sea cargada en tiempo de ejecución.

Paso 4: Programando

Para ello buscaremos un botón en nuestra área de Herramientas (barra izquierda), y seleccionamos el botón, posteriormente lo “arrastramos” a nuestra área de trabajo, lo mismo hacemos con un componente de tipo Label.

Buscamos un código similar al siguiente en el XAML

<Button Content="Button" Height="23" HorizontalAlignment="Left" Margin="12,12,0,0" Name="button1" VerticalAlignment="Top" Width="75" />

En el cual sustituiremos el Content=”Button” por Content=”Saludo” y Name=”button1” por Name=”saludar”

Lo mismo haremos con el componente Label

<dataInput:Label Height="37" HorizontalAlignment="Left" Margin="63,88,0,0" Name="label1" VerticalAlignment="Top" Width="215" />

Nada más que en este caso cambiamos Name=”label1” por Name=””saludo” y agregamos Content=””

Hora de codificar.

Boton: Seguido de Name=”saludar” agregamos un nuevo evento con la siguiente propiedad. Click="SaludarUsuario"

En nuestro explorador de soluciones buscamos el siguiente archivo: MainPage.xaml.cs, en el cual programaremos todos los eventos que nuestra aplicación realizará.

image

Abrimos dicho archivo,  después de la inicialización de componentes crearemos un nuevo evento como se muestra a continuación.

private void SaludarUsuario(object sender, RoutedEventArgs e)
      {

              saludo.Content = “Hola Mundo”;

      }

Finalizamos la edición de código, precionamos la tecla F5

image

Cuando el usuario haga clic en el botón Saludo, automáticamente se desplegará el mensaje de Hola Mundo.

image

Y así es como hemos desarrollado una aplicación rápida y sencilla con Silverlight, en el siguiente artículo continuaremos con la lectura de datos.

Para ver este ejemplo en ejecución visita: http://ghalis.net/javier/silver/practica1/

domingo, 18 de abril de 2010

Hace un año lanzaron Sensucht ahora conmemorando su 20 aniversario Lacrimosa nos presenta su nuevo álbum



Casi a cumplirse un año de haber lanzado el álbum Sensucht, que en lo personal no fue mucho de mi agrado, desde el día 17 de Abril, la banda de música ¿Gothica?, Lacrimosa nos ira presentando en su página oficial  fragmento de las nuevas canciones que integran este álbum conmemorativo que sale a su venta en México el próximo 7 de mayo, canciones ineditas jamás lanzadas estarán presente en este álbum, destacando la versión extendida de CopyCat, y dos nuevas producciones Sellador y Onhe Dich Ist  alles nichts, esperando con ansías escuchar los experimentos musicales de esta banda :), que se convirtió en una de mis favoritas por las mezclas instrumentales y orquestales que realizan.