tableros

Iniciado por anabelanggie, 4 Marzo 2014, 16:44 PM

0 Miembros y 2 Visitantes están viendo este tema.

leosansan

#30
Cita de: eferion en 19 Marzo 2014, 11:28 AM
Conviértelo a base64 y así no habrá problemas con el código cifrado... total, el que quiera descifrarlo únicamente tiene que añadir la decodificación de base 64 antes de ponerse a decodificar en serio.

La base que elijo la tomo para cada mensaje de forma aleatoria, pero pero después de aplicarle otro módulo de cifrado que son varios según el nivel de exigencia de cifrado que se requiera.

Entre los módulos está, por ejemplo, un desplazamiento con un array del mismo tamaño que el mensaje, lo que le da mucha fuerza, obtenido en cada ocasión de forma aleatoria y combinado con otro desplazamiento con otro array aleatorio, también distinto para cada mensaje, en base a números primos tomados a su vez de un intervalo diferente y aleatorio en cada ocasión. Y por supuesto utilizo todos los caracteres ASCII disponibles, ¡y más!, no me limito al abecedario y los números.

Y hay otros 12 módulos adicionales, aunque cada cierto tiempo añado alguno nuevo, cuestión de no aburrirse. ;)



¡¡¡¡ Saluditos! ..... !!!!



eferion

No lo comentaba como algo a añadir en el proceso de cifrado.

Yo me refería para que el texto cifrado pudieses pegarlo en el foro sin distorsión.

Básicamente coger el código ya cifrado y pasarlo a base64 para que el código resultante no tenga caracteres extraños que el foro pueda modificar.

leosansan

#32
Cita de: eferion en 19 Marzo 2014, 12:36 PM
No lo comentaba como algo a añadir en el proceso de cifrado.

Yo me refería para que el texto cifrado pudieses pegarlo en el foro sin distorsión.

Básicamente coger el código ya cifrado y pasarlo a base64 para que el código resultante no tenga caracteres extraños que el foro pueda modificar.

.....Tá bien, ahí va....

Citar

XyYjODczNTtMOVNNJiM4NTk1O0UmIzk2NTA7JiM5NzkyOyQtLEAmIzk2NTg7JiM5NTc0O7ImIzg1
OTQ7KSKvMDImIzk2NTA7ICAgICAgICBoJiM5NjQ0OyEmIzk1MTY7J6evJ1ynuFBeXCYjOTc4Nzsm
JiM5NTc3Oy+kYdAmIzgyNTI74zApsiYjODI1MjtSsNJKWiYjODU5NDsiJiM4NTk1OyYjOTc5NDsw
YahoOCsmIzg1OTU7NtnP/iYjOTc5NDsNCmEmIzk3OTQ7JiM5NTMyO0c4YSYjODU5Nju2JyYjOTUz
MjvL0jNCtiYjOTY2ODsmIzg1OTI7JiM5ODM1OyYjOTYwNDtvJiM5NDc0OyYjOTYwODtUMU0mIzk2
NTg7JiM4NTk0O0MnL0jQuyYjOTY1MDtWUzUmIzk2MTk7JiMzMDU7ICYjODU5NDtMuSYjMzA1OyYj
OTU1Njs/piYjOTQ4NDu3JiM5NjMyOyYjOTYxODtpJiM4MjE1O/VfJiM4NTk1OyYjODU5NjsmIzk2
Njg7KSCyJiM4NTk3OyYjOTc5MjtQJiM4NTk1OzlALCYjODU5NztoJiM5NzkyO7LIW7PQJiM5ODI0
OyYjOTUyNDulQw0KzyYjOTY1ODslJiM4MjE1O9964yBfJiM5NjA4O2bNJiM5ODI5O2nPJiM5NDg4
OyYjOTUzMjv1aCIhJiM5NjYwOyYjOTY0NDs9MbcmIzMwNTsmIzk4Mjk7Rbm7JiM4MjUyO8DSJiM5
ODI0OyYjOTQ5NjtQZ1UmIzk4MzU7YSYjOTc4NzsmIzk2NDQ7LGPjpyYjOTU1MjtMpvWvbt6ibSA1
Okkk2SYjODI1MjsmIzk2NTg7TiJSJiM5NTgwOyYjODIxNTsgJiM5NTgwO/4uaiYjODczNTu0JiM4
NTk1OyYjOTY1MDvAJA0KR6c2LEnb1SYjODU5Nzsz8CYjOTQ5MjtNXiYjODU5MztqZsjbQg0KJiM5
NjU4Oz62JiM4NTk1Oz0mIzk2Njg7QDEmIzk0OTY7JyYjOTQ3NDsmIzk0ODg7LbUmIzk2MDg7Tk5S
PrYmIzk3ODY7JiM5ODM1OyQmIzk3ODg72yPBsSQmIzk0ODQ7uGNOODtGTG31p1ZF3yYjOTYxNzsm
Izk3OTI7SiYjODU5MztLZnnGvdko


