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);
43 getmaxyx(stdscr, max_y_new, max_x_new);
47 if (max_y_new != max_y || max_x_new != max_x) {
57 } else if (key == 'k') {
59 } else if (key == 'i') {
61 } else if (key == 's') {
63 } else if (key == 'w') {
68 for (int i = 0; i < max_y + 1; i++) {
71 mvprintw(i, max_x, " ");
72 mvprintw(i, max_x - 1, " ");
76 for (int i = aoff; i < aoff + pad_h; i++) {
80 for (int i = boff; i < boff + pad_h; i++) {
81 mvprintw(i, max_x, "|");
85 for (int i = 0; i < max_y; i++) {
86 mvprintw(i, max_x/2, ":");
89 mvprintw(0, 2, "%d", a_score);
90 mvprintw(0, max_x - 1, "%d", b_score);
92 // Move ball if enough time has elapsed
93 gettimeofday(&stop, NULL);
94 if ((double)(stop.tv_usec - start.tv_usec) / 1000000 +
95 (double)(stop.tv_sec - start.tv_sec) > speed) {
96 gettimeofday(&start, NULL);
100 y = slope_y * index / slope_x;
104 // Check if touching paddle or edges
105 if (x >= max_x - 1) {
106 if (y >= boff && y <= boff + pad_h) {
112 index = (max_y/2)*(slope_x/slope_y);
117 if (y >= aoff && y <= aoff + pad_h) {
123 index = (max_y/2)*(slope_x/slope_y);
127 } else if (y == 0 || y == max_y) {