15 de Agosto de 2018

Archivo para Abril de 2009 en Ctrl+Alt+Supr, blog de Ollydbg

Mira que he visto cosas raras en esto "de los ordenadores". Pero lo que me ha pasado hoy supera con creces todo lo que conocía.
Desde hace tiempo pertenezco al club de "el tio que sabe de ordenadores", el familiar al que llama el primo del cuñado del hermano de tu tía, o directamente el "bicho raro" que te instala Windows un sabado por la tarde a cambio de un par de cervezas ;)

Total, llego hoy al curro y después del cafelito de rigor, me dispongo a mirar si tengo algún correo nuevo.
Después de borrar los mensajes para alargar el miembro viril y los de las "pastillitas azules" me encuentro con el e-mail de un colega:

"Oye tronco, tienes que pasarte por casa. No se que koño pasa, pero cada vez que pulso en el icono del internet se va la luz de casa. A ver si puedes llamar o algo xq estoy mosca y no se si he roto algo del ordenador. Un abrazo del loco de la colina"

He de reconocer que tuve que leer el mensaje un par de veces. ¿Qué se va la luz de casa cuando entras en internet? Pero que cojo...

Total, salgo de curro y voy directo a su casa. Después de un rato charlando tomando unas cervezas, le digo. ¿bueno qué, vamos al "lio"?

Le digo a mi colega que haga como si yo no estuviese alli y que repita los pasos. Se sienta delante del ordenador, lo pone en marcha, y después de mas o menos un minuto ya estaba en el escritorio de Windows.

Abr
26

.NET Tutorial 6. Animación sprites (Parte I)

Categorías: ,

Pues bien, ha llegado la hora de hacer un resumen de todo lo que hemos ido aprendiendo en los anteriores tutoriales. LLegados a este puento ya deberíamos ser capaces de hacer algo como esto:

Para ver este video es necesario tener JavaScript activado y el plugin Flash instalado en el navegador.

Una animación 2D consta básicamente de una serie de fotogramas, que mostrados uno detrás de otro dan la sensación de movimiento.

Existen varias formas de almacenar dichos fotogramas. Nosotros vamos a utilizar lo que en el argot se conoce como sprite sheets. Los sprite sheets son una "mega-imagen" con todos los fotogramas que componen la animación, en nuestro caso usaremos la siguiente imagen:

Alguno/a puede estar pensando que también es posible utilizar una imagen por fotograma. De hecho es perfectamente posible, pero cuando se empiezan a tener muchas secuencias, puede ser un poco "caótico" buscar entre 2000 ficheros, no sé si me entendéis ;)

Pues bien, ¿cómo funcionará nuestro programa?:

Abr
25

.NET Tutorial 5. Sprites, gráficos y bitmaps (Parte III)

Categorías: 

Ahora que sabemos cómo dibujar un sprite, ¿Os parece que dibujemos, no sé, 500?

Cuando querramos manejar "más de una cosa", tendremos que empezar a pensar en usar Arrays.

Arrays? WTF!!!. ¿De qué me estás hablando tronco? ;)

Un array es un conjunto de elementos que pertenecen a un mismo tipo. Por poner un ejemplo simple y fácil de entender:

Lunes, martes, miercoles, jueves, viernes, sabado, domingo son elementos de un mismo tipo, en este caso, todos son días de la semana.
Imaginad por un momento que necesitais asignar un determinado valor a cada día:
Lunes = 1
Martes = 2
Miercoles = 3
Jueves = 4
Viernes = 5
Sabado = 6
Domingo = 7

Bien, podemos hacerlo como arriba o podemos definir un array de 7 elementos, y rellenar dicho array con un bucle:

For i = 1 to 7
DiasSemana (i) = i
Next

DiasSemana es un array de 7 elementos. Según el bucle FOR, el elemento 1 vale 1, el elmento 2 vale 2...

Bien, ahora deteneos y pensad por un instante: ¿y si en lugar de 7 elementos tengo 1000?:

Abr
24

.NET Tutorial 4. Controlando lo incontrolable: Unhandled Exceptions

Categorías: 

Ocurre en ocasiones que no se puede evitar lo inevitable. Ya lo decía Murphy: "Cualquier cosa que pueda ir mal, ... irá mal".

Como norma general es buena práctica poner bloques Try / Catch en nuestro código. Esto no evitará el error en sí, pero podremos tomar "contramedidas" frente a dicho error.