¡¡¡¡ Saluditos! ..... !!!!






Tal como prometí cuelgo la respuesta a la petición de cómo formar una matriz de 8x8 con los elementos centrales, es decir los cuadraditos. La salida de dicho código es la indicada justamente en el mensaje anterior:

* Lo codificado:


Código (cpp) [Seleccionar]
char d[8][8][4];
 for (l=0;l<8;l++){
   for (j=0;j<8;j++){
     for (i=1;i<tam;i+=2){
       if (k<3){
         d[l][j][k]=219;
         k++;
       }
       else{
         d[l][j][k]='\0';
         k=0;
       }
     }
   }
 }


 for (i=0;i<8;i++){
   printf("\t\t");
   for (j=0;j<8;j++){
     printf("%s  ",d[i][j]);
   }
   puts ("\n");
 }
 putchar ('\n');


Y el código entero:

Código (cpp) [Seleccionar]
/**
a0=linea superior
a1=lineas intermedias
a2=linea inferior
a3=lineas laterales


  218=┌  196=─  194=┬  191=┐  179=│  195=├

  197=┼  180=┤  192=└  193=┴  217=┘  219=█

**/

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <windows.h>
#include <time.h>

#define CUADRADITOS3 "\xdb\xdb\xdb"
#define CUADRADITOS 179,219,179,219,179,219
#define CUADRADITOS1 "\xdb\xdb\xdb"
#define CUADRADITOS2 "\xfe "
#define ULCORNER 218,196,196,196,196,196    /* upper-left corner, esquina superior izquierda y tres guiones*/
#define RTEE     195,196,196,196,196,196   /*right-tee, letra 'T' apuntando hacia la derecha y tres guiones*/
#define CROSS    197,196,196,196,196,196    /* crossover, cruz grande (de mayor tamaño que el signo '+' y tres guiones) */
#define LTEE     180                /* left-tee, letra 'T' apuntando hacia la izquierda */
#define BTEE     194,196,196,196,196,196   /* bottom-tee, letra 'T' apuntando hacia abajo y tres guiones*/
#define URCORNER 191                /* upper-right corner, esquina superior derecha */
#define LLCORNER 192,196,196,196,196,196   /* lower-left corner, esquina inferior izquierda y tres guiones */
#define TTEE     193,196,196,196,196,196    /* top-tee, letra 'T' apuntando hacia arriba y tres guiones */
#define LRCORNER 217                /* lower-right corner, esquina inferior izquierda */
#define VLINE    CUADRADITOS      /*vertical line, linea vertical y tres espacios*/
#define VLINE_   179                /* vertical line, linea vertical */
#define TOKEN    219                /* ficha o pieza */

