1/11/10

¿Tú no sabes hacer magia?


Pues yo sí. Yo sé hacer magia sirviéndome de mis dedos.
No sé cuándo, cómo o por qué exactamente empecé a interesarme por la programación. Pero sí sé que cuando termino de programar algo que sé que sirve para hacer otro algo, experimento una sensación increíble. El simple hecho de pedirle a una cosa inanimada que cobre vida por un instante y realice la tarea que le estoy pidiendo me resulta asombroso. Y más asombro aún me resulta ver que no hay huecos, fallos y que contempla todas las posibilidades de acción de una mente humana. Es decir, que funciona para todos y cada uno de los supuestos que un ser humano podría exigir. Es magia, joder. 
Metafóricamente hablando, claro.

El otro día, terminando mi segunda práctica para la asignatura de programación me di cuenta de lo difícil que me resultaba pensar en los algoritmos y el código de según qué ejercicios. Así que, aunque no fue uno de los que más me costó, voy a colgar el código de mi primer juego de ajedrez en Java. Creo que fue el más laborioso, aunque no es ni de lejos un programa que sirva para jugar una partida completa de ajedrez. Pero, joder, me siento orgullosa de este código. 

Si queréis probarlo tenéis que tener la herramienta Eclipse (sección Download, ahora mismo la versión que está es Eclipse Classic 3.6.1). Muy rápida y fácil de bajar y ejecutar.

Enunciado ejercicio 5. Ajedrez
Crear una clase que recibirá como parámetros del método main 2 valores, que se almacenarán en 2 variables de tipo entero, una llamada numeroPeon y otra llamada movimiento. Crear un único array para representar un tablero de ajedrez con la posición inicial de todas las piezas. Imprimir por pantalla el tablero. Implementar el movimiento del peón blanco indicado por numeroPeon (el situado más a la izquierda será el 1, etc.), que avanzará 1 ó 2 casillas según indique la variable movimiento, e imprimir por pantalla la situación final de tablero. Si elnumeroPeon no es un número entre 1 y 8, o movimiento no es igual a 1 ó 2, imprimir por pantalla "Movimiento no válido". Representar: 


-Casillas vacías: símbolos @ y símbolos #, para casillas blancas y negras
respectivamente.
-Casillas ocupadas: inicial del nombre de la pieza que la ocupa, en
mayúscula para las blancas y en minúscula para las negras (ej. T para una
torre blanca, d para una dama negra, etc.).
 

package práctica3ªParte;

public class Ejercicio5 {

