|
#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();
|
|
} |