int main(){
 int i,j,k=0,l,tam,cont=0;
 char a[]="\xfe ";
 char b[8][8][6];

/******* AQUI MATRIZ CUADRADITOS=254=xfe 8X8 *******/
/** SOLO CUADRADITOS SIN LINEAS INTERMEDIAS **/

 /*for (i=0;i<8;i++)
   for (j=0;j<8;j++)
     strcpy( b[i][j], a );
 for (i=0;i<8;i++){
   for (j=0;j<8;j++){
     printf("%s ",b[i][j]);
   }
   putchar ('\n');
 }*/
 int a1[]={RTEE,CROSS,CROSS,CROSS,CROSS,CROSS,CROSS,CROSS,LTEE},
     a0[]={ULCORNER,BTEE,BTEE,BTEE,BTEE,BTEE,BTEE,BTEE,URCORNER},
     a2[]={LLCORNER,TTEE,TTEE,TTEE,TTEE,TTEE,TTEE,TTEE,LRCORNER},
     a3[]={CUADRADITOS,CUADRADITOS,CUADRADITOS,CUADRADITOS,CUADRADITOS,CUADRADITOS,CUADRADITOS,CUADRADITOS,CUADRADITOS};
 tam=sizeof (a2)/sizeof (a2[0]);
  /****** IMPRIMIMOS LA MATRIZ TOTAL  ************/

 /** linea superior **/
 printf("\t");
 for (j=0;j<tam;j++)
   printf("%c",a0[j]);
 putchar ('\n');
 /** linea lateral **/
 printf("\t");
 for (j=0;j<tam;j++)
   printf("%c",a3[j]);
 /** salto de linea...  **/
 /** y dibujo intermedias y laterales  **/

 for (i=0;i<7;i++){
   putchar ('\n');
   printf("\t");
   for (j=0;j<tam;j++)
       printf("%c",a1[j]);
     putchar ('\n');
     printf("\t");
     for (j=0;j<tam;j++)
         printf("%c",a3[j]);
 }
 /** linea inferior **/
 putchar ('\n');
 printf("\t");
 for (j=0;j<tam;j++)
   printf("%c",a2[j]);
 putchar ('\n');
/******* AQUI LA NEW MATRIZ SOLA DE CUADRADITOS 8X8 *******/
/*********** A PARTIR DE LA MATRIZ INICIAL  ***************/

 puts("\t\tA PARTIR DE LA MATRIZ DE 8X8\n");
 char d[8][8][4];
 for (l=0;l<8;l++){
   for (j=0;j<8;j++){
     for (i=1;i<tam;i+=2){
       if (k<3){
         d[l][j][k]=219;
         k++;
       }
       else{
         d[l][j][k]='\0';
         k=0;
       }
     }
   }
 }


 for (i=0;i<8;i++){
   printf("\t\t");
   for (j=0;j<8;j++){
     printf("%s  ",d[i][j]);
   }
   puts ("\n");
 }
 putchar ('\n');

/*************** OBTENCION DIRECTA ***************/
 /******* OTRA 8X8 *******/

 puts("\t\tDE FORMA DIRECTA\n");
 for (i=0;i<8;i++){
   printf("\t\t");
   for (j=0;j<8;j++){
     printf("%s  ",CUADRADITOS3);
   }
   puts ("\n");
 }
 putchar ('\n');



/******* AQUI UNA MATRIZ SOLA DE CUADRADITOS=254=xfe 8X8 *******/


 for (i=0;i<8;i++){
   printf("\t\t\t");
   for (j=0;j<8;j++){
     printf("%s ",CUADRADITOS2);
   }
   putchar ('\n');
 }
 putchar ('\n');

 return 0;
}


¡¡¡¡ Saluditos! ..... !!!!





Eternal Idol

leosansan: por favor no escribas mas mensajes consecutivos en un mismo hilo.
La economía nunca ha sido libre: o la controla el Estado en beneficio del Pueblo o lo hacen los grandes consorcios en perjuicio de éste.
Juan Domingo Perón

JonaLamper

En primer lugar, perdonad por estar tanto tiempo sin contestar. He estado avanzando durante estos días y tal y como lo llevo, creo que no es necesario poner el enunciado de lo que hace este juego. Os dejo el código:

Código (cpp) [Seleccionar]
#include <iostream>
#include <string>
#include <Windows.h>
#include <iomanip>
#include <cstdlib>
#include <ctime>
using namespace std;

// Constantes
const int COLUMNAS = 8;
const int FILAS = 8;
const int maxIntentos = 15;
const char tresBloques[4] = {char(219), char(219), char(219), char(0)}; // Vector tresBloques
const char tresLineas[4] = {char(196), char(196), char(196), char(0)};  // Vector tresLineas

// Tipos enumerados
typedef enum {neutro, magenta, amarillo, azul, verde, none} tFicha;
typedef enum {arriba, abajo, derecha, izquierda} tDireccion;
typedef enum {
black, // 0
dark_blue, // 1
dark_green,        // 2
dark_cyan, // 3
dark_red,        // 4
dark_magenta,        // 5
dark_yellow,        // 6
light_gray,        // 7
dark_gray, // 8
light_blue,           // 9
light_green,        // 10
light_cyan,        // 11
light_red,        // 12
light_magenta,     // 13
light_yellow,        // 14
white // 15
} tColor;