    /**
     * @param args
     */
    public static void main(String[] args) {
        // TODO Auto-generated method stub
       
        /*Lo primero que hace es comprobar que se introducen dos  parámetros. Si no es así, el programa lo notificará y se finalizará.*/
        if (args.length>2 || args.length<2){
            System.out.println("Han de introducirse dos parámetros.");
            System.exit(0);
           
        /*Si el número de parámetros introducido es correcto, entonces transformará los parámetros de tipo String a tipo int y los almacenará cada uno en una variable. También crea un array bidimensional de tipo String de 8x8*/
           
        }else{
           
        int numeroPeon= Integer.parseInt(args[0]);
        int movimiento= Integer.parseInt(args[1]);
        String [][] tablero= new String[8][8];
       
        /*Atendiendo a las reglas del ajedrez, sabemos que la primera casilla situada más a la izquierda de cada jugador ha de ser negra y que el rey ha de estar en su color. Planteando que nosotros utilizaramos las piezas negras, la diposición del tablero sería la siguiente.*/
       
        //Piezas blancas frente a nosotros.
        tablero [0][0]= "T";
        tablero [0][1]= "C";
        tablero [0][2]= "A";
        tablero [0][3]= "D";
        tablero [0][4]= "R";
        tablero [0][5]= "A";
        tablero [0][6]= "C";
        tablero [0][7]= "T";
       
        //Peones blancos colocados en sus respectivas posiciones con ayuda de un bucle for.
        for(int j=0; j<8; j++){
            tablero[1][j]= "P";
        }
       
        /*Entre las piezas blancas y las negras hay cuatro filas de casillas vacías. Con ayuda de bucles for inicializamos cada casilla de cada fila con su correspondiente valor.*/
        for (int j=0; j<8; j++){
            tablero[2][j]="@";
            tablero[2][1]="#";
            tablero[2][3]= "#";
            tablero[2][5]="#";
            tablero[2][7]="#";
        }
        for (int j=0; j<8; j++){
            tablero[3][j]="#";
            tablero[3][1]="@";
            tablero[3][3]= "@";
            tablero[3][5]="@";
            tablero[3][7]="@";
        }
       
        for (int j=0; j<8; j++){
            tablero[4][j]="@";
            tablero[4][1]="#";
            tablero[4][3]= "#";
            tablero[4][5]="#";
            tablero[4][7]="#";
        }
        for (int j=0; j<8; j++){
            tablero[5][j]="#";
            tablero[5][1]="@";
            tablero[5][3]= "@";
            tablero[5][5]="@";
            tablero[5][7]="@";
        }
        //Los peones negros son colocados en sus respectivas posiciones con un bucle for.   
        for(int j=0; j<8; j++){
        tablero[6][j]= "p";
        }
        //Piezas negras.
        tablero[7][0]= "t";
        tablero[7][1]="c";
        tablero[7][2]="a";
        tablero[7][3]="d";
        tablero[7][4]="r";
        tablero[7][5]="a";
        tablero[7][6]="c";
        tablero[7][7]="t";
       
        /*El programa se sirve de dos bucles "for" para recorrer todas las posiciones del array. Empieza asignándoles a las dos variables el valor [0][0] y termina cuando asigna la última posición de las filas y las columnas. Imprime por pantalla el tablero de ajedrez con sus posiciones iniciales.*/
        for (int i=0; i
            for (int j=0; j
                System.out.print(tablero[i][j] + "\t");
            }
            System.out.println("");   
        }
        /*Imprime por pantalla un mensaje que separa el tablero inicial del tablero con la jugada*/
        System.out.println("El movimiento de la jugada:");
       
        /*Antes de ejecutar el movimiento, comprueba que los parámetros introducidos son válidos. Si no lo son, lo notifica y se finaliza.*/
        if (numeroPeon>8 || numeroPeon<1){
            System.out.println("Movimiento no válido");
            System.exit(0);
        }
        if (movimiento>2 || movimiento<1){
            System.out.print("Movimiento no válido");
            System.exit(0);
        }
       
        /*Si los parámetros son válidos comprueba qué peón ha de mover y de qué color es la casilla que va a abandonar. Esta comprobación la realiza mirando si el parámetro (al que le restamos una unidad ya que la primera posición de los arrays es "0") es par. Si es par implementamos el movimiento del peón blanco asignando a la casilla que deja vacía el color negro y a la casilla donde se traslada el símbolo del peón*/
        if((numeroPeon-1)%2==0){
            tablero[1][(numeroPeon-1)]="#";
            tablero[1+movimiento][(numeroPeon-1)]="P";
        /*Si el peón no es par implementamos su movimiento asignando a la casilla que deja vacía el color blanco y a la casilla donde se traslada el símbolo del peón.*/
        }else{
            tablero[1][(numeroPeon-1)]="@";
            tablero[1+movimiento][(numeroPeon-1)]="P";
        }
        //Por último, se imprime el tablero por pantalla con el movimiento implementado.
        for (int i=0; i
            for (int j=0; j
                System.out.print(tablero[i][j] + "\t");
            }
            System.out.println("");   
        }
        }
    }
}





Ejecución con parámetros 5 y 2.
 
Nos vemos.

5 comentarios:

Charlie D. dijo...

En fin, ¿qué puedo decir?

