Aprendí de [mooc]: [Introducción y práctica de la programación del lenguaje C basada en el desarrollo del juego] del profesor Tong Jing
El efecto objetivo es:
1. Una pelota pequeña rebota en la ventana
2. El borde se establece con un borde
3. La dirección del rebote es un rebote diagonal
Código de lenguaje C:
#include<stdio.h>
#include<stdlib.h> //system("cls");
#include<windows.h> //Sleep(50)
int main(){
int i,j;
int x = 2, y = 2;
int velocity_x = 1;
int velocity_y = 1;
int top = 0; //x上边界
int bottom = 24-3; //x下边界
int left = 0; //y左边界
int right = 80-2; //y右边界
while( 1 ){ //每运行一次输出一个静态图像
//通过变换由x,y表示小球O的的位置,每次输出不一样的图像,形成动画
if( x==top || x==bottom || y==left || y==right)
printf("\a"); //遇边界提示声音
if( x==top || x==bottom) //遇见边界,速度方向掉头
velocity_x *= -1;
if( y==left || y==right) //遇见边界,速度方向掉头
velocity_y *= -1;
x += velocity_x; //小球位置:多少回车
y += velocity_y; //小球位置:多少空格
system("cls"); //清屏
for( i=1; i<=x; i++){ //循环完x个回车
if( i==1 ){
printf("----------------------------------------\
---------------------------------------");
putchar('\n');
}else{
printf("| \
|");
putchar('\n');
}
}
for( j=1; j<=y;j++){ //循环完y个空格
if( j==1){
putchar('|');
}else
putchar(' ');
}
putchar('O'); //输出指定位置的形状‘O ’
for( i=y+1; i<=right;i++){ //循环完O之后的个空格
if( i==right){
putchar('|');
}else
putchar(' ');
}
putchar('\n');
for( i=x+1; i<=bottom;i++){ //循环完O之后的回车
if( i==bottom){
printf("----------------------------------------\
---------------------------------------");
putchar('\n');
}else
printf("| \
|");
putchar('\n');
}
Sleep(50); //让速度慢下来,数值越大,小球运动越慢。
}
return 0;
}
(Debe tenerse en cuenta que se debe garantizar el tamaño de la ventana que muestra un pequeño marco negro, que generalmente es el valor predeterminado de 80 * 25)
El método de visualización del tamaño de la ventana es:
Haga clic derecho en la parte de la barra de título sobre el pequeño marco negro-> haga clic en el atributo inferior-> aparece una nueva ventana emergente, haga clic en el diseño superior-> aparece la siguiente interfaz: se debe garantizar que sea 80 * 25
La captura de pantalla del resultado en ejecución es la siguiente:
(Realmente animación, rebotando en caso de borde)