From 8eab9d9c54e72fd9d223fa77b05659fd0bb5a6b7 Mon Sep 17 00:00:00 2001 From: Carlo Date: Sat, 8 Nov 2025 12:51:16 +0100 Subject: [PATCH] Aggiunti colori e aggiornato il TODO --- TODO | 20 +++++++++++++++++--- main.c | 43 ++++++++++++++++++++++++++++++++++++++++--- 2 files changed, 57 insertions(+), 6 deletions(-) diff --git a/TODO b/TODO index f1b7b32..c4c70de 100644 --- a/TODO +++ b/TODO @@ -1,4 +1,18 @@ Da fare: - -- iniziare a spostare in delle funzioni la GUI -- salvataggio e menu +- Creazione dei bonus: + - (+) per aumentare di uno la vita + - (#) per autoshoot (che deve durare tot secondi) +- Aggiungere condizione di vittoria: + - tipo 100 punti +- Uso della libreria menu.h per creare menu di gioco: + - possibilità di salvare la partita al gameover, con inserimento di un nome di 3 lettere + - possibilità di cambiare impostazioni (che vengono messe in un config file): + - numero di nemici + - velocità + - quantità di bonus + - durata autoshoot + - vite rigenerate da (+) + - etc... + - possibilità di vedere la scoreboard +- passaggio da caratteri a stringhe (se vogliamo, dopo il codice si incasina un po'): + - (-X-) per nemici e |_^_| per il giocatore diff --git a/main.c b/main.c index 144f159..11fef04 100644 --- a/main.c +++ b/main.c @@ -6,16 +6,26 @@ #include /************* STATIC DEFINITIONS ************/ -#define DELAY 30000 +// Game constants #define ENEMY_N 5 #define BULLET_N 3 +#define LIVES_N 5 + +// Window constants +#define DELAY 30000 #define WIDTH 52 #define HEIGHT 30 #define MIN_COLS 110 -#define LIVES_N 5 + +// Aspect constatnts #define TEXTLINES 4 #define BORDERLINES 2 +#define ENEMY_PAIR 1 +#define BONUS_PAIR 2 +#define TITLE_PAIR 3 +#define GMOVR_PAIR 4 + /************* GAME STRUCTURES **************/ struct speed { int slowness; @@ -62,31 +72,49 @@ char* gameover[] = char gameover_desc[] = "HAI PERSO. Premi q per uscire..."; void print_menu(WINDOW* win) { + // Ottieni parametri della finestra int height; int width; getmaxyx(win, height, width); + + // Scritta colorata + wattron(win, COLOR_PAIR(TITLE_PAIR)); for(int i = 0; i < (TEXTLINES+BORDERLINES); i++) { mvwprintw(win, i+1, (width-(strlen(title[0])))/2, "%s", title[i]); } + wattroff(win, COLOR_PAIR(TITLE_PAIR)); + + // Scritta che blinka wattron(win, A_BLINK); mvwprintw(win, (TEXTLINES+BORDERLINES)+1, (width-(strlen(menu_desc)))/2, "%s", menu_desc); wattroff(win, A_BLINK); + + // stampa a video refresh(); return; } void print_gameover(WINDOW* win) { + // Parametri della finestra e pulisci tutto int height; int width; int ch; wclear(win); getmaxyx(win, height, width); + + // Stampa della scritta colorata + wattron(win, COLOR_PAIR(GMOVR_PAIR)); for(int i = 0; i < TEXTLINES; i++) { mvwprintw(win, i+1, (width-(strlen(gameover[0])))/2, "%s", gameover[i]); } + wattroff(win, COLOR_PAIR(GMOVR_PAIR)); + + // Stampa della scritta che blinka wattron(win, A_BLINK); mvwprintw(win, TEXTLINES+1, (width-(strlen(gameover_desc)))/2, "%s", gameover_desc); wattroff(win, A_BLINK); + + // Stampa a video e attendi input refresh(); while((ch = wgetch(win)) != 'q'); return; @@ -147,6 +175,13 @@ int main() { curs_set(0); srand(time(NULL)); + // Colori + start_color(); + init_pair(ENEMY_PAIR, COLOR_RED, COLOR_BLACK); + init_pair(TITLE_PAIR, COLOR_MAGENTA, COLOR_BLACK); + init_pair(GMOVR_PAIR, COLOR_RED, COLOR_BLACK); + init_pair(BONUS_PAIR, COLOR_GREEN, COLOR_BLACK); + // Dimensioni finestra di gioco e controlli // calcolo delle misure della finestra height = HEIGHT; @@ -156,7 +191,6 @@ int main() { // Schermo troppo piccolo ? if(COLS < MIN_COLS || LINES < HEIGHT) { - delwin(game_window); curs_set(1); endwin(); printf("Gioco terminato.\n"); @@ -322,8 +356,11 @@ int main() { // Nemici for(int i = 0; i < ENEMY_N; i++) { + wattron(game_window, COLOR_PAIR(1)); if (enemy[i].active) mvwprintw(game_window, enemy[i].y, enemy[i].x, "%c", enemy[i].symbol); + wattroff(game_window, COLOR_PAIR(1)); } + // Status Bar print_status_bar(stdscr, win_starty, (win_startx + width), game_status);