Te admiro. Creo que mi cerebro estallaría antes de terminar de crear algo así... me lo he leído un par de veces, y aún me cuesta asimilarlo U.U

Cuídate... y siento llenarte las entradas a comentarios, (me refiero a la anterior) jope, a veces me siento hasta culpable, y no sé por qué :S

Reika dijo...

O_O sabes que te adoro? Debes tener un cerebro prodigioso, es imposible que pueda entender eso. Sí, soy una cafre de letras puras, que le voy a hacer... Yo me quedo con mis lindas letritas ^^.
Elena, te mereces un aplauso * aplaude unos segundos*, esto es para los inteligentes =).

Un besote, cielo!!

Charlie D. dijo...

Mmmm...

Entiendo lo que dices. Yo también reniego de los estereotipos/ideales, son un cáncer para el escritor (o al menos en mi caso). Por un lado no niego que sean atrayentes (como tú dices, es genial poder escribir las cosas como desearías que fueran y también leerlas) peeero el reto que planteas es muy interesante (y jodidamente difícil ¬¬).

En un principio, un relato erótico quiere excitar, o al menos yo lo concibo con ese fin. (¿En ese sentido conseguí algo?) Entonces, tiene que mostrar algo agradable, porque según creo una cosa desagradable no puede provocar placer. Bueno, si eres sádico o masoquista sí. También es interesante mirarlo por ese lado...

¿Una nueva perspectiva? ¿Te refieres a algo más realista? ¿Y que siga provocando las mismas sensaciones agradables? Complicado. Pero creo que si formulamos las preguntas adecuadas, obtendremos las respuestas adecuadas.
Claro que el sexo es eso, preliminares, acción pura y dura y se acabó. ¿Se puede innovar en eso? Es tan antiguo... Creo que el truco tiene que estar en el enfoque que se le de.

Gray Soul dijo...

Genia, lo intentaria pero no tengo internet, y mi memoria USB esta llena xD.... PEro cuando vuelva internet a casa, lo hare....

Se nota que disfrutas de tu carrera, quiero sentirme igual.....

CIao

Mew dijo...

Oh, gracias gracias. Al final hareis que me sonroje por algo que, creedme, no es perfecto (pero algún día haré algo que lo será, estoy totalmente segura de ello).
Y Rei, cielo, permíteme decirte que aprender a programar no es más que aprender un idioma nuevo... y, o muy equivocada estoy o en estas semanas que no nos hemos visto tú no has dejado de estudiar latín y griego en el bachi. Eso sí que es una puta pasada, joder.

Oh god, Cynthia... cuánto tiempo hacía desde la última vez que hablamos. No me creerás, pero hasta Shinichi te echa de menos. A ver si vuelves a tener internet en casa y mantenemos una larga, larga charla, jovencita. Mientras tanto, cuídate.

Y Shikaru... vale sí. El reto que planteo es difícil. Dificultad cinco estrellas, abstenerse novatos. Pero en serio, dame el teléfono de quien quiera que haya conseguido venderte que el camino fácil es la solución... le contrataré y utilizaré sus técnicas de persuasión para dominar el mundo.
Coincido en que el objetivo de un relato erótico es excitar y que por ello ha de ser placentero y agradable. También sé de sobra que siempre será algo parecido a "¡a calentarse y al lío!", y que no puede pretenderse cambiar su desarrollo, porque entonces no sería sexo, sería otra cosa diferente. Creo que la idea de las perspectivas es más por donde van los tiros. Ahora que lo veo por escrito suena mucho mejor que cuando campaba por mi cabeza sin forma ni contenido.
Y bueno... casi lamento decirte que, en ese sentido, esta vez conmigo no lo conseguiste. Soy un público difícil... peor que un crítico literario. Ja, sé que tiemblas al oír al enemigo natural de los escritores... pero es una buena comparación, ¿no crees? ;)

See you all <3