Data de publicació: May 16, 2016 5:9:42 PM
#include <ncurses.h>
#include <stdio.h>
#include <termios.h>
#include <unistd.h>
#include <fcntl.h>
#include <stdlib.h>
#include <time.h>
#define DELAY 100000
void inicialitzar();
void finalitzar();
void esborrar_pnt();
void refrescar_pnt();
void moure_pilota();
void mostrar_dades();
//Variables globals
//Dimensions de la pantalla
int max_y = 0, max_x = 0;
//Discreció temporal
double dt=1;
//Dades pilota
double ax, ay;
double vx, vy;
int x, y;
int x_seg, y_seg;
int main() {
inicialitzar();
while(1) {
esborrar_pnt();
moure_pilota();
mostrar_dades();
refrescar_pnt();
}
finalitzar();
}
void inicialitzar(){
//Llavor random
srand(time(NULL));
//Inicialitzar ncurses
initscr();
noecho();
curs_set(FALSE);
getmaxyx(stdscr, max_y, max_x);
//Posicio aleatoria de la pilota
x = rand()%max_x;
y = 0;
//Velocitat inicial de cada component
vx=1;
vy=1;
//Acceleració incial de cada component
ax=0.01;
ay=0.01;
}
void moure_pilota(){
mvprintw(y, x, "O");
vx = ax * dt + vx;
vy = ay * dt + vy;
x = vx * dt + x;
y = vy * dt + y;
//Si xoca contra laterals rebota
if ( x >= max_x ) {x = 2 * max_x - x; vx=-vx; ax=-ax;}
if ( x < 0 ) {x = -x; vx=-vx; ax=-ax;}
//Si xoca contra dalt o baix rebota
if ( y >= max_y ) {y = 2 * max_y - y; vy=-vy; ay=-ay;}
if ( y < 0 ) {y = -y; vy=-vy; ay=-ay;}
}
void mostrar_dades(){
mvprintw( 2, max_x - 50, "%s \t %s \t %s", "a","v","x");
mvprintw( 3, max_x - 50, "%.2f \t %.2f \t %d", ax, vx, x);
mvprintw( 4, max_x - 50, "%.2f \t %.2f \t %d", ay, vy, y);
}
void finalitzar(){
endwin();
}
void esborrar_pnt(){
getmaxyx(stdscr, max_y, max_x);
clear();
}
void refrescar_pnt(){
refresh();
usleep(DELAY);
}
___________________________________________________________
gcc program.c -lncurses -o program