#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <curses.h>
// This function causes some small amount of time to go by.
void delay()
{
int i;
for (i=0; i<100000; i++)
{
}
}
// This is the main program. This is where it all starts!
int main(int argc, char *argv[])
{
float x, y, dx, dy, oldx, oldy;
char ch = 0;
// Initialize curses
initscr();
start_color();
init_pair(1, 2, 0);
init_pair(2, 3, 0);
cbreak();
noecho();
nonl();
intrflush(stdscr, FALSE);
keypad(stdscr, TRUE);
nodelay(stdscr, TRUE);
clear();
// Random seed.
srand(time(NULL));
// Starting values.
x = 10;
y = 20;
dx = 0.07;
dy = 0;
oldx = 10;
oldy = 10;
// A line at the bottom of the screen.
move(21, 0);
color_set(1, NULL);
addstr("______________________________"
"______________________________");
// As long as the user doesn't quit, keep the loop going...
while (ch != 'q')
{
// Draw over the old star.
move((int) oldy, (int) oldx);
addch(' ');
// Draw the new star.
move((int) y, (int) x);
color_set(2, NULL);
addch('*');
// Move the curser back to the bottom, and wait.
// (If we don't wait, stuff will move *way* too fast!)
move(22, 0);
refresh();
delay();
// If we hit a wall, bounce.
if (dx > 0 && x >= 60)
dx = -dx;
if (dx < 0 && x <= 0)
dx = -dx;
// If we hit the ceiling, bounce.
if (dy < 0 && y <= 0)
dy = -dy;
// If we hit the floor, stick.
if (dy > 0 && y >= 20)
{
y = 20;
dy = 0;
}
// Update x and y and their old values.
oldx = x;
oldy = y;
x += dx;
y += dy;
// Gravity
if (y != 20 || dy != 0)
dy += 0.0005;
// See if the user has a command.
ch = getch();
// If the user says jump, then jump!
if (y == 20 && dy == 0 && ch == 'j')
dy -= 0.1;
}
// Clear the screen and shut down curses.
clear();
endwin();
// A kindly message to say farewell to the user...
printf("Thanks for playing!\n");
// End of program.
return 0;
}