93 lines
1.9 KiB
C
93 lines
1.9 KiB
C
|
#include <stdlib.h>
|
||
|
#include <ncurses.h>
|
||
|
#include <unistd.h>
|
||
|
|
||
|
#define DELAY 30000
|
||
|
|
||
|
void quit();
|
||
|
void draw_borders(WINDOW *screen);
|
||
|
|
||
|
int main(int argc, char *argv[]){
|
||
|
int x=0, y=0;
|
||
|
int max_y = 0, max_x = 0;
|
||
|
int next_x = 0;
|
||
|
int direction = 1;
|
||
|
int keypress = 0;
|
||
|
|
||
|
initscr(); // Initialize window
|
||
|
noecho(); // Don't echo keypresses
|
||
|
curs_set(FALSE); // No cursor
|
||
|
nodelay(stdscr,1); // Stop getch from waiting.
|
||
|
//Global var 'stdscr' is created by the call to 'initscr()'
|
||
|
getmaxyx(stdscr, max_y, max_x); //Get the max x/y of the screen
|
||
|
|
||
|
WINDOW *main = newwin(max_y - 3, max_x, 0, 0);
|
||
|
WINDOW *sub = newwin(3, max_x, max_y - 3, 0);
|
||
|
draw_borders(main);
|
||
|
draw_borders(sub);
|
||
|
|
||
|
|
||
|
|
||
|
while(1) {
|
||
|
getmaxyx(stdscr, max_y, max_x);
|
||
|
keypress = getch(); // Listen for exit command
|
||
|
clear(); // Clear screen of all previous chars
|
||
|
mvprintw(y, x, "o"); // Print our "ball" at the current xy position
|
||
|
refresh();
|
||
|
|
||
|
usleep(DELAY); // Shorter delay between movements
|
||
|
|
||
|
next_x = x + direction;
|
||
|
|
||
|
if (keypress == 'q') {
|
||
|
quit();
|
||
|
}
|
||
|
|
||
|
if (next_x >= max_x || next_x < 0) {
|
||
|
direction*= -1;
|
||
|
}
|
||
|
else {
|
||
|
x+= direction;
|
||
|
}
|
||
|
mvwin(sub, 50, 50);
|
||
|
wrefresh(sub);
|
||
|
|
||
|
// x++; // Advance the ball to the right
|
||
|
}
|
||
|
|
||
|
// mvprintw(0, 0, "Hello, world!"); //Print some words in the spot 0,0
|
||
|
// refresh(); // refresh window so words appear
|
||
|
|
||
|
// sleep(1); //derp
|
||
|
// endwin(); // Restore normal terminal behavior
|
||
|
}
|
||
|
|
||
|
void draw_borders(WINDOW *screen) {
|
||
|
int x, y, i;
|
||
|
|
||
|
getmaxyx(screen, y, x);
|
||
|
|
||
|
// 4 corners
|
||
|
mvwprintw(screen, 0, 0, "+");
|
||
|
mvwprintw(screen, y - 1, 0, "+");
|
||
|
mvwprintw(screen, 0, x - 1, "+");
|
||
|
mvwprintw(screen, y - 1, x - 1, "+");
|
||
|
|
||
|
// sides
|
||
|
for (i = 1; i < (y - 1); i++) {
|
||
|
mvwprintw(screen, i, 0, "|");
|
||
|
mvwprintw(screen, i, x - 1, "|");
|
||
|
}
|
||
|
|
||
|
// top and bottom
|
||
|
for (i = 1; i < (x - 1); i++) {
|
||
|
mvwprintw(screen, 0, i, "-");
|
||
|
mvwprintw(screen, y - 1, i, "-");
|
||
|
}
|
||
|
}
|
||
|
|
||
|
void quit(){
|
||
|
endwin();
|
||
|
exit(0);
|
||
|
}
|