#include <ncurses.h> #include <string.h> #include "ui.h" #include "tamagotchi.h" // Initialize UI void init_ui(void) { // Initialize ncurses initscr(); // Start ncurses mode cbreak(); // Line buffering disabled noecho(); // Don't echo() while we do getch keypad(stdscr, TRUE); // We get F1, F2 etc.. curs_set(0); // Hide cursor timeout(100); // Set non-blocking input with 100ms delay } // Cleanup UI void cleanup_ui(void) { endwin(); // End ncurses mode } // Draw Streamii void draw_tamagotchi(Tamagotchi *tama) { int max_y, max_x; getmaxyx(stdscr, max_y, max_x); // Streamii body int start_y = max_y / 2 - 5; int start_x = max_x / 2 - 10; // Clear previous drawing clear(); // Streamii body (simplified ASCII art) mvprintw(start_y, start_x, " /\\___/\\ "); mvprintw(start_y + 1, start_x, " ( o o ) "); mvprintw(start_y + 2, start_x, " / ^ \\ "); mvprintw(start_y + 3, start_x, " / \\___/ \\ "); // Facial expression const char* face = get_tamagotchi_face(tama); mvprintw(start_y + 2, start_x + 6, "%s", face); } // Draw stats void draw_stats(Tamagotchi *tama) { int max_y, max_x; getmaxyx(stdscr, max_y, max_x); // Stats area mvprintw(max_y - 5, 2, "Hunger: ["); for (int i = 0; i < tama->hunger / 10; i++) printw("#"); mvprintw(max_y - 4, 2, "Energy: ["); for (int i = 0; i < tama->energy / 10; i++) printw("#"); mvprintw(max_y - 3, 2, "Happiness: ["); for (int i = 0; i < tama->happiness / 10; i++) printw("#"); mvprintw(max_y - 2, 2, "Cleanliness: ["); for (int i = 0; i < tama->cleanliness / 10; i++) printw("#"); // Age and status mvprintw(max_y - 1, 2, "Age: %d | Status: %s", tama->age, tama->is_alive ? "Alive" : "DEAD"); } // Display menu void display_menu(void) { int max_y, max_x; getmaxyx(stdscr, max_y, max_x); mvprintw(max_y - 7, 2, "Controls:"); mvprintw(max_y - 6, 2, "F1: Feed"); mvprintw(max_y - 6, 20, "F2: Sleep"); mvprintw(max_y - 5, 2, "F3: Play"); mvprintw(max_y - 5, 20, "F4: Clean"); mvprintw(max_y - 4, 2, "Q: Quit"); } // Get user input int get_user_input(void) { return getch(); } // Show game over screen void show_game_over(void) { int max_y, max_x; getmaxyx(stdscr, max_y, max_x); clear(); mvprintw(max_y/2, max_x/2 - 5, "GAME OVER"); mvprintw(max_y/2 + 1, max_x/2 - 10, "Your streamii has died :("); refresh(); // Wait for key press timeout(-1); getch(); }