--- /dev/null
+#include <ncurses.h>
+#include <stdlib.h>
+#include <stdio.h>
+#include <unistd.h>
+
+int
+die(int code)
+{
+ endwin();
+ exit(code);
+}
+
+int
+main(void) {
+ int x = 1, y = 0, aoff = 0, boff = 0;
+ int max_y = 0, max_x = 0;
+ int max_y_new = 0, max_x_new = 0;
+ int direction = 1;
+ int pad_h = 5;
+ int a_score = 0, b_score = 0;
+ int slope_x = 5;
+ int slope_y = 1;
+ int index = 0;
+ int index_dir = 1;
+
+ // Initialize curses
+ initscr();
+ noecho();
+ curs_set(0);
+ nodelay(stdscr, 1); // Don't wait for getch input
+ index = max_y/2;
+ x = max_x/2;
+
+ while(1) {
+ getmaxyx(stdscr, max_y_new, max_x_new);
+ --max_x_new;
+ --max_y_new;
+ pad_h = 0.2 * max_y;
+ if (max_y_new != max_y || max_x_new != max_x) {
+ clear();
+ max_x = max_x_new;
+ max_y = max_y_new;
+ }
+
+ index += index_dir;
+
+ // Parse keypresses
+ int key = getch();
+ if (key == 'q') {
+ die(0);
+ } else if (key == 'k') {
+ boff += 2;
+ } else if (key == 'i') {
+ boff -= 2;
+ } else if (key == 's') {
+ aoff += 2;
+ } else if (key == 'w') {
+ aoff -= 2;
+ }
+
+ // Draw paddles
+ for (int i = 0; i < max_y; i++) {
+ mvprintw(i, 0, " ");
+ mvprintw(i, max_x, " ");
+ }
+ for (int i = aoff; i < aoff + pad_h; i++) {
+ mvprintw(i, 0, "|");
+ }
+
+ for (int i = boff; i < boff + pad_h; i++) {
+ mvprintw(i, max_x, "|");
+ }
+
+ for (int i = 0; i < max_y; i++) {
+ mvprintw(i, max_x/2, ":");
+ }
+
+ mvprintw(0, 2, "%d", a_score);
+ mvprintw(0, max_x - 1, "%d", b_score);
+
+ // Move ball
+ mvprintw(y, x, " ");
+
+ x += direction;
+ y = index / slope_x * slope_y;
+ mvprintw(y, x, "o");
+
+ // Check if touching paddle
+ if (x == max_x) {
+ if (y >= boff && y <= boff + pad_h) {
+ direction *= -1;
+ } else {
+ a_score += 1;
+ usleep(600000);
+ x = max_x/2;
+ index = max_y/2;
+ }
+ } else if (x == 0) {
+ if (y >= aoff && y <= aoff + pad_h) {
+ direction *= -1;
+ } else {
+ b_score += 1;
+ usleep(600000);
+ x = max_x/2;
+ index = max_y/2;
+ }
+ } else if (y < 0 || y > max_y) {
+ index_dir *= -1;
+ }
+ usleep(3000000 * (1.0/((double)max_x + (double)max_y)));
+ }
+}