17 int x, y, aoff = 0, boff = 0;
19 int max_y_new = 0, max_x_new = 0;
21 int a_score = 0, b_score = 0;
27 struct timeval start, stop;
33 nodelay(stdscr, 1); // Don't wait for getch input
34 getmaxyx(stdscr, max_y, max_x);
37 int index = (max_y/2)*(slope_x/slope_y);
40 gettimeofday(&start, NULL);
42 getmaxyx(stdscr, max_y_new, max_x_new);
46 if (max_y_new != max_y || max_x_new != max_x) {
56 } else if (key == 'k') {
58 } else if (key == 'i') {
60 } else if (key == 's') {
62 } else if (key == 'w') {
67 for (int i = 0; i < max_y + 1; i++) {
70 mvprintw(i, max_x, " ");
71 mvprintw(i, max_x - 1, " ");
73 for (int i = aoff; i < aoff + pad_h; i++) {
77 for (int i = boff; i < boff + pad_h; i++) {
78 mvprintw(i, max_x, "|");
81 for (int i = 0; i < max_y; i++) {
82 mvprintw(i, max_x/2, ":");
85 mvprintw(0, 2, "%d", a_score);
86 mvprintw(0, max_x - 1, "%d", b_score);
89 gettimeofday(&stop, NULL);
90 if ((double)(stop.tv_usec - start.tv_usec) / 1000000 +
91 (double)(stop.tv_sec - start.tv_sec) > speed) {
92 gettimeofday(&start, NULL);
96 y = slope_y * index / slope_x;
100 // Check if touching paddle or edges
101 if (x >= max_x - 1) {
102 if (y >= boff && y <= boff + pad_h) {
108 index = (max_y/2)*(slope_x/slope_y);
113 if (y >= aoff && y <= aoff + pad_h) {
119 index = (max_y/2)*(slope_x/slope_y);
123 } else if (y == 0 || y == max_y) {