Está claro que no podemos ir poniendo bloques Try / Catch linea sí  y línea no en nuestro código, ya que sino seía un caos. Pondremos estos bloques donde a priori pensamos que puede producirse un error,cómo por ejemplo aqui:

Try
Escribe_Cosas_En_El_Disco_Duro ( )
Catch

Mensaje "Ops, ocurrió el error X al escribir en el disco"
End Try

En ese caso podemos preveer que puede ocurrír cualquier "desastre" que nos impida escribir en el disco duro: El disco duro está lleno, no tienes permiso de escritura o yo que sé.

Sin embargo, a veces ocurren cosas "no esperadas", en el sitio menos esperado y donde a priori "aquello debería haber funcionado bien". En esta situación, Windows nos muestra este "bonito" mensaje:

Abr
21

.NET Tutorial 3. Sprites, gráficos y bitmaps (Parte II)

Categorías: 

Ahora que ya sabemos dibujar un sprite sobre un fondo, vamos a dibujarlo "bien". Con "bien" me refiero a que el proceso se va a acelerar entre un 200% y un 400%.
Aunque los ordenadores hoy en día son muy potentes no está de más optimizar un poco el código, ya que en juegos o programas más complejos van a intervenir multitud de secuencias algorítmicas que tendrán en cuenta multitud de situaciones posibles. Por lo tanto, cuanto más optimicemos mejor, ya que todo irá más fluido.

Tal y cómo vimos en el Tutorial 2, utilizabamos un objeto Graphics y un objeto Bitmap.

Teniamos un Timer que cada 'x' milisegundos copiaba el bitmap del fondo y el bitmap del sprite al "bitmap" asociado con el objeto Graphics. Finalmente copiabamos este "bitmap" en la propiedad Image de nuestro PictureBox.

Pues bien, existe una forma muchísimo más eficiente (y por lo tanto más rápida) de conseguir el mismo resultado.

Por lo pronto vamos a prescindir del PictureBox y vamos a "pintar" directamente sobre el formulario.

También vamos a prescindir del Timer que se encargaba que llamar a la rutina de "Renderizado".

Abr
19

.NET Tutorial 2. Sprites, gráficos y bitmaps (Parte I)

Categorías: 

Pues bien, ha llegado el momento de hacer algo más "vistoso".

En esta entrega vamos a ver como es posible mover un "gráfico" sobre un determinado fondo. Tenemos que tener claro una serie de conceptos:

Background: Será la imagen de fondo de nuestro "juego"
Sprite: Serán todos aquellos elementos (en este ejemplo sólo uno) que pueden "moverse" o con los que el jugador puede interaccionar.

Todo esto lo haremos usando el GDI+ del .NET Framework. Ya habrá tiempo de meterse en camisas de once varas con XNA, OpenGL, DirectX, etc. Obviamente los resultados no son ni por asombro parecidos a usar XNA o similares, tanto en calidad como en rendimiento, pero mi idea es ir paso a paso pero con buena letra ;)

Nuestro "Background":

Nuestro "Sprite":

Resultado: (el sprite se va moviendo por la pantalla)

Para usar el GDI+ tendremos que definir dos cosas:

Abr
19

.NET Tutorial 1. Herencia y polimorfismo (Parte I)

Categorías: 

En esta primera entrega de esta serie de tutoriales os mostraré una técnica que puede ser realmente interesante. Aunque el nombre pueda sonar un poco "chungo" no temáis. Tito Olly está aquí para que hasta el más burro pueda entenderlo.

Hoy aprenderemos a "heredar" formularios. Alguno de vosotros se estará preguntando, ¿Y esto para que oño sirve? Pues la respuesta es muy simple y fácil: ¿Si tengo 30 formularios que hacen una tarea "parecida", por qué demonios voy a repetir un código "parecido" 30 veces?. Además, veremos que se puede modificar, crear o eliminar un elemento, procedimiento, función del formulario "heredado" y dicho elemento "repercutirá" AUTOMÁTICAMENTE en todos los formularios "heredados".

El ejemplo que os mostraré a continuación no hace nada en especial, pero lo importante es el concepto. Así que sin más dilación, empecemos.

 

Lo primero que crearemos será un nuevo proyecto. Cambiaremos el nombre del formulario por defecto y lo llamaremos FrmMain. Éste será el formulario que se ejecurará primero al iniciar nuestra aplicación.

Abr
18

Primera entrada. Los inicios

Categorías: ,

En un lugar de la Mancha de cuyo nombre no quiero acordarme....