Skip to content

Commit

Permalink
documentato quasi tutto, aggiorno issue #22
Browse files Browse the repository at this point in the history
  • Loading branch information
WAPEETY committed Jun 16, 2022
1 parent 24baaae commit b561bb8
Show file tree
Hide file tree
Showing 8 changed files with 89 additions and 19 deletions.
4 changes: 3 additions & 1 deletion src/bot.c
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,9 @@
* righe completate,
* se fa finire il gioco per riempimento.
*/

/**
* @brief struct della strategia di gioco, contentiene il suo campo da gioco e il "punteggio" della strategia.
*/
typedef struct Strategy
{
int score;
Expand Down
1 change: 1 addition & 0 deletions src/constants.c
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
#define CONSTANTS_C

const unsigned char ART_LOGO[] = {
0x20, 0x20, 0x23, 0x23, 0x23, 0x23, 0x23, 0x23, 0x23, 0x23, 0x23, 0x20,
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
Expand Down
15 changes: 15 additions & 0 deletions src/functions.c
Original file line number Diff line number Diff line change
Expand Up @@ -190,6 +190,14 @@ void wprint_with_delay(WINDOW *w, int d, char *c)
}
}


/**
* @brief stampa una riga di testo carattere per carattere peró supporta anche il \n come a capo.
* @param[in] w la finestra dove stampare.
* @param[in] y la riga dove stampare.
* @param[in] x la colonna dove stampare.
* @param[in] c il puntatore alla stringa di caratteri da stampare.
*/
void mvwprintwrows(WINDOW *w, int y, int x, char *c)
{
int i = 0, j = 0;
Expand Down Expand Up @@ -227,6 +235,7 @@ int swap_color(int c)
return c + 100;
return c - 100;
}

/**
* @brief ritorna un colore a caso tra quelli definiti in constants.h.
*
Expand Down Expand Up @@ -271,6 +280,12 @@ int prev_circular(int i, int size)
return i - 1;
}

/**
* @brief una funzione da usare al posto della free, permette di non liberare memoria giá liberata.
*
* @param ptr pointer di pointer alla memoria da liberare
* @return 1 se é andato a buon fine, 0 altrimenti.
*/
int super_free(void **ptr)
{
if (ptr == NULL)
Expand Down
6 changes: 5 additions & 1 deletion src/gamefield.c
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,10 @@
#include "../include/functions.h"
#include "../include/player.h"

/**
* @brief struct contentente il puntatore alla matrice del campo di gioco
* e il puntatore alla finestra di ncurses.
*/
typedef struct GameField
{
int *field;
Expand Down Expand Up @@ -130,7 +134,7 @@ void refresh_selector(gamefield_t *g, tetrimino_t *t, int cur_pos)
}

/**
* @brief Gestisce l'input del trop del tetramino.
* @brief Gestisce l'input del drop del tetramino.
*
* @param gameField Il campo dove bisogna droppare il tetramino.
* @param t Il tetramino da droppare.
Expand Down
14 changes: 13 additions & 1 deletion src/main.c
Original file line number Diff line number Diff line change
Expand Up @@ -199,11 +199,23 @@ void main_menu()
default:
delwin(w);
endwin();
printf("Tetrix ha Flatlineato");
printf("Tetrix ha Flatlineato"); /* Grande citazione */
break;
}
}

