Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- #include <stdlib.h>
- #include <ctype.h>
- /* Define sistema operativo (estandar o Windows) */
- #if defined(_UNIX) || defined(_LINUX) || defined(_UNIX)
- #define _STD
- #ifdef _WIN
- #undef _WIN
- #endif
- #else
- #ifndef _WIN
- #define _WIN
- #endif
- #ifdef _STD
- #undef _STD
- #endif
- #endif
- /* fichero de cabecera necesario para Windows */
- #ifdef _WIN
- #include <windows.h>
- #endif
- /* necesario para termios (Linux) */
- #ifdef _STD
- #include <termios.h>
- #include <unistd.h>
- #include <fcntl.h>
- #include <sys/ioctl.h>
- #include <linux/kd.h>
- #endif
- /* Define constantes de secuencias de escape de color */
- #define RESET "\x1B[0m"
- #define BOLD "\x1B[1m"
- #define BRIGHT "\x1B[2m"
- #define HIGHLIGHT "\x1B[4m"
- /* texto */
- #define BLACK "\x1B[30m"
- #define RED "\x1B[31m"
- #define GREEN "\x1B[32m"
- #define BROWN "\x1B[33m"
- #define BLUE "\x1B[34m"
- #define PINK "\x1B[35m"
- #define CYAN "\x1B[36m"
- #define WHITE "\x1B[37m"
- /* fondo (background) */
- #define BBLACK "\x1B[40m"
- #define BRED "\x1B[41m"
- #define BGREEN "\x1B[42m"
- #define BBROWN "\x1B[44m"
- #define BBLUE "\x1B[44m"
- #define BPINK "\x1B[45m"
- #define BCYAN "\x1B[46m"
- #define BWHITE "\x1B[47m"
- /* Vocales acentuadas */
- #define a_acute '\xA2'
- #define e_acute '\x82'
- #define u_acute '\xA3'
- #ifdef _WIN
- void color( int );
- #endif
- void imprimir (int matriu[50][50]);
- void pelota (int matriu[50][50]);
- void cambiartabla (int matriu[50][50]);
- void clrscr( void );
- void draw_point (int , int );
- void draw_x (int , int );
- #if defined(_LINUX) || defined(_UNIX)
- #define STDINFD fileno(stdin)
- int getch( void );
- int getch3( void );
- #endif
- int main()
- {
- //system( "MODE 110,150");
- int num;
- int matriu[50][50] = {
- {0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
- {0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0},
- {0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0},
- {0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0},
- {0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0},
- {0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
- {0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
- {0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
- {0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
- {0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
- {0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
- {0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
- {0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
- {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
- {0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
- {0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
- {0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
- {0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
- {0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
- {0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
- {0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
- {0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0},
- {0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
- {0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
- {0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
- {0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
- {0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
- {0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
- {0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
- {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
- {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
- {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
- {0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
- {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
- {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
- {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
- {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
- {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
- {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
- {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
- {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
- {0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
- {0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
- {0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
- {0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
- {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
- {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
- {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
- {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
- {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
- };
- while (num != 5)
- {
- clrscr();
- fflush(stdout);
- printf("Que acci%cn desea realizar:\n", a_acute);
- printf("\t1.- Mostrar la tabla.\n");
- printf("\t2.- Tirar una bola.\n");
- printf("\t3.- Tirar 20 bolas.\n");
- printf("\t4.- Cambiar la tabla.\n");
- printf("\t5.- Salida.\n");
- scanf("%d",&num);
- getchar();
- switch(num)
- {
- case 1:
- imprimir (matriu);
- getchar();
- break;
- case 2:
- pelota (matriu);
- break;
- case 3:
- printf("caso 3\n");
- break;
- case 4:
- cambiartabla (matriu);
- break;
- case 5:
- printf("Adios.\n");
- printf("\n");
- break;
- default:
- printf("El n%cmero introducido no pertenece al menos, int%cntelo de nuevo.\n", u_acute, e_acute);
- }
- }
- return 0;
- }
- void imprimir (int matriu[50][50]) {
- int i,j;
- for (i = 0; i < 50; i++){
- for (j = 0; j < 50; j++){
- if (matriu[i][j]==1)
- printf("X");
- else
- printf(".");
- }
- printf ("\n");
- }
- }
- void pelota (int matriu[50][50]){
- int inicio, i, j, cont=0, colum_final;
- char dir;
- /* NOTA.- los posibles valores de dir son
- * 'u': up (arriba)
- * 'd': down (abajo)
- * 'l': left (izq)
- * 'r': right (der)
- */
- char blocked; /* si la pelota se haya "bloqueada" */
- char c;
- #if 0
- do {
- printf("\nIntroducir el n\xA3mero de columna por el cual desea lanzar la primera bola (1-50): ");
- scanf ("%d", &inicio);
- getchar();
- } while (inicio < 0 || inicio > 50);
- inicio--;
- do {
- printf("\nEn caso de encontrarse con un obst\xAculo, en que direcci\xA2n\nquiere que se dirija la bola, derecha (D-d) o izquierda (I-i): ");
- scanf(" %c", &direccion);
- getchar();
- } while ( tolower(direccion) != 'd' && tolower(direccion) != 'i' );
- #endif
- /* Dibujar el tablero */
- for (i = 0; i < 50 ; i++)
- {
- for (j = 0; j < 50; j++)
- {
- if( matriu[i][j] == 1 ) {
- draw_x( i, j);
- /* fondo blanco o gris */
- #ifdef _STD
- printf(BWHITE);
- #else
- color (7);
- #endif
- }
- else {
- /* verde sobre blanco */
- draw_point( i, j);
- /* fondo blanco */
- #ifdef _STD
- printf(BWHITE);
- #else
- color(7);
- #endif
- }
- }
- /* restaura colores al defecto */
- #ifdef _STD
- printf(RESET);
- #endif
- printf("\n");
- }
- /* Ahora vamos a mover la pelota. Empezamos siempre en (0,0), y el juego
- * termina al alcanzar la linea inferior del tablero, o después de 100 intentos */
- i = 0;
- j = 0;
- gotoxy(0, 0);
- dir = '\0'; /* al inicio no hay direccion definida, la establece el usuario */
- while ( i < 49 && cont++ < 100 ) {
- /* determinamos si la bola tiene libertad de movimiento */
- blocked = 0;
- switch ( dir ) {
- case 'd':
- if ( matriu[i+1][j] == 1 )
- blocked = 1;
- else {
- blocked = 0;
- draw_point( i, j); /* borra de la posición anterior */
- i++;
- }
- break;
- case 'u':
- if ( i == 0 || ( i > 0 && matriu[i-1][j] == 1 ) )
- blocked = 1;
- else {
- blocked = 0;
- draw_point( i, j); /* borra de la posición anterior */
- i--;
- }
- break;
- case 'r':
- if ( j == 49 || matriu[i][j+1] == 1 )
- blocked = 1;
- else {
- blocked = 0;
- draw_point( i, j); /* borra de la posición anterior */
- j++;
- }
- break;
- case 'l':
- if ( j == 0 || matriu[i][j-1] == 1 )
- blocked = 1;
- else {
- blocked = 0;
- draw_point( i, j); /* borra de la posición anterior */
- j--;
- }
- break;
- }
- /* Representar la posicion de la bola */
- #ifdef _STD
- /* Linux: azul sobre fondo rojo */
- printf( BLUE );
- printf( BRED );
- #else
- /* Windows: amarillo sobre rojo */
- color( 206 );
- #endif
- gotoxy( j, i );
- printf( "%d", 0);
- /* restaura colores al defecto, y espera */
- #ifdef _STD
- printf(RESET);
- //usleep( 200000 );
- #else
- color( 7 );
- Sleep( 500 )
- #endif
- /* definir la direccion del proximo movimiento */
- c = getch();
- if ( c == '8' )
- dir = 'u';
- else if ( c == '2' )
- dir = 'd';
- else if ( c == '4' )
- dir = 'l';
- else if ( c == '6' )
- dir = 'r';
- else if ( c == 'q' ) /* 'q' para salir */
- return;
- }
- /* Mensaje final */
- gotoxy( 0, 51);
- if ( i == 49 )
- printf("Has ganado !!!\n");
- else
- printf("Debes intentarlo de nuevo\n");
- getchar();
- }
- void cambiartabla (int matriu[50][50]){
- int i,j,fila,columna;
- char seguir;
- while(seguir!=2)
- {
- printf("\n");
- printf("Presiona 1 si quieres seguir cambiando valores.\n");
- printf("Presiona 2 si quieres ver la tabla.\n");
- scanf("%c",&seguir);
- switch(seguir)
- {
- case '1':
- do{
- printf("\nIntroducir la fila del valor que quieres cambiar (1-50): ");
- scanf("%d",&columna);
- printf("\nIntroducir la columna del valor que quieres cambiar (1-50): ");
- scanf("%d",&fila);
- }while(columna>=51 && fila>=51 );
- i=columna,j=fila;
- if (matriu[i][j] == 0)
- matriu[i][j] = 1;
- break;
- case '2':
- for(i=0;i<49;i++)
- for(j=0;j<48;j++)
- if (matriu[i][j]==1 && matriu[i+1][j+1]==1 && matriu[i][j+2]==1)
- puts("ERROR NO SE HA HECHO NINGUN CAMBIO");
- matriu[columna][fila] = 0;
- for(i=0;i<50;i++)
- {
- //printf("\t\t");
- for(j=0;j<50;j++)
- {
- if(matriu[i][j]==1)
- printf("X ");
- else if(matriu[i][j]==0 )
- printf(". ");
- }
- printf("\n");
- }
- break;
- default:
- printf("El n\xA3mero introducido es incorrecto.\n");
- }
- }
- }
- /***********************************************
- *** FUNCION COLOR (solo Windows) ***
- ***********************************************/
- #ifdef _WIN
- void color (int n)
- {
- SetConsoleTextAttribute(GetStdHandle (STD_OUTPUT_HANDLE), n );
- }
- #endif
- /***********************************************/
- /*** FUNCION GOTOXY ***/
- /***********************************************/
- int gotoxy(int x, int y)
- {
- /* estandar */
- #ifdef _STD
- printf("\x1B[%d;%dH", y, x);
- #endif
- /* windows */
- #ifdef _WIN
- COORD coord;
- HANDLE h_stdout;
- coord.X = x;
- coord.Y = y;
- if ((h_stdout = GetStdHandle(STD_OUTPUT_HANDLE)) == INVALID_HANDLE_VALUE)
- return 0;
- if (SetConsoleCursorPosition(h_stdout, coord) == 0)
- return 0;
- return 1;
- #endif
- }
- /* Dibujar un punto en el tablero */
- void draw_point (int i, int j) {
- #ifdef _STD
- printf(WHITE);
- printf(BGREEN);
- #else
- color (114);
- #endif
- gotoxy(j, i);
- printf(".");
- }
- /* Dibujar una 'x' en el tablero */
- void draw_x (int i, int j) {
- /* blanco sobre verde */
- #ifdef _STD
- printf(GREEN);
- printf(BWHITE);
- #else
- color (191);
- #endif
- gotoxy (j,i);
- printf("X");
- }
- /* Borra la pantalla */
- void clrscr( void ) {
- #ifdef _STD
- system("clear");
- #endif
- #ifdef _WIN
- system("cls");
- #endif
- }
- #if defined(_LINUX) || defined(_UNIX)
- /*----------------------------------------------------------------------------------------
- Lee un carácter de la entrada estándar.
- Devuelve el código de la tecla pulsada, sin necesidad de pulsar ENTER al final.
- Imita el comportamiento de la función getch() de la librería <conio.h> de Borland.
- ----------------------------------------------------------------------------------------*/
- int getch(void) {
- unsigned char c;
- int c_extend;
- struct termios p, old_p;
- int fd;
- int n_bytes;
- FILE *fPtr;
- // rescar la estructura de configuración termios, con tcgetattr()
- // (save the termios configuration struct, with tcgetattr())
- tcgetattr(STDINFD, &old_p);
- /* activar modo RAW
- (activate RAW mode) */
- p = old_p;
- cfmakeraw(&p);
- /* pasar los nuevos paramentros
- (pass the new parameters) */
- tcsetattr(STDINFD, TCSANOW, &p);
- fflush(stdout);
- fflush(stderr);
- if ((n_bytes = read(STDINFD, &c_extend, 2*sizeof(char))) <= 0)
- return -1;
- if (n_bytes == 1) /* se leyó un carácter simple mono-byte */
- c_extend &= 0x00ff;
- if (n_bytes == 2) { /* si leyeron 2 bytes */
- if (c_extend = 0x5b1b) { /* se leyó la secuencia ESC [, ahora leemos el siguiente carácter */
- read(STDINFD, &c, sizeof(char));
- c_extend = 0x1b00 | c;
- }
- }
- // restablecemos la struct termios, con tcsetattr
- // (restore the termios struct, with tcsetattr)
- tcsetattr(STDINFD, TCSANOW, &old_p);
- return c_extend;
- }
- #endif
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement