Vamos a ver algunas cosas para hacer un Supermario. Vamos a programar el salto. Haz una barra horizontal con rect en la parte baja de la pantalla, y encima de ella coloca una bola. Haz que tenga una velocidad horizontal y vertical, pero que al principio valgan cero. Ahora haz que al pulsar una tecla, la velocidad vertical valga -10, porque la y crece hacia abajo y queremos que vaya para arriba. Si lo haces así, la bola se irá hacia arriba, y queremos que caiga. Habrá que poner gravedad sumando a vy una cantidad pequeña cada ciclo. Pero si le ponemos gravedad, la bola se caerá hacia abajo antes de que pulsemos. Vamos a pensar cómo solucionamos esto.
Una opción es poner una variable que me diga si estoy saltando o no. Si saltando vale uno, estoy saltando, y hay gravedad. Si saltando vale cero, no. Así que ponemos un if, y el programa hará unas cosas si estoy saltando, y otras diferentes si no estoy saltando. Si pulso una tecla, saltando valdrá uno. y entonces vy, valdrá -10. Pero entonces podré estar pulsando varias veces en mitad del salto, y haciendo que vy valga -10 en mitad del salto. ¿Cómo evito eso? Haciendo que se tengan que cumplir dos condiciones para que salte:
Que se pulse la tecla
Que la variable saltando valga cero.
Al pulsar la tecla, saltando vale uno, ya no se puede saltar otra vez hasta que la bola caiga, y saltando valga otra vez cero, vy vale -10 y hay gravedad. En cada ciclo vy aumenta con el valor de la gravedad. Empieza con un valor de gravedad bajo: 0.01 por ejemplo, y ve aumentando.
Como los valores de y ahora no van a ser enteros, x e y debes declararlos como float.
El salto acabará cuando llegue abajo, pero como no va a caer exactamente a la misma altura, pon una condición tipo mayor que, en lugar de igual. Pero al llegar abajo, oblígale a tomar la altura que tenía al principio. Si no, poco a poco se irá un poco hacia abajo.