Aggiunti colori e aggiornato il TODO

This commit is contained in:
Carlo 2025-11-08 12:51:16 +01:00
parent 62f904d39a
commit 8eab9d9c54
2 changed files with 57 additions and 6 deletions

20
TODO
View file

@ -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

43
main.c
View file

@ -6,16 +6,26 @@
#include <time.h>
/************* 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,9 +356,12 @@ 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);