sagraramirez.es

  • Aumentar fuente
  • Fuente predeterminada
  • Disminuir fuente
Advertencia
  • EU e-Privacy Directive

    This website uses cookies to manage authentication, navigation, and other functions. By using our website, you agree that we can place these types of cookies on your device.

    View e-Privacy Directive Documents

Home Programación

Appinventor: mover pong con el móvil

E-mail Imprimir PDF

En la web existen muchos tutoriales para realizar un pong con AppInventor. Aquí tenéis uno de ellos. En este juego una pelota va rebotando en los bordes de la pantalla pero no tiene que tocar la parte de abajo. Para ello tienes que mover una barra en la parte inferior que evita que llegue al final.

En la mayor parte de tutoriales la barra se mueve con el dedo. Aquí os presento la modificación que hay que hacer para que se mueva usando el sensor de orientación del móvil.

Lo primero es añadir a nuestro proyecto un sensor de orientación:

Después, en el apartado de programación (blocks) añadimos un objeto de ese sensor de orientación llamado when OrientationSensor1.OrientationChanged do.

Ese objeto llamará a la barra para que se mueva. En mi caso es call ImageSprite1.MoveTo.

Las dos variables de ese objeto son x e y. La y debe ser una costante, que será la posición que tiene la barra en la pantalla. La x la vamos a calcular con un cambio de variable. El sensor de orientación nos da un valor entre -90 y 90. En este caso usamos el valor roll del sensor de orientación, que nos da el ángulo cuando volteamos el móvil a la izquierda y la derecha. La barra debe moverse a lo largo del canvas de anchura conocida (desde 0 a canvas.width). Nos quedaría este bloque que controla el movimiento de la barra.

NOTA: el último valor por el que se divide, en el ejemplo 100, se usa para no tener que volcar totalmente el móvil para que la barra llegue a los dos extremos. Con un número más pequeño moviendo menos el móvil se moverá más la barra.

Última actualización el Miércoles, 13 de Mayo de 2015 11:12
 

Arkanoid con scratch

E-mail Imprimir PDF

Aquí tenéis una versión del juego Arkanoid hecha con scratch. Podéis ver el interior. En cuanto tenga un momento haré un tutorial paso a paso con las explicaciones de los objetos.

Última actualización el Lunes, 11 de Mayo de 2015 13:04
 

Juegos con Scratch

E-mail Imprimir PDF

Excelente web del compañero Sergio Palay http://aprendescratch.com/ donde se pueden encontrar recursos para aprender y enseñar de una forma divertida Scratch en el aula.

Web principal del proyecto Scratch: https://scratch.mit.edu/

 

Última actualización el Martes, 21 de Abril de 2015 09:30
 

SOLUCIONADO: desactivar el eco de teclado en C en linux

E-mail Imprimir PDF

Al intentar coger caracteres por teclado, programando en C, puede que necesites que lo que se escriba no se muestre por la pantalla. Si estamos usando windows, podemos utilizar la librería "conio.h" y la función getch(). Sin embargo, esa librería (y por tanto, la función) no está disponible en linux.

La solución que he encontrado (usada en lliurex 10) es utilizar las librerías termios.h y unistd.h y las funciones tcgetattr() y tcsetattr(). Este sería un ejemplo de programa:

#include <stdio.h>
#include <termios.h>
#include <unistd.h>
int main() {
char letra;
struct termios t,newt;

//cojo la configuración de teclado
tcgetattr( STDIN_FILENO, &t );
newt = t;
//modifico el flag de ECHO
newt.c_lflag &= ~( ICANON | ECHO );
//escribo la nueva configuración de teclado
tcsetattr( STDIN_FILENO, TCSANOW, &newt );

scanf("%c",&letra);
//La letra no se verá por teclado
printf("Has escrito %c",letra);

//devuelvo la configuración de teclado original
//si no se hace, el eco del teclado seguirá sin verse al acabar el programa
tcsetattr( STDIN_FILENO, TCSANOW, &t );
}

Última actualización el Martes, 12 de Junio de 2012 08:46
 

SOLUCIONADO: Limpiar buffer teclado en C usando Lliurex

E-mail Imprimir PDF

Al programar en C, al coger variables tipo char de teclado se queda en el buffer la pulsación de la tecla Enter. Así pues, el siguiente programa en C:

 

#include <stdio.h>
#include <stdlib.h>
int main() {
char letra;
printf("escribe una letra: ");
scanf("%c",&letra);
printf("Has escrito %c\n",letra);
printf("escribe una letra: ");
scanf("%c",&letra);
printf("Has escrito %c\n",letra);
}

 

Pide un caracter, que saca por pantalla, pero al pedir el segundo coge la pulsación de Enter que hemos usado para el primero, no espera a que pulsemos nada, y lo que nos saca al final es una línea en blanco. Para evitar esto debemos limpiar el buffer de entrada antes de pedir el segundo caracter. En Windows podemos utilizar la orden fflush(stdin), que limpia el buffer. Sin embargo no funciona en linux.

Una posible solución es utilizar setbuf para vaciar el buffer de entrada: setbuf(stdin,NULL). De este modo rellenamos el buffer con nada, es decir lo vaciamos. Sin embargo, en la práctica he visto que esta solución solo funciona una vez en el programa (si pedimos 3 letras, en la tercera vuelve a coger el caracter de Enter)

#include <stdio.h>
int main() {
char letra;
printf("escribe una letra: ");
scanf("%c",&letra);
printf("Has escrito %c\n",letra);
printf("escribe una letra: ");
setbuf(stdin,NULL);
scanf("%c",&letra);
printf("Has escrito %c\n",letra);
}

Otra solución es coger todo lo que quede hasta el Enter al coger un caracter. con while(getchar()!='\n);

#include <stdio.h>
int main() {
char letra;
printf("escribe una letra: ");
scanf("%c",&letra);
printf("Has escrito %c\n",letra);
printf("escribe una letra: ");
while(getchar()!='\n);
scanf("%c",&letra);
printf("Has escrito %c\n",letra);
}

Esta solución vale para coger una palabra entera letra a letra. Ejemplo de código:

#include <stdio.h>
int main() {
char letra;
char palabra[10];
int i;
for (i=0; i<10;i++) {
printf("escribe la letra %d: ",i);
scanf("%c",&letra);
while(getchar()!='\n');
printf("Has escrito %c\n",letra);
palabra[i]=letra;
}
printf("Palabra %s\n",palabra);
}

Última actualización el Lunes, 11 de Junio de 2012 09:10