// Arrays
typedef tFicha tTablero[FILAS][COLUMNAS];
typedef bool tMatrizBooleana[FILAS][COLUMNAS];

// Estructuras
typedef struct {
tTablero tablero;
int intentos;
int puntos;
} tJuego;

typedef struct {
int fila;
int columna;
tDireccion direccion;
} tMovimiento;

// Prototipos
void colorCrush(tJuego &juego);
void generarTablero(tJuego &juego);
void procesarTablero(tJuego &juego);
void mostrarTablero(tJuego &juego);
void lineaArriba();
void lineaMedio();
void lineaAbajo();
void comprobarGrupo();
void movimientoUsuario();
void rellenarHuecos();
void setColor(tColor color);
void columnas(tTablero tablero, int i);
void pintarEspacios(tFicha cuadrado);
void iniciarArrayBool(tMatrizBooleana arrayBool);
void comprobarFilas(tJuego &juego, tMatrizBooleana arrayBool);
void comprobarColumnas(tJuego &juego, tMatrizBooleana arrayBool);
// Next
void gestionCaida(tJuego &juego);

int main() {
tJuego juego;
srand(time(NULL));
colorCrush(juego);
return 0;
}

void generarTablero(tTablero tablero) {
for (int i = 0; i < FILAS; i++) {
for (int j = 0; j < COLUMNAS; j++) {
tablero[i][j] = tFicha(1 + rand() % 4);
}
}
}

void setColor(tColor color) {
HANDLE handle = GetStdHandle(STD_OUTPUT_HANDLE);
SetConsoleTextAttribute(handle, color);
}

void mostrarTablero(tJuego &juego) {
setColor(tColor(15));
cout << setw(15) << "Attempts: " << juego.intentos << setw(15) << "Points: " << juego.puntos << endl;
lineaArriba();
for (int i = FILAS - 1; i > (FILAS - (FILAS)); i--) {
cout << setw(2);
cout << i + 1;
cout << setw(2);
columnas(juego.tablero, i);
lineaMedio();
}
int i = 0;
cout << setw(2);
cout << FILAS - (FILAS - 1);
cout << setw(2);
columnas(juego.tablero, i);
lineaAbajo();
cout << setw(6);
for (int j = 1; j < COLUMNAS; j++) {
cout << j << setw(4);
}
cout << COLUMNAS << endl;
}

void columnas(tTablero tablero, int i) {
for (int j = 0; j < COLUMNAS; j++) {
cout << char(179);
pintarEspacios(tablero[i][j]);
setColor(tColor(15));
}
cout << char(179) << endl;
}

void lineaArriba() {
cout << setw(4) << char(218) << tresLineas;
for (int i = 0; i < COLUMNAS - 2; i++) {
cout << char(194) << tresLineas;
}
cout << char(194) << tresLineas << char(191) << endl;
}

void lineaMedio() {
cout << setw(4) << char(195) << tresLineas;
for (int i = 0; i < COLUMNAS - 2; i++) {
cout << char(197) << tresLineas;
}
cout << char(197) << tresLineas << char(180) << endl;
}

void lineaAbajo() {
cout << setw(4) << char(192) << tresLineas;
for (int i = 0; i < COLUMNAS - 2; i++) {
cout << char(193) << tresLineas;
}
cout << char(193) << tresLineas << char(217) << endl;
}

void pintarEspacios(tFicha cuadrado) {
if (cuadrado == magenta) {
setColor(tColor(13));
cout << tresBloques;
}
else if (cuadrado == amarillo) {
setColor(tColor(14));
cout << tresBloques;
}
else if (cuadrado == azul) {
setColor(tColor(3));
cout << tresBloques;
}
else if (cuadrado == verde) {
setColor(tColor(2));
cout << tresBloques;
}
else if (cuadrado == neutro) {
setColor(tColor(0));
cout << tresBloques;
}
}

void colorCrush(tJuego &juego) {
juego.intentos = maxIntentos;
juego.puntos = 0;
generarTablero(juego.tablero);
mostrarTablero(juego);
procesarTablero(juego);
int j = 0;
while (j < 10) {
cout << endl << endl;
mostrarTablero(juego);
procesarTablero(juego);
cout << endl;
system("pause");
j++;
}
}

void procesarTablero (tJuego &juego) {
tFicha fichaAnterior = neutro;
tMatrizBooleana arrayBool;
iniciarArrayBool(arrayBool);
comprobarFilas(juego, arrayBool);
comprobarColumnas(juego, arrayBool);
}

void iniciarArrayBool(tMatrizBooleana arrayBool) {
for (int i = 0; i < FILAS; i++) {
for (int j = 0; j < COLUMNAS; j++) {
arrayBool[i][j] = false;
}
}
}

void comprobarFilas(tJuego &juego, tMatrizBooleana arrayBool) {
int contador = 0;
int j = 0;
tFicha fichaAnterior = neutro;
for (int i = 0; i < FILAS; i++) {
while (j < COLUMNAS) {
while (juego.tablero[i][j] == fichaAnterior && j < COLUMNAS) {
contador++;
fichaAnterior = juego.tablero[i][j];
j++;
}
if (contador == 2) {
juego.puntos = juego.puntos + 3;
for (int h = contador + 1; h > 0; h--) {
arrayBool[i][j-h] = true;
juego.tablero[i][j-h] = neutro;
}
}
else if (contador == 3) {
juego.puntos = juego.puntos + 8;
for (int h = contador + 1; h > 0; h--) {
arrayBool[i][j-h] = true;
juego.tablero[i][j-h] = neutro;
}
}
else if (contador >= 4) {
juego.puntos = juego.puntos + 15;
for (int h = contador + 1; h > 0; h--) {
arrayBool[i][j-h] = true;
juego.tablero[i][j-h] = neutro;
}
}
contador = 0;
fichaAnterior = juego.tablero[i][j];
j++;
}
j = 0;
fichaAnterior = none;
}
}

void comprobarColumnas(tJuego &juego, tMatrizBooleana arrayBool) {
int contador = 0;
int j = 0;
tFicha fichaAnterior = neutro;
for (int i = 0; i < COLUMNAS; i++) {
while (j < FILAS) {
while (juego.tablero[j][i] == fichaAnterior && j < COLUMNAS) {
contador++;
fichaAnterior = juego.tablero[j][i];
j++;
}
if (contador == 2) {
juego.puntos = juego.puntos + 3;
for (int h = contador + 1; h > 0; h--) {
arrayBool[j-h][i] = true;
juego.tablero[j-h][i] = neutro;
}
}
else if (contador == 3) {
juego.puntos = juego.puntos + 8;
for (int h = contador + 1; h > 0; h--) {
arrayBool[j-h][i] = true;
juego.tablero[j-h][i] = neutro;
}
}
else if (contador >= 4) {
juego.puntos = juego.puntos + 15;
for (int h = contador + 1; h > 0; h--) {
arrayBool[j-h][i] = true;
juego.tablero[j-h][i] = neutro;
}
}
contador = 0;
fichaAnterior = juego.tablero[j][i];
j++;
}
fichaAnterior = neutro;
j = 0;
}
}

// void gestionCaida(tJuego &juego){
// bool hanCaido= true;

// while (hanCaido) {
  // Volvemos a hacer caer todo el tablero
// caidaFichas(juego.tablero, hanCaido);
  // if (hanCaido) {
 // Muestra el tablero
  // mostrarTablero(juego);
// }
// }
// }



Tan solo me faltaría que las casillas de colores fueran desplazándose hacia abajo (para rellenar los huecos) y que, una vez que no hay más combinaciones de 3, 4 o 5 casillas adyacentes del mismo color, se llegara a un estado "estable" del tablero en el que se le pide al usuario qué ficha quiere mover y en qué dirección (arriba, abajo, izquierda o derecha) para que pueda seguir sumando el mayor número de puntos. El juego termina cuando no hay posibles combinaciones para el usuario.

Como ya he dicho, estoy en ello. Una vez que tenga este "Color Crush" terminado, subiré el código por si alguien quiere echarse una partidilla  ;D

Un saludo y gracias!
Utilizar palabras para hablar de palabras es como utilizar un lápiz para hacer un dibujo de ese lápiz sobre el mismo lápiz.