/**
* @brief C'era una volta una principessa bellissima che si chiamava Tetrix.
* Vittima peró di un terribile incantesimo che poteva essere spezzato solo dalla prima valutazione positiva ricevuta.
* Era rinchiusa in una repo, resa privata da un terribile octocat sputa fuoco (la mascotte di Github).
* Ella attendeva nel sito dell'octocoso, nella repo piú remota del progetto piú abbandonato
* il professore di programmazione e la sua valutazione positiva...
*
* Si ahahahahah, certo aspetta e spera...
* ~ Sherek (piú o meno: https://youtu.be/watch?v=5ukYEcSXxOA)
*
* @return letteralmente ritorna come é andata, se non é 0 preoccupati :lol:
*/
int main()
{
/*Inizia il programma*/
Expand Down
39 changes: 29 additions & 10 deletions src/multiplayer.c
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,12 @@ int cpu_play(gamefield_t *gameField, tetrimini_pool_t *pool, tetrimino_t **tetri

#pragma region PVP

/**
* @brief stampa le istruzioni per la partita in pvp
*
* @param[in] nickname1 puntatore al nome del primo giocatore
* @param[in] nickname2 puntatore al nome del secondo giocatore
*/
void pvp_instructions(char *nickname1, char *nickname2)
{
WINDOW *instructions_win;
Expand Down Expand Up @@ -57,7 +63,6 @@ void pvp_instructions(char *nickname1, char *nickname2)

/**
* @brief Inizia la partita in multiplayer
*
*/
void pvp_new_game()
{
Expand Down Expand Up @@ -88,6 +93,15 @@ void pvp_new_game()
pvp_continue_game(players, gameFields, pool, points);
}

/**
* @brief corpo principale del gioco che si alterna fra scelta blocco e drop dello stesso fra i giocatori
* controllando eventuali perdite, righe riempite ecc...
*
* @param[in] players Array di puntatori ai giocatori.
* @param[in] gameFields Array di puntatoro ai campi da gioco dei giocatori.
* @param[in] pool La pool usata in partita con i tetramini rimanenti.
* @param[in] points Il puntatore ai punteggii dei giocatori.
*/
void pvp_continue_game(player_t **players, gamefield_t **gameFields, tetrimini_pool_t *pool, pointboard_t *points)
{
int selected_i;
Expand Down Expand Up @@ -153,6 +167,17 @@ void pvp_continue_game(player_t **players, gamefield_t **gameFields, tetrimini_p
pvp_end_game(winner, gameFields, pool, points, players, start_time, moves);
}

/**
* @brief gestisce la fine della partita e dealloca tutto ció che é stato usato
*
* @param[in] win_flag valore che segna chi ha vinto la partita
* @param[in] gameFields Array di puntatori ai campi da gioco dei giocatori.
* @param[in] pool La pool usata in partita con i tetramini rimanenti. (serve per deallocarla)
* @param[in] points Il puntatore ai punteggi dei giocatori.
* @param[in] players Array di puntatori ai giocatori.
* @param[in] start_time timestamp di inizio della partita.
* @param[in] moves puntatore ad array di int contenente per ciascun giocatore il numero di mosse effettuate.
*/
void pvp_end_game(int win_flag, gamefield_t **gameFields, tetrimini_pool_t *pool, pointboard_t *points, player_t **players, unsigned int start_time, int *moves) /*thanos++*/
{
WINDOW *field1Win = get_gamefield_win(gameFields[0]);
Expand All @@ -174,7 +199,7 @@ void pvp_end_game(int win_flag, gamefield_t **gameFields, tetrimini_pool_t *pool
kill_win(field2Win);
kill_win(poolWin);
kill_win(pointWin);
mvprintw(5, 0, " ");
mvprintw(5, 0, " "); /* Pulisce lo schermo dall scritta "turno di giocatoreX" */
refresh();

summary = newwin(18, COLS - 2, (LINES / 2) - 5, 1);
Expand Down Expand Up @@ -372,13 +397,7 @@ void pve_continue_game(player_t **players, gamefield_t **gameFields, tetrimini_p
}

/**
* @brief Funzione principale della CPU, da chiamare quando deve giocare.
* Per ora si limita a giocare randomicamente, per scopi di testing.
*
* FIXME la funzione dovrebbe restituire 2 valori:
* - La posizione del cursore
* - Il tetrimino scelto
* Per ora utilizzo un puntatore, ma se ci sono soluzioni migliori meglio usare quelle.
* @brief DEPRECATED: non la usiamo piú, stiamo scrivendo in bot.c la nuova strategia, la lascio per qualche commit.
*
* @param[in] gameField Il campo della CPU.
* @param[in] pool I tetramini rimanenti.
Expand Down Expand Up @@ -413,7 +432,7 @@ int cpu_play(gamefield_t *gameField, tetrimini_pool_t *pool, tetrimino_t **tetri
return rand() % (FIELD_COLS - get_tet_cols(*tetrimino) - 1);
}

/*da finire di aggiustare*/
/*da finire di aggiustare CREDO SIA INUTILE, si puó usare pvp_end_game*/
void pve_end_game(int win_flag, gamefield_t **gameFields, tetrimini_pool_t *pool, pointboard_t *points, player_t **players, unsigned int start_time, int *moves) /*thanos++*/
{
WINDOW *field1Win = get_gamefield_win(gameFields[0]);
Expand Down
4 changes: 3 additions & 1 deletion src/player.c
Original file line number Diff line number Diff line change
Expand Up @@ -38,7 +38,9 @@ void free_player(player_t *p)
free(p->nickname);
free(p);
}

/**
* @brief struct della tabella dei punti, contiene la finestra di ncurses e il/i puntatore/i al/ai player.
*/
typedef struct PointBoard
{
WINDOW *win;
Expand Down
25 changes: 20 additions & 5 deletions src/singleplayer.c
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,11 @@
void single_continue_game(player_t *player, gamefield_t *gameField, tetrimini_pool_t *pool, pointboard_t *points);
void end_game(gamefield_t *gameField, tetrimini_pool_t *pool, pointboard_t *points, player_t *player, unsigned int start_time, int moves);
void new_game_single();

/**
* @brief stampa le istruzioni per la partita in singleplayer
*
* @param[in] nickname puntatore al nome del giocatore
*/
void instructions(char *nickname)
{
WINDOW *instructions_win;
Expand Down Expand Up @@ -81,11 +85,12 @@ void new_game_single()

/**
* @brief corpo principale del gioco che si alterna fra scelta blocco e drop dello stesso
* controllando eventuali perdite, righe riempite ecc...
*
* @param[in] player Il giocatore.
* @param[in] gameField Il campo da gioco del giocatore.
* @param[in] pool I tetramini rimanenti.
* @param[in] points Il punteggio del giocatore.
* @param[in] player Il puntatore al giocatore.
* @param[in] gameField Il puntatore al campo da gioco del giocatore.
* @param[in] pool La pool usata in partita con i tetramini rimanenti.
* @param[in] points Il puntatore al punteggio del giocatore.
*/
void single_continue_game(player_t *player, gamefield_t *gameField, tetrimini_pool_t *pool, pointboard_t *points)
{
Expand Down Expand Up @@ -131,6 +136,16 @@ void single_continue_game(player_t *player, gamefield_t *gameField, tetrimini_po
end_game(gameField, pool, points, player, start_time, moves);
}

/**
* @brief gestisce la fine della partita e dealloca tutto ció che é stato usato
*
* @param[in] gameField Il puntatore al campo da gioco del giocatore.
* @param[in] pool La pool usata in partita con i tetramini rimanenti. (serve per deallocarla)
* @param[in] points Il puntatore al punteggio del giocatore.
* @param[in] player Il puntatore al giocatore.
* @param[in] start_time timestamp di inizio della partita.
* @param[in] moves Il numero di mosse effettuate.
*/
void end_game(gamefield_t *gameField, tetrimini_pool_t *pool, pointboard_t *points, player_t *player, unsigned int start_time, int moves) /*thanos++*/
{
WINDOW *fieldWin = get_gamefield_win(gameField);
Expand Down

0 comments on commit b561bb8

Please sign in to comment.