diff --git a/Doxyfile b/Doxyfile index 82d3321..3e6e482 100644 --- a/Doxyfile +++ b/Doxyfile @@ -38,27 +38,27 @@ PROJECT_NAME = "Tetrix" # could be handy for archiving the generated documentation or if some version # control system is used. -PROJECT_NUMBER = +PROJECT_NUMBER = "1.0.0" # Using the PROJECT_BRIEF tag one can provide an optional one line description # for a project that appears at the top of each page and should give viewer a # quick idea about the purpose of the project. Keep the description short. -PROJECT_BRIEF = +PROJECT_BRIEF = "Tetrix by Davide Antonio Amodio, Luca Boffo, Alvise Favero" # With the PROJECT_LOGO tag one can specify a logo or an icon that is included # in the documentation. The maximum height of the logo should not exceed 55 # pixels and the maximum width should not exceed 200 pixels. Doxygen will copy # the logo to the output directory. -PROJECT_LOGO = +PROJECT_LOGO = "assets/logo.png" # The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute) path # into which the generated documentation will be written. If a relative path is # entered, it will be relative to the location where doxygen was started. If # left blank the current directory will be used. -OUTPUT_DIRECTORY = +OUTPUT_DIRECTORY = "doxygen" # If the CREATE_SUBDIRS tag is set to YES then doxygen will create 4096 sub- # directories (in 2 levels) under the output directory of each output format and @@ -467,7 +467,7 @@ LOOKUP_CACHE_SIZE = 0 # normally produced when WARNINGS is set to YES. # The default value is: NO. -EXTRACT_ALL = NO +EXTRACT_ALL = YES # If the EXTRACT_PRIVATE tag is set to YES, all private members of a class will # be included in the documentation. @@ -829,7 +829,7 @@ WARN_LOGFILE = # spaces. See also FILE_PATTERNS and EXTENSION_MAPPING # Note: If this tag is empty the current directory is searched. -INPUT = +INPUT = "src" # This tag can be used to specify the character encoding of the source files # that doxygen parses. Internally doxygen uses the UTF-8 encoding. Doxygen uses @@ -1737,7 +1737,7 @@ EXTRA_SEARCH_MAPPINGS = # If the GENERATE_LATEX tag is set to YES, doxygen will generate LaTeX output. # The default value is: YES. -GENERATE_LATEX = YES +GENERATE_LATEX = NO # The LATEX_OUTPUT tag is used to specify where the LaTeX docs will be put. If a # relative path is entered the value of OUTPUT_DIRECTORY will be put in front of diff --git a/README.txt b/README.txt new file mode 100644 index 0000000..18d2c72 --- /dev/null +++ b/README.txt @@ -0,0 +1,6 @@ +Tetri-X: + ID gruppo: 040 + Membri: + 890205 - Davide Antonio Amodio + 889058 - Luca Boffo + 888851 - Alvise Favero \ No newline at end of file diff --git a/assets/logo.png b/assets/logo.png new file mode 100644 index 0000000..b3c3189 Binary files /dev/null and b/assets/logo.png differ diff --git a/assets/logo.xcf b/assets/logo.xcf new file mode 100644 index 0000000..035accc Binary files /dev/null and b/assets/logo.xcf differ diff --git a/doxygen/html/_formulas.log b/doxygen/html/_formulas.log new file mode 100644 index 0000000..c5e6e87 --- /dev/null +++ b/doxygen/html/_formulas.log @@ -0,0 +1,78 @@ +This is pdfTeX, Version 3.141592653-2.6-1.40.22 (TeX Live 2021) (preloaded format=latex 2022.6.18) 23 JUN 2022 11:56 +entering extended mode + restricted \write18 enabled. + %&-line parsing enabled. +**_formulas.tex +(./_formulas.tex +LaTeX2e <2020-10-01> patch level 4 +L3 programming layer <2021-05-07> (/usr/share/texlive/texmf-dist/tex/latex/base +/article.cls +Document Class: article 2020/04/10 v1.4m Standard LaTeX document class +(/usr/share/texlive/texmf-dist/tex/latex/base/size10.clo +File: size10.clo 2020/04/10 v1.4m Standard LaTeX file (size option) +) +\c@part=\count179 +\c@section=\count180 +\c@subsection=\count181 +\c@subsubsection=\count182 +\c@paragraph=\count183 +\c@subparagraph=\count184 +\c@figure=\count185 +\c@table=\count186 +\abovecaptionskip=\skip47 +\belowcaptionskip=\skip48 +\bibindent=\dimen138 +) (/usr/share/texlive/texmf-dist/tex/latex/base/ifthen.sty +Package: ifthen 2014/09/29 v1.1c Standard LaTeX ifthen package (DPC) +) (/usr/share/texlive/texmf-dist/tex/latex/graphics/epsfig.sty +Package: epsfig 2017/06/25 v1.7b (e)psfig emulation (SPQR) +(/usr/share/texlive/texmf-dist/tex/latex/graphics/graphicx.sty +Package: graphicx 2020/09/09 v1.2b Enhanced LaTeX Graphics (DPC,SPQR) +(/usr/share/texlive/texmf-dist/tex/latex/graphics/keyval.sty +Package: keyval 2014/10/28 v1.15 key=value parser (DPC) +\KV@toks@=\toks15 +) (/usr/share/texlive/texmf-dist/tex/latex/graphics/graphics.sty +Package: graphics 2020/08/30 v1.4c Standard LaTeX Graphics (DPC,SPQR) +(/usr/share/texlive/texmf-dist/tex/latex/graphics/trig.sty +Package: trig 2016/01/03 v1.10 sin cos tan (DPC) +) (/usr/share/texlive/texmf-dist/tex/latex/graphics-cfg/graphics.cfg +File: graphics.cfg 2016/06/04 v1.11 sample graphics configuration +) +Package graphics Info: Driver file: dvips.def on input line 105. +(/usr/share/texlive/texmf-dist/tex/latex/graphics-def/dvips.def +File: dvips.def 2017/06/20 v3.1d Graphics/color driver for dvips +)) +\Gin@req@height=\dimen139 +\Gin@req@width=\dimen140 +) +\epsfxsize=\dimen141 +\epsfysize=\dimen142 +) (/usr/share/texlive/texmf-dist/tex/latex/base/inputenc.sty +Package: inputenc 2020/08/01 v1.3d Input encoding file +\inpenc@prehook=\toks16 +\inpenc@posthook=\toks17 +) + +! LaTeX Error: File `newunicodechar.sty' not found. + +Type X to quit or to proceed, +or enter new name. (Default extension: sty) + +Enter file name: +! Emergency stop. + + +l.6 \newunicodechar + {⁻}{${}^{-}$}% Superscript minus^^M +*** (cannot \read from terminal in nonstop modes) + + +Here is how much of TeX's memory you used: + 703 strings out of 480294 + 9177 string characters out of 5891993 + 293572 words of memory out of 6000000 + 18193 multiletter control sequences out of 15000+600000 + 403430 words of font info for 27 fonts, out of 8000000 for 9000 + 319 hyphenation exceptions out of 8191 + 70i,0n,76p,228b,36s stack positions out of 5000i,500n,10000p,200000b,80000s +No pages of output. diff --git a/doxygen/html/_formulas.tex b/doxygen/html/_formulas.tex new file mode 100644 index 0000000..f0e5000 --- /dev/null +++ b/doxygen/html/_formulas.tex @@ -0,0 +1,24 @@ +\documentclass{article} +\usepackage{ifthen} +\usepackage{epsfig} +\usepackage[utf8]{inputenc} +\usepackage{newunicodechar} + \newunicodechar{⁻}{${}^{-}$}% Superscript minus + \newunicodechar{²}{${}^{2}$}% Superscript two + \newunicodechar{³}{${}^{3}$}% Superscript three + +\pagestyle{empty} +\begin{document} +$ V= \mathbb{R}^2 $ +\pagebreak + +\[ \mathcal{B} = \left\{ \begin{pmatrix} 1 \\ 0 \end{pmatrix}, \begin{pmatrix} 0 \\ -1 \end{pmatrix} \right\} \] +\pagebreak + +$ T: V \rightarrow V $ +\pagebreak + +\[ T(v)= \begin{pmatrix} -v_2 \\ v_1 \end{pmatrix} \] +\pagebreak + +\end{document} diff --git a/doxygen/html/annotated.html b/doxygen/html/annotated.html new file mode 100644 index 0000000..a0708de --- /dev/null +++ b/doxygen/html/annotated.html @@ -0,0 +1,87 @@ + + + + + + + +Tetrix: Elenco dei tipi composti + + + + + + + + + +
+
+ + + + + + + +
+
Tetrix +  1.0.0 +
+
Tetrix by Davide Antonio Amodio, Luca Boffo, Alvise Favero
+
+
+ + + + + + + +
+ +
+
+ + +
+ +
+ +
+
+
Elenco dei tipi composti
+
+
+
Queste sono le classi, le struct, le union e le interfacce con una loro breve descrizione:
+ + + + + + + +
 CGameFieldStruct contentente il puntatore alla matrice del campo di gioco e il puntatore alla finestra di ncurses
 CPlayer
 CPointBoardStruct della tabella dei punti, contiene la finestra di ncurses e il/i puntatore/i al/ai player
 CStrategyStruct della strategia di gioco, contentiene il suo campo da gioco e il "punteggio" della strategia
 CTetriminiPoolLa struct della finestra con tutti i pezzi dei tetramini rimanenti
 CTetriminoNon è un typo, in inglese si scrive così
+
+
+ + + + diff --git a/doxygen/html/bc_s.png b/doxygen/html/bc_s.png new file mode 100644 index 0000000..224b29a Binary files /dev/null and b/doxygen/html/bc_s.png differ diff --git a/doxygen/html/bdwn.png b/doxygen/html/bdwn.png new file mode 100644 index 0000000..940a0b9 Binary files /dev/null and b/doxygen/html/bdwn.png differ diff --git a/doxygen/html/bot_8c.html b/doxygen/html/bot_8c.html new file mode 100644 index 0000000..57f4ab5 --- /dev/null +++ b/doxygen/html/bot_8c.html @@ -0,0 +1,521 @@ + + + + + + + +Tetrix: Riferimenti per il file src/bot.c + + + + + + + + + +
+
+ + + + + + + +
+
Tetrix +  1.0.0 +
+
Tetrix by Davide Antonio Amodio, Luca Boffo, Alvise Favero
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+ +
+
Riferimenti per il file bot.c
+
+
+
#include <malloc.h>
+#include "../include/tetrimino.h"
+#include "../include/gamefield.h"
+#include "../include/constants.h"
+#include "../include/bot.h"
+#include "../include/functions.h"
+
+Grafo delle dipendenze di inclusione per bot.c:
+
+
+ + + + + + + + + +
+
+ + + + +

+Composti

struct  Strategy
 struct della strategia di gioco, contentiene il suo campo da gioco e il "punteggio" della strategia. Continua...
 
+ + + + +

+Ridefinizioni di tipo (typedef)

typedef struct Strategy strategy_t
 struct della strategia di gioco, contentiene il suo campo da gioco e il "punteggio" della strategia. Continua...
 
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Funzioni

strategy_tstrategy_create (int *field)
 funzione che istanzia la strategia DEEP-copiando giá la board. Continua...
 
void strategy_destroy (strategy_t *strategy)
 distrugge la strategia puntata dal parametro. Continua...
 
int get_strategy_cursor (strategy_t *s)
 funzione che ritorna il cursore della strategia passata come parametro. Continua...
 
int get_strategy_tet_type (strategy_t *s)
 funzione che ritorna il tipo di tetramino usato dalla strategia passata come parametro. Continua...
 
int get_strategy_tet_rotation (strategy_t *s)
 funzione che ritorna la rotazione del tetramino usato della strategia passata come parametro. Continua...
 
void strategy_update (strategy_t *strategy, tetrimino_t *tetrimino, int cur_pos, int rotation, int last_used_tetrimino, int last_cursor)
 popola tutti i campi della struct strategia con i valori passati come parametri e calcola quelli assenti come lo score. Continua...
 
int set_strategy (strategy_t **best, int size, strategy_t *str)
 Funzione ricorsiva che compara la strategia passata per parametro con le migliori. Se ci sono slot liberi, la inserisce automaticamente nel primo di questi. Se invece non ci sono slot liberi, constrolla le altre strategie e se è migliore di una di queste la sostituisce. Continua...
 
strategy_tchoose_strategy (gamefield_t *g, tetrimini_pool_t *pool, int err)
 Funzione di bruteforce del bot. Continua...
 
int calculate_score (strategy_t *s, int *old, tetrimino_t *tet, tetrimino_t *last_used_tet, int last_cursor, int drops)
 Funzione che calcola la strategia migliore del bot. Continua...
 
+

Documentazione delle ridefinizioni di tipo (typedef)

+ +

◆ strategy_t

+ +
+
+ + + + +
typedef struct Strategy strategy_t
+
+ +

struct della strategia di gioco, contentiene il suo campo da gioco e il "punteggio" della strategia.

+ +
+
+

Documentazione delle funzioni

+ +

◆ calculate_score()

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
int calculate_score (strategy_ts,
int * old,
tetrimino_ttet,
tetrimino_tlast_used_tet,
int last_cursor,
int drops 
)
+
+ +

Funzione che calcola la strategia migliore del bot.

+
Parametri
+ + + + + + + +
[in]sil puntatore alla strategia
[in]oldil puntatore al campo da gioco precendente alla mossa
[in]tetil puntatore al tetramino usato dalla mossa
[in]last_used_tetil puntatore al tetramino usato dalla mossa precedente
[in]last_cursoril cursore usato dalla mossa precedente
[in]dropsflag per sapere se é possibile effettuare il drop (se quella mossa fa finire la partita)
+
+
+
Restituisce
Il punteggio della strategia.
+ +
+
+ +

◆ choose_strategy()

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + +
strategy_t* choose_strategy (gamefield_tg,
tetrimini_pool_tpool,
int err 
)
+
+ +

Funzione di bruteforce del bot.

+
Parametri
+ + + + +
[in]gIl campo su cui preparare una strategia.
[in]poolLa pool di tetramini, per far sì che possa scegliere un tetramino rimanente.
[in]errLa variabile che indica quante strategie il bot deve prendere in considerazione.
+
+
+
Restituisce
La strategia che il bot considera migliore.
+ +
+
+ +

◆ get_strategy_cursor()

+ +
+
+ + + + + + + + +
int get_strategy_cursor (strategy_ts)
+
+ +

funzione che ritorna il cursore della strategia passata come parametro.

+
Parametri
+ + +
[in]sil puntatore alla strategia.
+
+
+
Restituisce
il cursore sul campo.
+ +
+
+ +

◆ get_strategy_tet_rotation()

+ +
+
+ + + + + + + + +
int get_strategy_tet_rotation (strategy_ts)
+
+ +

funzione che ritorna la rotazione del tetramino usato della strategia passata come parametro.

+
Parametri
+ + +
[in]sil puntatore alla strategia.
+
+
+
Restituisce
la rotazione del tetramino.
+ +
+
+ +

◆ get_strategy_tet_type()

+ +
+
+ + + + + + + + +
int get_strategy_tet_type (strategy_ts)
+
+ +

funzione che ritorna il tipo di tetramino usato dalla strategia passata come parametro.

+
Parametri
+ + +
[in]sil puntatore alla strategia.
+
+
+
Restituisce
il tipo di tetramino usato dalla strategia.
+ +
+
+ +

◆ set_strategy()

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + +
int set_strategy (strategy_t ** best,
int size,
strategy_tstr 
)
+
+ +

Funzione ricorsiva che compara la strategia passata per parametro con le migliori. Se ci sono slot liberi, la inserisce automaticamente nel primo di questi. Se invece non ci sono slot liberi, constrolla le altre strategie e se è migliore di una di queste la sostituisce.

+
Parametri
+ + + + +
[in]bestL'array di strategie.
[in]sizeLa dimensione dell'array.
[in]strLa strategia da inserire.
+
+
+
Restituisce
1 se ha inserito la strategia nell'array, 0 altrimenti.
+ +
+
+ +

◆ strategy_create()

+ +
+
+ + + + + + + + +
strategy_t* strategy_create (int * field)
+
+ +

funzione che istanzia la strategia DEEP-copiando giá la board.

+
Parametri
+ + +
[in]fieldil puntatore al campo da gioco del bot
+
+
+
Restituisce
puntatore alla strategia
+ +
+
+ +

◆ strategy_destroy()

+ +
+
+ + + + + + + + +
void strategy_destroy (strategy_tstrategy)
+
+ +

distrugge la strategia puntata dal parametro.

+
Parametri
+ + +
[in]strategyil puntatore alla strategia.
+
+
+ +
+
+ +

◆ strategy_update()

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
void strategy_update (strategy_tstrategy,
tetrimino_ttetrimino,
int cur_pos,
int rotation,
int last_used_tetrimino,
int last_cursor 
)
+
+ +

popola tutti i campi della struct strategia con i valori passati come parametri e calcola quelli assenti come lo score.

+
Parametri
+ + + + + + + +
[in]strategyil puntatore alla strategia.
[in]tetriminoit puntatoro al tetramino usato.
[in]cur_posla posizione del cursore.
[in]rotationla rotazione del tetramino.
[in]last_used_tetriminoil tetramino usato precedentemente.
[in]last_cursoril cursore usato precedentemente.
+
+
+ +
+
+
+ + + + diff --git a/doxygen/html/bot_8c__incl.md5 b/doxygen/html/bot_8c__incl.md5 new file mode 100644 index 0000000..6c2dbdf --- /dev/null +++ b/doxygen/html/bot_8c__incl.md5 @@ -0,0 +1 @@ +6d24bc60be7711bbbee3b8d646246d93 \ No newline at end of file diff --git a/doxygen/html/bot_8c__incl.png b/doxygen/html/bot_8c__incl.png new file mode 100644 index 0000000..73e1fce Binary files /dev/null and b/doxygen/html/bot_8c__incl.png differ diff --git a/doxygen/html/classes.html b/doxygen/html/classes.html new file mode 100644 index 0000000..7c5eeb4 --- /dev/null +++ b/doxygen/html/classes.html @@ -0,0 +1,92 @@ + + + + + + + +Tetrix: Indice dei tipi composti + + + + + + + + + +
+
+ + + + + + + +
+
Tetrix +  1.0.0 +
+
Tetrix by Davide Antonio Amodio, Luca Boffo, Alvise Favero
+
+
+ + + + + + + +
+ +
+
+ + +
+ +
+ +
+
+
Indice dei tipi composti
+
+
+
G | P | S | T
+ +
+ + + + diff --git a/doxygen/html/closed.png b/doxygen/html/closed.png new file mode 100644 index 0000000..98cc2c9 Binary files /dev/null and b/doxygen/html/closed.png differ diff --git a/doxygen/html/constants_8c.html b/doxygen/html/constants_8c.html new file mode 100644 index 0000000..6badec1 --- /dev/null +++ b/doxygen/html/constants_8c.html @@ -0,0 +1,275 @@ + + + + + + + +Tetrix: Riferimenti per il file src/constants.c + + + + + + + + + +
+
+ + + + + + + +
+
Tetrix +  1.0.0 +
+
Tetrix by Davide Antonio Amodio, Luca Boffo, Alvise Favero
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+ +
+
Riferimenti per il file constants.c
+
+
+ + + + +

+Definizioni

#define CONSTANTS_C
 
+ + + + + + + + + + + + + + + +

+Variabili

const unsigned char ART_LOGO []
 
const char ART_GAME_OVER []
 
const char * SINGLE_WELCOME_TXT []
 
const char * SINGLE_END_TXT []
 
const char * PVP_WELCOME_TXT []
 
const char * PVP_END_TXT []
 
const char * PVE_WELCOME_TXT []
 
+

Documentazione delle definizioni

+ +

◆ CONSTANTS_C

+ +
+
+ + + + +
#define CONSTANTS_C
+
+ +
+
+

Documentazione delle variabili

+ +

◆ ART_GAME_OVER

+ +
+
+ + + + +
const char ART_GAME_OVER[]
+
+ +
+
+ +

◆ ART_LOGO

+ +
+
+ + + + +
const unsigned char ART_LOGO[]
+
+ +
+
+ +

◆ PVE_WELCOME_TXT

+ +
+
+ + + + +
const char* PVE_WELCOME_TXT[]
+
+Valore iniziale:
= {
+
"Ciao, ",
+
"Benvenuto su Tetrix, di seguito troverai le istruzioni per il gioco\n\n"
+
"Parte 1: \n"
+
"Usa le freccie UP e DOWN per muoverti nella pool di tetramini, premi ENTER per selezionarne uno\n\n"
+
"Parte 2:\nUsa le freccie LEFT e RIGHT per muovere il tetramino sopra la pool,\n"
+
"Premi le frecce UP o DOWN per ruotare il tetramino di 90 gradi, premi BACKSPACE per tornare alla selezione dei tetramini,\n"
+
"premi ENTER per piazzarlo.\n\n"
+
"Punteggio e Game Over:\n"
+
"La rimozione di una riga vale 1 punto, la rimozione di due righe con un solo pezzo vale 3 punti,\n"
+
"in caso di rimozione di tre o quattro righe il campo da gioco della CPU viene modificato,\n"
+
"viene invertito ogni blocco per il corrispondente numero di righe \n"
+
"Il gioco termina quando finiscono i pezzi o il giocatore/la CPU non riesce a posizionare un tetramino nel campo di gioco\n"
+
"rispettando il limite di altezza."}
+
+
+
+ +

◆ PVP_END_TXT

+ +
+
+ + + + +
const char* PVP_END_TXT[]
+
+Valore iniziale:
= {
+
"GRAZIE PER AVER GIOCATO A TETRIX! \n"
+
"ECCO LE VOSTRE STATISTICHE: \n\n",
+
"Punteggio ",
+
"Durata del match: ",
+
"Turni di gioco ",
+
"VINCITORE: "}
+
+
+
+ +

◆ PVP_WELCOME_TXT

+ +
+
+ + + + +
const char* PVP_WELCOME_TXT[]
+
+Valore iniziale:
= {
+
"Ciao, ",
+
"Benvenuti su Tetrix, di seguito troverete le istruzioni per il gioco\n\n"
+
"Parte 1: \n"
+
"Usate le frecce UP e DOWN per muovervi nella pool di tetramini, premete ENTER per selezionarne uno\n\n"
+
"Parte 2:\nUsate le frecce LEFT o RIGHT per muovere il tetramino sopra la pool,\n"
+
"Premete le frecce UP o DOWN per ruotare il tetramino di 90 gradi, premete BACKSPACE per tornare alla selezione dei tetramini,\n"
+
"premete ENTER per piazzarlo.\n\n"
+
"Punteggio e Game Over:\n"
+
"La rimozione di una riga vale 1 punto, la rimozione di due righe con un solo pezzo vale 3 punti,\n"
+
"in caso di rimozione di tre o quattro righe il campo da gioco dell'avversario viene modificato,\n"
+
"viene invertito ogni blocco per il corrispondente numero di righe \n"
+
"Il gioco termina quando finiscono i pezzi o un giocatore non riesce a posizionare un tetramino nel campo di gioco\n"
+
"rispettando il limite di altezza."}
+
+
+
+ +

◆ SINGLE_END_TXT

+ +
+
+ + + + +
const char* SINGLE_END_TXT[]
+
+Valore iniziale:
= {
+
"GRAZIE PER AVER GIOCATO A TETRIX, ",
+
"ECCO LE TUE STATISTICHE: \n\n"
+
"Punteggio totale: ",
+
"Durata del match: ",
+
"Turni di gioco: "}
+
+
+
+ +

◆ SINGLE_WELCOME_TXT

+ +
+
+ + + + +
const char* SINGLE_WELCOME_TXT[]
+
+Valore iniziale:
= {
+
"Ciao, ",
+
"Benvenuto su Tetrix, di seguito troverai le istruzioni per il gioco\n\n"
+
"Parte 1: \n"
+
"Usa le freccie UP e DOWN per muoverti nella pool di tetramini, premi ENTER per selezionarne uno\n\n"
+
"Parte 2:\nUsa le freccie LEFT e RIGHT per muovere il tetramino sopra la pool,\n"
+
"Premi le frecce UP o DOWN per ruotare il tetramino di 90 gradi, premi BACKSPACE per tornare alla selezione dei tetramini,\n"
+
"premi ENTER per piazzarlo.\n\n"
+
"Punteggio e Game Over:\n"
+
"La rimozione di una riga vale 1 punto, la rimozione di due righe con un solo pezzo vale 3 punti, tre righe 6 punti,\n"
+
"quattro righe 12 punti.\n"
+
"Il gioco termina quando finiscono i pezzi o il giocatore non riesce a posizionare un tetramino nel campo di gioco\n"
+
"rispettando il limite di altezza."}
+
+
+
+
+ + + + diff --git a/doxygen/html/dir_68267d1309a1af8e8297ef4c3efbcdba.html b/doxygen/html/dir_68267d1309a1af8e8297ef4c3efbcdba.html new file mode 100644 index 0000000..6076b8a --- /dev/null +++ b/doxygen/html/dir_68267d1309a1af8e8297ef4c3efbcdba.html @@ -0,0 +1,105 @@ + + + + + + + +Tetrix: Riferimenti per la directory src + + + + + + + + + +
+
+ + + + + + + +
+
Tetrix +  1.0.0 +
+
Tetrix by Davide Antonio Amodio, Luca Boffo, Alvise Favero
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
+
Riferimenti per la directory src
+
+
+ + + + + + + + + + + + + + + + + + + + + + +

+File

file  bot.c
 
file  constants.c
 
file  functions.c
 
file  gamefield.c
 
file  main.c
 
file  multiplayer.c
 
file  player.c
 
file  singleplayer.c
 
file  tester.c
 
file  tetrimino.c
 
+
+ + + + diff --git a/doxygen/html/doc.png b/doxygen/html/doc.png new file mode 100644 index 0000000..17edabf Binary files /dev/null and b/doxygen/html/doc.png differ diff --git a/doxygen/html/doxygen.css b/doxygen/html/doxygen.css new file mode 100644 index 0000000..ffbff02 --- /dev/null +++ b/doxygen/html/doxygen.css @@ -0,0 +1,1793 @@ +/* The standard CSS for doxygen 1.9.1 */ + +body, table, div, p, dl { + font: 400 14px/22px Roboto,sans-serif; +} + +p.reference, p.definition { + font: 400 14px/22px Roboto,sans-serif; +} + +/* @group Heading Levels */ + +h1.groupheader { + font-size: 150%; +} + +.title { + font: 400 14px/28px Roboto,sans-serif; + font-size: 150%; + font-weight: bold; + margin: 10px 2px; +} + +h2.groupheader { + border-bottom: 1px solid #879ECB; + color: #354C7B; + font-size: 150%; + font-weight: normal; + margin-top: 1.75em; + padding-top: 8px; + padding-bottom: 4px; + width: 100%; +} + +h3.groupheader { + font-size: 100%; +} + +h1, h2, h3, h4, h5, h6 { + -webkit-transition: text-shadow 0.5s linear; + -moz-transition: text-shadow 0.5s linear; + -ms-transition: text-shadow 0.5s linear; + -o-transition: text-shadow 0.5s linear; + transition: text-shadow 0.5s linear; + margin-right: 15px; +} + +h1.glow, h2.glow, h3.glow, h4.glow, h5.glow, h6.glow { + text-shadow: 0 0 15px cyan; +} + +dt { + font-weight: bold; +} + +ul.multicol { + -moz-column-gap: 1em; + -webkit-column-gap: 1em; + column-gap: 1em; + -moz-column-count: 3; + -webkit-column-count: 3; + column-count: 3; +} + +p.startli, p.startdd { + margin-top: 2px; +} + +th p.starttd, th p.intertd, th p.endtd { + font-size: 100%; + font-weight: 700; +} + +p.starttd { + margin-top: 0px; +} + +p.endli { + margin-bottom: 0px; +} + +p.enddd { + margin-bottom: 4px; +} + +p.endtd { + margin-bottom: 2px; +} + +p.interli { +} + +p.interdd { +} + +p.intertd { +} + +/* @end */ + +caption { + font-weight: bold; +} + +span.legend { + font-size: 70%; + text-align: center; +} + +h3.version { + font-size: 90%; + text-align: center; +} + +div.navtab { + border-right: 1px solid #A3B4D7; + padding-right: 15px; + text-align: right; + line-height: 110%; +} + +div.navtab table { + border-spacing: 0; +} + +td.navtab { + padding-right: 6px; + padding-left: 6px; +} +td.navtabHL { + background-image: url('tab_a.png'); + background-repeat:repeat-x; + padding-right: 6px; + padding-left: 6px; +} + +td.navtabHL a, td.navtabHL a:visited { + color: #fff; + text-shadow: 0px 1px 1px rgba(0, 0, 0, 1.0); +} + +a.navtab { + font-weight: bold; +} + +div.qindex{ + text-align: center; + width: 100%; + line-height: 140%; + font-size: 130%; + color: #A0A0A0; +} + +dt.alphachar{ + font-size: 180%; + font-weight: bold; +} + +.alphachar a{ + color: black; +} + +.alphachar a:hover, .alphachar a:visited{ + text-decoration: none; +} + +.classindex dl { + padding: 25px; + column-count:1 +} + +.classindex dd { + display:inline-block; + margin-left: 50px; + width: 90%; + line-height: 1.15em; +} + +.classindex dl.odd { + background-color: #F8F9FC; +} + +@media(min-width: 1120px) { + .classindex dl { + column-count:2 + } +} + +@media(min-width: 1320px) { + .classindex dl { + column-count:3 + } +} + + +/* @group Link Styling */ + +a { + color: #3D578C; + font-weight: normal; + text-decoration: none; +} + +.contents a:visited { + color: #4665A2; +} + +a:hover { + text-decoration: underline; +} + +.contents a.qindexHL:visited { + color: #FFFFFF; +} + +a.el { + font-weight: bold; +} + +a.elRef { +} + +a.code, a.code:visited, a.line, a.line:visited { + color: #4665A2; +} + +a.codeRef, a.codeRef:visited, a.lineRef, a.lineRef:visited { + color: #4665A2; +} + +/* @end */ + +dl.el { + margin-left: -1cm; +} + +ul { + overflow: hidden; /*Fixed: list item bullets overlap floating elements*/ +} + +#side-nav ul { + overflow: visible; /* reset ul rule for scroll bar in GENERATE_TREEVIEW window */ +} + +#main-nav ul { + overflow: visible; /* reset ul rule for the navigation bar drop down lists */ +} + +.fragment { + text-align: left; + direction: ltr; + overflow-x: auto; /*Fixed: fragment lines overlap floating elements*/ + overflow-y: hidden; +} + +pre.fragment { + border: 1px solid #C4CFE5; + background-color: #FBFCFD; + padding: 4px 6px; + margin: 4px 8px 4px 2px; + overflow: auto; + word-wrap: break-word; + font-size: 9pt; + line-height: 125%; + font-family: monospace, fixed; + font-size: 105%; +} + +div.fragment { + padding: 0 0 1px 0; /*Fixed: last line underline overlap border*/ + margin: 4px 8px 4px 2px; + background-color: #FBFCFD; + border: 1px solid #C4CFE5; +} + +div.line { + font-family: monospace, fixed; + font-size: 13px; + min-height: 13px; + line-height: 1.0; + text-wrap: unrestricted; + white-space: -moz-pre-wrap; /* Moz */ + white-space: -pre-wrap; /* Opera 4-6 */ + white-space: -o-pre-wrap; /* Opera 7 */ + white-space: pre-wrap; /* CSS3 */ + word-wrap: break-word; /* IE 5.5+ */ + text-indent: -53px; + padding-left: 53px; + padding-bottom: 0px; + margin: 0px; + -webkit-transition-property: background-color, box-shadow; + -webkit-transition-duration: 0.5s; + -moz-transition-property: background-color, box-shadow; + -moz-transition-duration: 0.5s; + -ms-transition-property: background-color, box-shadow; + -ms-transition-duration: 0.5s; + -o-transition-property: background-color, box-shadow; + -o-transition-duration: 0.5s; + transition-property: background-color, box-shadow; + transition-duration: 0.5s; +} + +div.line:after { + content:"\000A"; + white-space: pre; +} + +div.line.glow { + background-color: cyan; + box-shadow: 0 0 10px cyan; +} + + +span.lineno { + padding-right: 4px; + text-align: right; + border-right: 2px solid #0F0; + background-color: #E8E8E8; + white-space: pre; +} +span.lineno a { + background-color: #D8D8D8; +} + +span.lineno a:hover { + background-color: #C8C8C8; +} + +.lineno { + -webkit-touch-callout: none; + -webkit-user-select: none; + -khtml-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} + +div.ah, span.ah { + background-color: black; + font-weight: bold; + color: #FFFFFF; + margin-bottom: 3px; + margin-top: 3px; + padding: 0.2em; + border: solid thin #333; + border-radius: 0.5em; + -webkit-border-radius: .5em; + -moz-border-radius: .5em; + box-shadow: 2px 2px 3px #999; + -webkit-box-shadow: 2px 2px 3px #999; + -moz-box-shadow: rgba(0, 0, 0, 0.15) 2px 2px 2px; + background-image: -webkit-gradient(linear, left top, left bottom, from(#eee), to(#000),color-stop(0.3, #444)); + background-image: -moz-linear-gradient(center top, #eee 0%, #444 40%, #000 110%); +} + +div.classindex ul { + list-style: none; + padding-left: 0; +} + +div.classindex span.ai { + display: inline-block; +} + +div.groupHeader { + margin-left: 16px; + margin-top: 12px; + font-weight: bold; +} + +div.groupText { + margin-left: 16px; + font-style: italic; +} + +body { + background-color: white; + color: black; + margin: 0; +} + +div.contents { + margin-top: 10px; + margin-left: 12px; + margin-right: 8px; +} + +td.indexkey { + background-color: #EBEFF6; + font-weight: bold; + border: 1px solid #C4CFE5; + margin: 2px 0px 2px 0; + padding: 2px 10px; + white-space: nowrap; + vertical-align: top; +} + +td.indexvalue { + background-color: #EBEFF6; + border: 1px solid #C4CFE5; + padding: 2px 10px; + margin: 2px 0px; +} + +tr.memlist { + background-color: #EEF1F7; +} + +p.formulaDsp { + text-align: center; +} + +img.formulaDsp { + +} + +img.formulaInl, img.inline { + vertical-align: middle; +} + +div.center { + text-align: center; + margin-top: 0px; + margin-bottom: 0px; + padding: 0px; +} + +div.center img { + border: 0px; +} + +address.footer { + text-align: right; + padding-right: 12px; +} + +img.footer { + border: 0px; + vertical-align: middle; +} + +/* @group Code Colorization */ + +span.keyword { + color: #008000 +} + +span.keywordtype { + color: #604020 +} + +span.keywordflow { + color: #e08000 +} + +span.comment { + color: #800000 +} + +span.preprocessor { + color: #806020 +} + +span.stringliteral { + color: #002080 +} + +span.charliteral { + color: #008080 +} + +span.vhdldigit { + color: #ff00ff +} + +span.vhdlchar { + color: #000000 +} + +span.vhdlkeyword { + color: #700070 +} + +span.vhdllogic { + color: #ff0000 +} + +blockquote { + background-color: #F7F8FB; + border-left: 2px solid #9CAFD4; + margin: 0 24px 0 4px; + padding: 0 12px 0 16px; +} + +blockquote.DocNodeRTL { + border-left: 0; + border-right: 2px solid #9CAFD4; + margin: 0 4px 0 24px; + padding: 0 16px 0 12px; +} + +/* @end */ + +/* +.search { + color: #003399; + font-weight: bold; +} + +form.search { + margin-bottom: 0px; + margin-top: 0px; +} + +input.search { + font-size: 75%; + color: #000080; + font-weight: normal; + background-color: #e8eef2; +} +*/ + +td.tiny { + font-size: 75%; +} + +.dirtab { + padding: 4px; + border-collapse: collapse; + border: 1px solid #A3B4D7; +} + +th.dirtab { + background: #EBEFF6; + font-weight: bold; +} + +hr { + height: 0px; + border: none; + border-top: 1px solid #4A6AAA; +} + +hr.footer { + height: 1px; +} + +/* @group Member Descriptions */ + +table.memberdecls { + border-spacing: 0px; + padding: 0px; +} + +.memberdecls td, .fieldtable tr { + -webkit-transition-property: background-color, box-shadow; + -webkit-transition-duration: 0.5s; + -moz-transition-property: background-color, box-shadow; + -moz-transition-duration: 0.5s; + -ms-transition-property: background-color, box-shadow; + -ms-transition-duration: 0.5s; + -o-transition-property: background-color, box-shadow; + -o-transition-duration: 0.5s; + transition-property: background-color, box-shadow; + transition-duration: 0.5s; +} + +.memberdecls td.glow, .fieldtable tr.glow { + background-color: cyan; + box-shadow: 0 0 15px cyan; +} + +.mdescLeft, .mdescRight, +.memItemLeft, .memItemRight, +.memTemplItemLeft, .memTemplItemRight, .memTemplParams { + background-color: #F9FAFC; + border: none; + margin: 4px; + padding: 1px 0 0 8px; +} + +.mdescLeft, .mdescRight { + padding: 0px 8px 4px 8px; + color: #555; +} + +.memSeparator { + border-bottom: 1px solid #DEE4F0; + line-height: 1px; + margin: 0px; + padding: 0px; +} + +.memItemLeft, .memTemplItemLeft { + white-space: nowrap; +} + +.memItemRight, .memTemplItemRight { + width: 100%; +} + +.memTemplParams { + color: #4665A2; + white-space: nowrap; + font-size: 80%; +} + +/* @end */ + +/* @group Member Details */ + +/* Styles for detailed member documentation */ + +.memtitle { + padding: 8px; + border-top: 1px solid #A8B8D9; + border-left: 1px solid #A8B8D9; + border-right: 1px solid #A8B8D9; + border-top-right-radius: 4px; + border-top-left-radius: 4px; + margin-bottom: -1px; + background-image: url('nav_f.png'); + background-repeat: repeat-x; + background-color: #E2E8F2; + line-height: 1.25; + font-weight: 300; + float:left; +} + +.permalink +{ + font-size: 65%; + display: inline-block; + vertical-align: middle; +} + +.memtemplate { + font-size: 80%; + color: #4665A2; + font-weight: normal; + margin-left: 9px; +} + +.memnav { + background-color: #EBEFF6; + border: 1px solid #A3B4D7; + text-align: center; + margin: 2px; + margin-right: 15px; + padding: 2px; +} + +.mempage { + width: 100%; +} + +.memitem { + padding: 0; + margin-bottom: 10px; + margin-right: 5px; + -webkit-transition: box-shadow 0.5s linear; + -moz-transition: box-shadow 0.5s linear; + -ms-transition: box-shadow 0.5s linear; + -o-transition: box-shadow 0.5s linear; + transition: box-shadow 0.5s linear; + display: table !important; + width: 100%; +} + +.memitem.glow { + box-shadow: 0 0 15px cyan; +} + +.memname { + font-weight: 400; + margin-left: 6px; +} + +.memname td { + vertical-align: bottom; +} + +.memproto, dl.reflist dt { + border-top: 1px solid #A8B8D9; + border-left: 1px solid #A8B8D9; + border-right: 1px solid #A8B8D9; + padding: 6px 0px 6px 0px; + color: #253555; + font-weight: bold; + text-shadow: 0px 1px 1px rgba(255, 255, 255, 0.9); + background-color: #DFE5F1; + /* opera specific markup */ + box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15); + border-top-right-radius: 4px; + /* firefox specific markup */ + -moz-box-shadow: rgba(0, 0, 0, 0.15) 5px 5px 5px; + -moz-border-radius-topright: 4px; + /* webkit specific markup */ + -webkit-box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15); + -webkit-border-top-right-radius: 4px; + +} + +.overload { + font-family: "courier new",courier,monospace; + font-size: 65%; +} + +.memdoc, dl.reflist dd { + border-bottom: 1px solid #A8B8D9; + border-left: 1px solid #A8B8D9; + border-right: 1px solid #A8B8D9; + padding: 6px 10px 2px 10px; + background-color: #FBFCFD; + border-top-width: 0; + background-image:url('nav_g.png'); + background-repeat:repeat-x; + background-color: #FFFFFF; + /* opera specific markup */ + border-bottom-left-radius: 4px; + border-bottom-right-radius: 4px; + box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15); + /* firefox specific markup */ + -moz-border-radius-bottomleft: 4px; + -moz-border-radius-bottomright: 4px; + -moz-box-shadow: rgba(0, 0, 0, 0.15) 5px 5px 5px; + /* webkit specific markup */ + -webkit-border-bottom-left-radius: 4px; + -webkit-border-bottom-right-radius: 4px; + -webkit-box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15); +} + +dl.reflist dt { + padding: 5px; +} + +dl.reflist dd { + margin: 0px 0px 10px 0px; + padding: 5px; +} + +.paramkey { + text-align: right; +} + +.paramtype { + white-space: nowrap; +} + +.paramname { + color: #602020; + white-space: nowrap; +} +.paramname em { + font-style: normal; +} +.paramname code { + line-height: 14px; +} + +.params, .retval, .exception, .tparams { + margin-left: 0px; + padding-left: 0px; +} + +.params .paramname, .retval .paramname, .tparams .paramname, .exception .paramname { + font-weight: bold; + vertical-align: top; +} + +.params .paramtype, .tparams .paramtype { + font-style: italic; + vertical-align: top; +} + +.params .paramdir, .tparams .paramdir { + font-family: "courier new",courier,monospace; + vertical-align: top; +} + +table.mlabels { + border-spacing: 0px; +} + +td.mlabels-left { + width: 100%; + padding: 0px; +} + +td.mlabels-right { + vertical-align: bottom; + padding: 0px; + white-space: nowrap; +} + +span.mlabels { + margin-left: 8px; +} + +span.mlabel { + background-color: #728DC1; + border-top:1px solid #5373B4; + border-left:1px solid #5373B4; + border-right:1px solid #C4CFE5; + border-bottom:1px solid #C4CFE5; + text-shadow: none; + color: white; + margin-right: 4px; + padding: 2px 3px; + border-radius: 3px; + font-size: 7pt; + white-space: nowrap; + vertical-align: middle; +} + + + +/* @end */ + +/* these are for tree view inside a (index) page */ + +div.directory { + margin: 10px 0px; + border-top: 1px solid #9CAFD4; + border-bottom: 1px solid #9CAFD4; + width: 100%; +} + +.directory table { + border-collapse:collapse; +} + +.directory td { + margin: 0px; + padding: 0px; + vertical-align: top; +} + +.directory td.entry { + white-space: nowrap; + padding-right: 6px; + padding-top: 3px; +} + +.directory td.entry a { + outline:none; +} + +.directory td.entry a img { + border: none; +} + +.directory td.desc { + width: 100%; + padding-left: 6px; + padding-right: 6px; + padding-top: 3px; + border-left: 1px solid rgba(0,0,0,0.05); +} + +.directory tr.even { + padding-left: 6px; + background-color: #F7F8FB; +} + +.directory img { + vertical-align: -30%; +} + +.directory .levels { + white-space: nowrap; + width: 100%; + text-align: right; + font-size: 9pt; +} + +.directory .levels span { + cursor: pointer; + padding-left: 2px; + padding-right: 2px; + color: #3D578C; +} + +.arrow { + color: #9CAFD4; + -webkit-user-select: none; + -khtml-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; + cursor: pointer; + font-size: 80%; + display: inline-block; + width: 16px; + height: 22px; +} + +.icon { + font-family: Arial, Helvetica; + font-weight: bold; + font-size: 12px; + height: 14px; + width: 16px; + display: inline-block; + background-color: #728DC1; + color: white; + text-align: center; + border-radius: 4px; + margin-left: 2px; + margin-right: 2px; +} + +.icona { + width: 24px; + height: 22px; + display: inline-block; +} + +.iconfopen { + width: 24px; + height: 18px; + margin-bottom: 4px; + background-image:url('folderopen.png'); + background-position: 0px -4px; + background-repeat: repeat-y; + vertical-align:top; + display: inline-block; +} + +.iconfclosed { + width: 24px; + height: 18px; + margin-bottom: 4px; + background-image:url('folderclosed.png'); + background-position: 0px -4px; + background-repeat: repeat-y; + vertical-align:top; + display: inline-block; +} + +.icondoc { + width: 24px; + height: 18px; + margin-bottom: 4px; + background-image:url('doc.png'); + background-position: 0px -4px; + background-repeat: repeat-y; + vertical-align:top; + display: inline-block; +} + +table.directory { + font: 400 14px Roboto,sans-serif; +} + +/* @end */ + +div.dynheader { + margin-top: 8px; + -webkit-touch-callout: none; + -webkit-user-select: none; + -khtml-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} + +address { + font-style: normal; + color: #2A3D61; +} + +table.doxtable caption { + caption-side: top; +} + +table.doxtable { + border-collapse:collapse; + margin-top: 4px; + margin-bottom: 4px; +} + +table.doxtable td, table.doxtable th { + border: 1px solid #2D4068; + padding: 3px 7px 2px; +} + +table.doxtable th { + background-color: #374F7F; + color: #FFFFFF; + font-size: 110%; + padding-bottom: 4px; + padding-top: 5px; +} + +table.fieldtable { + /*width: 100%;*/ + margin-bottom: 10px; + border: 1px solid #A8B8D9; + border-spacing: 0px; + -moz-border-radius: 4px; + -webkit-border-radius: 4px; + border-radius: 4px; + -moz-box-shadow: rgba(0, 0, 0, 0.15) 2px 2px 2px; + -webkit-box-shadow: 2px 2px 2px rgba(0, 0, 0, 0.15); + box-shadow: 2px 2px 2px rgba(0, 0, 0, 0.15); +} + +.fieldtable td, .fieldtable th { + padding: 3px 7px 2px; +} + +.fieldtable td.fieldtype, .fieldtable td.fieldname { + white-space: nowrap; + border-right: 1px solid #A8B8D9; + border-bottom: 1px solid #A8B8D9; + vertical-align: top; +} + +.fieldtable td.fieldname { + padding-top: 3px; +} + +.fieldtable td.fielddoc { + border-bottom: 1px solid #A8B8D9; + /*width: 100%;*/ +} + +.fieldtable td.fielddoc p:first-child { + margin-top: 0px; +} + +.fieldtable td.fielddoc p:last-child { + margin-bottom: 2px; +} + +.fieldtable tr:last-child td { + border-bottom: none; +} + +.fieldtable th { + background-image:url('nav_f.png'); + background-repeat:repeat-x; + background-color: #E2E8F2; + font-size: 90%; + color: #253555; + padding-bottom: 4px; + padding-top: 5px; + text-align:left; + font-weight: 400; + -moz-border-radius-topleft: 4px; + -moz-border-radius-topright: 4px; + -webkit-border-top-left-radius: 4px; + -webkit-border-top-right-radius: 4px; + border-top-left-radius: 4px; + border-top-right-radius: 4px; + border-bottom: 1px solid #A8B8D9; +} + + +.tabsearch { + top: 0px; + left: 10px; + height: 36px; + background-image: url('tab_b.png'); + z-index: 101; + overflow: hidden; + font-size: 13px; +} + +.navpath ul +{ + font-size: 11px; + background-image:url('tab_b.png'); + background-repeat:repeat-x; + background-position: 0 -5px; + height:30px; + line-height:30px; + color:#8AA0CC; + border:solid 1px #C2CDE4; + overflow:hidden; + margin:0px; + padding:0px; +} + +.navpath li +{ + list-style-type:none; + float:left; + padding-left:10px; + padding-right:15px; + background-image:url('bc_s.png'); + background-repeat:no-repeat; + background-position:right; + color:#364D7C; +} + +.navpath li.navelem a +{ + height:32px; + display:block; + text-decoration: none; + outline: none; + color: #283A5D; + font-family: 'Lucida Grande',Geneva,Helvetica,Arial,sans-serif; + text-shadow: 0px 1px 1px rgba(255, 255, 255, 0.9); + text-decoration: none; +} + +.navpath li.navelem a:hover +{ + color:#6884BD; +} + +.navpath li.footer +{ + list-style-type:none; + float:right; + padding-left:10px; + padding-right:15px; + background-image:none; + background-repeat:no-repeat; + background-position:right; + color:#364D7C; + font-size: 8pt; +} + + +div.summary +{ + float: right; + font-size: 8pt; + padding-right: 5px; + width: 50%; + text-align: right; +} + +div.summary a +{ + white-space: nowrap; +} + +table.classindex +{ + margin: 10px; + white-space: nowrap; + margin-left: 3%; + margin-right: 3%; + width: 94%; + border: 0; + border-spacing: 0; + padding: 0; +} + +div.ingroups +{ + font-size: 8pt; + width: 50%; + text-align: left; +} + +div.ingroups a +{ + white-space: nowrap; +} + +div.header +{ + background-image:url('nav_h.png'); + background-repeat:repeat-x; + background-color: #F9FAFC; + margin: 0px; + border-bottom: 1px solid #C4CFE5; +} + +div.headertitle +{ + padding: 5px 5px 5px 10px; +} + +.PageDocRTL-title div.headertitle { + text-align: right; + direction: rtl; +} + +dl { + padding: 0 0 0 0; +} + +/* dl.note, dl.warning, dl.attention, dl.pre, dl.post, dl.invariant, dl.deprecated, dl.todo, dl.test, dl.bug, dl.examples */ +dl.section { + margin-left: 0px; + padding-left: 0px; +} + +dl.section.DocNodeRTL { + margin-right: 0px; + padding-right: 0px; +} + +dl.note { + margin-left: -7px; + padding-left: 3px; + border-left: 4px solid; + border-color: #D0C000; +} + +dl.note.DocNodeRTL { + margin-left: 0; + padding-left: 0; + border-left: 0; + margin-right: -7px; + padding-right: 3px; + border-right: 4px solid; + border-color: #D0C000; +} + +dl.warning, dl.attention { + margin-left: -7px; + padding-left: 3px; + border-left: 4px solid; + border-color: #FF0000; +} + +dl.warning.DocNodeRTL, dl.attention.DocNodeRTL { + margin-left: 0; + padding-left: 0; + border-left: 0; + margin-right: -7px; + padding-right: 3px; + border-right: 4px solid; + border-color: #FF0000; +} + +dl.pre, dl.post, dl.invariant { + margin-left: -7px; + padding-left: 3px; + border-left: 4px solid; + border-color: #00D000; +} + +dl.pre.DocNodeRTL, dl.post.DocNodeRTL, dl.invariant.DocNodeRTL { + margin-left: 0; + padding-left: 0; + border-left: 0; + margin-right: -7px; + padding-right: 3px; + border-right: 4px solid; + border-color: #00D000; +} + +dl.deprecated { + margin-left: -7px; + padding-left: 3px; + border-left: 4px solid; + border-color: #505050; +} + +dl.deprecated.DocNodeRTL { + margin-left: 0; + padding-left: 0; + border-left: 0; + margin-right: -7px; + padding-right: 3px; + border-right: 4px solid; + border-color: #505050; +} + +dl.todo { + margin-left: -7px; + padding-left: 3px; + border-left: 4px solid; + border-color: #00C0E0; +} + +dl.todo.DocNodeRTL { + margin-left: 0; + padding-left: 0; + border-left: 0; + margin-right: -7px; + padding-right: 3px; + border-right: 4px solid; + border-color: #00C0E0; +} + +dl.test { + margin-left: -7px; + padding-left: 3px; + border-left: 4px solid; + border-color: #3030E0; +} + +dl.test.DocNodeRTL { + margin-left: 0; + padding-left: 0; + border-left: 0; + margin-right: -7px; + padding-right: 3px; + border-right: 4px solid; + border-color: #3030E0; +} + +dl.bug { + margin-left: -7px; + padding-left: 3px; + border-left: 4px solid; + border-color: #C08050; +} + +dl.bug.DocNodeRTL { + margin-left: 0; + padding-left: 0; + border-left: 0; + margin-right: -7px; + padding-right: 3px; + border-right: 4px solid; + border-color: #C08050; +} + +dl.section dd { + margin-bottom: 6px; +} + + +#projectlogo +{ + text-align: center; + vertical-align: bottom; + border-collapse: separate; +} + +#projectlogo img +{ + border: 0px none; +} + +#projectalign +{ + vertical-align: middle; +} + +#projectname +{ + font: 300% Tahoma, Arial,sans-serif; + margin: 0px; + padding: 2px 0px; +} + +#projectbrief +{ + font: 120% Tahoma, Arial,sans-serif; + margin: 0px; + padding: 0px; +} + +#projectnumber +{ + font: 50% Tahoma, Arial,sans-serif; + margin: 0px; + padding: 0px; +} + +#titlearea +{ + padding: 0px; + margin: 0px; + width: 100%; + border-bottom: 1px solid #5373B4; +} + +.image +{ + text-align: center; +} + +.dotgraph +{ + text-align: center; +} + +.mscgraph +{ + text-align: center; +} + +.plantumlgraph +{ + text-align: center; +} + +.diagraph +{ + text-align: center; +} + +.caption +{ + font-weight: bold; +} + +div.zoom +{ + border: 1px solid #90A5CE; +} + +dl.citelist { + margin-bottom:50px; +} + +dl.citelist dt { + color:#334975; + float:left; + font-weight:bold; + margin-right:10px; + padding:5px; + text-align:right; + width:52px; +} + +dl.citelist dd { + margin:2px 0 2px 72px; + padding:5px 0; +} + +div.toc { + padding: 14px 25px; + background-color: #F4F6FA; + border: 1px solid #D8DFEE; + border-radius: 7px 7px 7px 7px; + float: right; + height: auto; + margin: 0 8px 10px 10px; + width: 200px; +} + +.PageDocRTL-title div.toc { + float: left !important; + text-align: right; +} + +div.toc li { + background: url("bdwn.png") no-repeat scroll 0 5px transparent; + font: 10px/1.2 Verdana,DejaVu Sans,Geneva,sans-serif; + margin-top: 5px; + padding-left: 10px; + padding-top: 2px; +} + +.PageDocRTL-title div.toc li { + background-position-x: right !important; + padding-left: 0 !important; + padding-right: 10px; +} + +div.toc h3 { + font: bold 12px/1.2 Arial,FreeSans,sans-serif; + color: #4665A2; + border-bottom: 0 none; + margin: 0; +} + +div.toc ul { + list-style: none outside none; + border: medium none; + padding: 0px; +} + +div.toc li.level1 { + margin-left: 0px; +} + +div.toc li.level2 { + margin-left: 15px; +} + +div.toc li.level3 { + margin-left: 30px; +} + +div.toc li.level4 { + margin-left: 45px; +} + +span.emoji { + /* font family used at the site: https://unicode.org/emoji/charts/full-emoji-list.html + * font-family: "Noto Color Emoji", "Apple Color Emoji", "Segoe UI Emoji", Times, Symbola, Aegyptus, Code2000, Code2001, Code2002, Musica, serif, LastResort; + */ +} + +.PageDocRTL-title div.toc li.level1 { + margin-left: 0 !important; + margin-right: 0; +} + +.PageDocRTL-title div.toc li.level2 { + margin-left: 0 !important; + margin-right: 15px; +} + +.PageDocRTL-title div.toc li.level3 { + margin-left: 0 !important; + margin-right: 30px; +} + +.PageDocRTL-title div.toc li.level4 { + margin-left: 0 !important; + margin-right: 45px; +} + +.inherit_header { + font-weight: bold; + color: gray; + cursor: pointer; + -webkit-touch-callout: none; + -webkit-user-select: none; + -khtml-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} + +.inherit_header td { + padding: 6px 0px 2px 5px; +} + +.inherit { + display: none; +} + +tr.heading h2 { + margin-top: 12px; + margin-bottom: 4px; +} + +/* tooltip related style info */ + +.ttc { + position: absolute; + display: none; +} + +#powerTip { + cursor: default; + white-space: nowrap; + background-color: white; + border: 1px solid gray; + border-radius: 4px 4px 4px 4px; + box-shadow: 1px 1px 7px gray; + display: none; + font-size: smaller; + max-width: 80%; + opacity: 0.9; + padding: 1ex 1em 1em; + position: absolute; + z-index: 2147483647; +} + +#powerTip div.ttdoc { + color: grey; + font-style: italic; +} + +#powerTip div.ttname a { + font-weight: bold; +} + +#powerTip div.ttname { + font-weight: bold; +} + +#powerTip div.ttdeci { + color: #006318; +} + +#powerTip div { + margin: 0px; + padding: 0px; + font: 12px/16px Roboto,sans-serif; +} + +#powerTip:before, #powerTip:after { + content: ""; + position: absolute; + margin: 0px; +} + +#powerTip.n:after, #powerTip.n:before, +#powerTip.s:after, #powerTip.s:before, +#powerTip.w:after, #powerTip.w:before, +#powerTip.e:after, #powerTip.e:before, +#powerTip.ne:after, #powerTip.ne:before, +#powerTip.se:after, #powerTip.se:before, +#powerTip.nw:after, #powerTip.nw:before, +#powerTip.sw:after, #powerTip.sw:before { + border: solid transparent; + content: " "; + height: 0; + width: 0; + position: absolute; +} + +#powerTip.n:after, #powerTip.s:after, +#powerTip.w:after, #powerTip.e:after, +#powerTip.nw:after, #powerTip.ne:after, +#powerTip.sw:after, #powerTip.se:after { + border-color: rgba(255, 255, 255, 0); +} + +#powerTip.n:before, #powerTip.s:before, +#powerTip.w:before, #powerTip.e:before, +#powerTip.nw:before, #powerTip.ne:before, +#powerTip.sw:before, #powerTip.se:before { + border-color: rgba(128, 128, 128, 0); +} + +#powerTip.n:after, #powerTip.n:before, +#powerTip.ne:after, #powerTip.ne:before, +#powerTip.nw:after, #powerTip.nw:before { + top: 100%; +} + +#powerTip.n:after, #powerTip.ne:after, #powerTip.nw:after { + border-top-color: #FFFFFF; + border-width: 10px; + margin: 0px -10px; +} +#powerTip.n:before { + border-top-color: #808080; + border-width: 11px; + margin: 0px -11px; +} +#powerTip.n:after, #powerTip.n:before { + left: 50%; +} + +#powerTip.nw:after, #powerTip.nw:before { + right: 14px; +} + +#powerTip.ne:after, #powerTip.ne:before { + left: 14px; +} + +#powerTip.s:after, #powerTip.s:before, +#powerTip.se:after, #powerTip.se:before, +#powerTip.sw:after, #powerTip.sw:before { + bottom: 100%; +} + +#powerTip.s:after, #powerTip.se:after, #powerTip.sw:after { + border-bottom-color: #FFFFFF; + border-width: 10px; + margin: 0px -10px; +} + +#powerTip.s:before, #powerTip.se:before, #powerTip.sw:before { + border-bottom-color: #808080; + border-width: 11px; + margin: 0px -11px; +} + +#powerTip.s:after, #powerTip.s:before { + left: 50%; +} + +#powerTip.sw:after, #powerTip.sw:before { + right: 14px; +} + +#powerTip.se:after, #powerTip.se:before { + left: 14px; +} + +#powerTip.e:after, #powerTip.e:before { + left: 100%; +} +#powerTip.e:after { + border-left-color: #FFFFFF; + border-width: 10px; + top: 50%; + margin-top: -10px; +} +#powerTip.e:before { + border-left-color: #808080; + border-width: 11px; + top: 50%; + margin-top: -11px; +} + +#powerTip.w:after, #powerTip.w:before { + right: 100%; +} +#powerTip.w:after { + border-right-color: #FFFFFF; + border-width: 10px; + top: 50%; + margin-top: -10px; +} +#powerTip.w:before { + border-right-color: #808080; + border-width: 11px; + top: 50%; + margin-top: -11px; +} + +@media print +{ + #top { display: none; } + #side-nav { display: none; } + #nav-path { display: none; } + body { overflow:visible; } + h1, h2, h3, h4, h5, h6 { page-break-after: avoid; } + .summary { display: none; } + .memitem { page-break-inside: avoid; } + #doc-content + { + margin-left:0 !important; + height:auto !important; + width:auto !important; + overflow:inherit; + display:inline; + } +} + +/* @group Markdown */ + +table.markdownTable { + border-collapse:collapse; + margin-top: 4px; + margin-bottom: 4px; +} + +table.markdownTable td, table.markdownTable th { + border: 1px solid #2D4068; + padding: 3px 7px 2px; +} + +table.markdownTable tr { +} + +th.markdownTableHeadLeft, th.markdownTableHeadRight, th.markdownTableHeadCenter, th.markdownTableHeadNone { + background-color: #374F7F; + color: #FFFFFF; + font-size: 110%; + padding-bottom: 4px; + padding-top: 5px; +} + +th.markdownTableHeadLeft, td.markdownTableBodyLeft { + text-align: left +} + +th.markdownTableHeadRight, td.markdownTableBodyRight { + text-align: right +} + +th.markdownTableHeadCenter, td.markdownTableBodyCenter { + text-align: center +} + +.DocNodeRTL { + text-align: right; + direction: rtl; +} + +.DocNodeLTR { + text-align: left; + direction: ltr; +} + +table.DocNodeRTL { + width: auto; + margin-right: 0; + margin-left: auto; +} + +table.DocNodeLTR { + width: auto; + margin-right: auto; + margin-left: 0; +} + +tt, code, kbd, samp +{ + display: inline-block; + direction:ltr; +} +/* @end */ + +u { + text-decoration: underline; +} + diff --git a/doxygen/html/doxygen.svg b/doxygen/html/doxygen.svg new file mode 100644 index 0000000..d42dad5 --- /dev/null +++ b/doxygen/html/doxygen.svg @@ -0,0 +1,26 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/doxygen/html/dynsections.js b/doxygen/html/dynsections.js new file mode 100644 index 0000000..3174bd7 --- /dev/null +++ b/doxygen/html/dynsections.js @@ -0,0 +1,121 @@ +/* + @licstart The following is the entire license notice for the JavaScript code in this file. + + The MIT License (MIT) + + Copyright (C) 1997-2020 by Dimitri van Heesch + + Permission is hereby granted, free of charge, to any person obtaining a copy of this software + and associated documentation files (the "Software"), to deal in the Software without restriction, + including without limitation the rights to use, copy, modify, merge, publish, distribute, + sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in all copies or + substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING + BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, + DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + + @licend The above is the entire license notice for the JavaScript code in this file + */ +function toggleVisibility(linkObj) +{ + var base = $(linkObj).attr('id'); + var summary = $('#'+base+'-summary'); + var content = $('#'+base+'-content'); + var trigger = $('#'+base+'-trigger'); + var src=$(trigger).attr('src'); + if (content.is(':visible')===true) { + content.hide(); + summary.show(); + $(linkObj).addClass('closed').removeClass('opened'); + $(trigger).attr('src',src.substring(0,src.length-8)+'closed.png'); + } else { + content.show(); + summary.hide(); + $(linkObj).removeClass('closed').addClass('opened'); + $(trigger).attr('src',src.substring(0,src.length-10)+'open.png'); + } + return false; +} + +function updateStripes() +{ + $('table.directory tr'). + removeClass('even').filter(':visible:even').addClass('even'); +} + +function toggleLevel(level) +{ + $('table.directory tr').each(function() { + var l = this.id.split('_').length-1; + var i = $('#img'+this.id.substring(3)); + var a = $('#arr'+this.id.substring(3)); + if (l + + + + + + +Tetrix: Elenco dei file + + + + + + + + + +
+
+ + + + + + + +
+
Tetrix +  1.0.0 +
+
Tetrix by Davide Antonio Amodio, Luca Boffo, Alvise Favero
+
+
+ + + + + + + +
+ +
+
+ + +
+ +
+ +
+
+
Elenco dei file
+
+
+
Questo è un elenco di tutti i file con una loro breve descrizione:
+
[livello di dettaglio 12]
+ + + + + + + + + + + +
  src
 bot.c
 constants.c
 functions.c
 gamefield.c
 main.c
 multiplayer.c
 player.c
 singleplayer.c
 tester.c
 tetrimino.c
+
+
+ + + + diff --git a/doxygen/html/folderclosed.png b/doxygen/html/folderclosed.png new file mode 100644 index 0000000..bb8ab35 Binary files /dev/null and b/doxygen/html/folderclosed.png differ diff --git a/doxygen/html/folderopen.png b/doxygen/html/folderopen.png new file mode 100644 index 0000000..d6c7f67 Binary files /dev/null and b/doxygen/html/folderopen.png differ diff --git a/doxygen/html/functions.html b/doxygen/html/functions.html new file mode 100644 index 0000000..d8f5054 --- /dev/null +++ b/doxygen/html/functions.html @@ -0,0 +1,126 @@ + + + + + + + +Tetrix: Membri dei composti + + + + + + + + + +
+
+ + + + + + + +
+
Tetrix +  1.0.0 +
+
Tetrix by Davide Antonio Amodio, Luca Boffo, Alvise Favero
+
+
+ + + + + + + +
+ +
+
+ + +
+ +
+ +
+
Questo è un elenco di tutti i membri con collegamenti alla documentazione della classe a cui appartengono:
+
+ + + + diff --git a/doxygen/html/functions_8c.html b/doxygen/html/functions_8c.html new file mode 100644 index 0000000..3b57b55 --- /dev/null +++ b/doxygen/html/functions_8c.html @@ -0,0 +1,595 @@ + + + + + + + +Tetrix: Riferimenti per il file src/functions.c + + + + + + + + + +
+
+ + + + + + + +
+
Tetrix +  1.0.0 +
+
Tetrix by Davide Antonio Amodio, Luca Boffo, Alvise Favero
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+ +
+
Riferimenti per il file functions.c
+
+
+
#include <ncurses.h>
+#include <string.h>
+#include <stdlib.h>
+#include <time.h>
+#include "../include/tetrimino.h"
+#include "../include/constants.h"
+
+Grafo delle dipendenze di inclusione per functions.c:
+
+
+ + + + + + + + + +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Funzioni

void kill_win (WINDOW *w)
 elimina le finestre di ncurses. Continua...
 
char * form (int m_size, char title[])
 Funzione per creare un form al centro dello schermo la risposta viene caricata in un array di char ATTENZIONE: la memoria viene allocata all'interno della funzione! Continua...
 
int get_ASCII_art_rows (const unsigned char ascii[])
 Conta il numero di righe di una ASCII art rettangolare importata in C generando i bytes con xxd. Continua...
 
int get_ASCII_art_cols (const unsigned char ascii[])
 Conta il numero di colonne di una ASCII art rettangolare importata in C generando i bytes con xxd. Continua...
 
void delay (int millisec)
 una funzione delay. [ATTENZIONE, É BLOCCANTE] Continua...
 
void wprint_with_delay (WINDOW *w, int d, const char *c)
 stampa una riga di testo carattere per carattere con un delay fra ogni lettera. Continua...
 
void mvwprintwrows (WINDOW *w, int y, int x, const char *c)
 stampa una riga di testo carattere per carattere peró supporta anche il
+ come a capo. Continua...
 
int swap_color (int c)
 scambia il foreground color con il background color e viceversa. Continua...
 
int random_color ()
 ritorna un colore a caso tra quelli definiti in constants.h. Continua...
 
int next_circular (int i, int size)
 Restituisce l'indice dell'elemento successivo in una struttura dati ordinata, ipotizzando che questa sia circolare. Se i è l'ultimo elemento, allora restituisce il primo. Continua...
 
int prev_circular (int i, int size)
 Restituisce l'indice dell'elemento precedente in una struttura dati ordinata, ipotizzando che questa sia circolare. Se i è il primo elemento, allora restituisce l'ultimo. Continua...
 
int compare_fields (int *first, int *second)
 funzione che serve per comparare due campi da gioco. Continua...
 
int blank_cells (int *mat, int rows, int cols)
 Controlla se una matrice qualsiasi contiene celle vuote bloccate da celle piene al di sopra. Continua...
 
+

Documentazione delle funzioni

+ +

◆ blank_cells()

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + +
int blank_cells (int * mat,
int rows,
int cols 
)
+
+ +

Controlla se una matrice qualsiasi contiene celle vuote bloccate da celle piene al di sopra.

+
Parametri
+ + + + +
[in]matLa matrice da controllare.
[in]rowsIl numero di righe della matrice.
[in]colsIl numero di colonne della matrice.
+
+
+
Restituisce
0 se la matrice non ha celle bloccate, altrimenti restituisce $ r \times c $, con $r$ il numero di righe bloccate, $c$ le colonne bloccate.
+ +
+
+ +

◆ compare_fields()

+ +
+
+ + + + + + + + + + + + + + + + + + +
int compare_fields (int * first,
int * second 
)
+
+ +

funzione che serve per comparare due campi da gioco.

+
Parametri
+ + + +
[in]firstil puntatore al primo campo da gioco.
[in]secondil puntatore al secondo campo da gioco.
+
+
+
Restituisce
la prima riga diversa.
+ +
+
+ +

◆ delay()

+ +
+
+ + + + + + + + +
void delay (int millisec)
+
+ +

una funzione delay. [ATTENZIONE, É BLOCCANTE]

+
Parametri
+ + +
[in]millisectempo in millisecondi.
+
+
+ +
+
+ +

◆ form()

+ +
+
+ + + + + + + + + + + + + + + + + + +
char* form (int m_size,
char title[] 
)
+
+ +

Funzione per creare un form al centro dello schermo la risposta viene caricata in un array di char ATTENZIONE: la memoria viene allocata all'interno della funzione!

+
Parametri
+ + + +
[in]m_sizedimensione massima della risposta che si vuole ricevere.
[in]titletitolo della finestra.
+
+
+
Restituisce
L'array contenente la stringa, di dimensione m_size + 1.
+ +
+
+ +

◆ get_ASCII_art_cols()

+ +
+
+ + + + + + + + +
int get_ASCII_art_cols (const unsigned char ascii[])
+
+ +

Conta il numero di colonne di una ASCII art rettangolare importata in C generando i bytes con xxd.

+
Parametri
+ + +
[in]asciiLa stringa contenente la ASCII art.
+
+
+
Restituisce
Il numero di colonne
+ +
+
+ +

◆ get_ASCII_art_rows()

+ +
+
+ + + + + + + + +
int get_ASCII_art_rows (const unsigned char ascii[])
+
+ +

Conta il numero di righe di una ASCII art rettangolare importata in C generando i bytes con xxd.

+
Parametri
+ + +
[in]asciiLa stringa contenente la ASCII art.
+
+
+
Restituisce
Il numero di righe.
+ +
+
+ +

◆ kill_win()

+ +
+
+ + + + + + + + +
void kill_win (WINDOW * w)
+
+ +

elimina le finestre di ncurses.

+
Parametri
+ + +
[in]wla finestra da eliminare.
+
+
+ +
+
+ +

◆ mvwprintwrows()

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
void mvwprintwrows (WINDOW * w,
int y,
int x,
const char * c 
)
+
+ +

stampa una riga di testo carattere per carattere peró supporta anche il
+ come a capo.

+
Parametri
+ + + + + +
[in]wla finestra dove stampare.
[in]yla riga dove stampare.
[in]xla colonna dove stampare.
[in]cil puntatore alla stringa di caratteri da stampare.
+
+
+ +
+
+ +

◆ next_circular()

+ +
+
+ + + + + + + + + + + + + + + + + + +
int next_circular (int i,
int size 
)
+
+ +

Restituisce l'indice dell'elemento successivo in una struttura dati ordinata, ipotizzando che questa sia circolare. Se i è l'ultimo elemento, allora restituisce il primo.

+
Parametri
+ + + +
[in]iL'indice attuale.
[in]maxLa dimensione della struttura dati.
+
+
+
Restituisce
L'indice dell'elemento successivo.
+ +
+
+ +

◆ prev_circular()

+ +
+
+ + + + + + + + + + + + + + + + + + +
int prev_circular (int i,
int size 
)
+
+ +

Restituisce l'indice dell'elemento precedente in una struttura dati ordinata, ipotizzando che questa sia circolare. Se i è il primo elemento, allora restituisce l'ultimo.

+
Parametri
+ + + +
[in]iL'indice attuale.
[in]maxLa dimensione della struttura dati.
+
+
+
Restituisce
L'indice dell'elemento successivo.
+ +
+
+ +

◆ random_color()

+ +
+
+ + + + + + + +
int random_color ()
+
+ +

ritorna un colore a caso tra quelli definiti in constants.h.

+
Restituisce
int il colore sotto forma numerica.
+ +
+
+ +

◆ swap_color()

+ +
+
+ + + + + + + + +
int swap_color (int c)
+
+ +

scambia il foreground color con il background color e viceversa.

+

[Schema di funzionamento] Nel file constants.h abbiamo definito i colori e i pair [colore, testo] identificati da un numero successivamente sono stati creati i pair invertiti assegnando il valore numerico del pair + 100 quindi dato il pair [n], [n+100] sará lo stesso pair che peró avrá il colore del testo come sfondo e viceversa Automaticamente facendo l'operazione inversa su un pair n t.c n > 100 trasformeremo un colore di sfondo in un colore del testo.

+
Parametri
+ + +
[in]ccolore sotto forma numerica.
+
+
+
Restituisce
c colore sotto forma numerica.
+ +
+
+ +

◆ wprint_with_delay()

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + +
void wprint_with_delay (WINDOW * w,
int d,
const char * c 
)
+
+ +

stampa una riga di testo carattere per carattere con un delay fra ogni lettera.

+
Parametri
+ + + + +
[in]wla finestra dove stampare.
[in]dil delay fra o caratteri.
[in]cla stringa di caratteri da stampare.
+
+
+ +
+
+
+ + + + diff --git a/doxygen/html/functions_8c__incl.md5 b/doxygen/html/functions_8c__incl.md5 new file mode 100644 index 0000000..95cde2b --- /dev/null +++ b/doxygen/html/functions_8c__incl.md5 @@ -0,0 +1 @@ +ca9d6bc86b3c0c90fcd17f98efa1d835 \ No newline at end of file diff --git a/doxygen/html/functions_8c__incl.png b/doxygen/html/functions_8c__incl.png new file mode 100644 index 0000000..413897f Binary files /dev/null and b/doxygen/html/functions_8c__incl.png differ diff --git a/doxygen/html/functions_vars.html b/doxygen/html/functions_vars.html new file mode 100644 index 0000000..e0a1797 --- /dev/null +++ b/doxygen/html/functions_vars.html @@ -0,0 +1,126 @@ + + + + + + + +Tetrix: Membri dei composti - Variabili + + + + + + + + + +
+
+ + + + + + + +
+
Tetrix +  1.0.0 +
+
Tetrix by Davide Antonio Amodio, Luca Boffo, Alvise Favero
+
+
+ + + + + + + +
+ +
+
+ + +
+ +
+ +
+
+ + + + diff --git a/doxygen/html/gamefield_8c.html b/doxygen/html/gamefield_8c.html new file mode 100644 index 0000000..246fd08 --- /dev/null +++ b/doxygen/html/gamefield_8c.html @@ -0,0 +1,932 @@ + + + + + + + +Tetrix: Riferimenti per il file src/gamefield.c + + + + + + + + + +
+
+ + + + + + + +
+
Tetrix +  1.0.0 +
+
Tetrix by Davide Antonio Amodio, Luca Boffo, Alvise Favero
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+ +
+
Riferimenti per il file gamefield.c
+
+
+
#include <stdlib.h>
+#include <ncurses.h>
+#include "../include/tetrimino.h"
+#include "../include/gamefield.h"
+#include "../include/constants.h"
+#include "../include/functions.h"
+#include "../include/player.h"
+
+Grafo delle dipendenze di inclusione per gamefield.c:
+
+
+ + + + + + + + + + +
+
+ + + + +

+Composti

struct  GameField
 struct contentente il puntatore alla matrice del campo di gioco e il puntatore alla finestra di ncurses. Continua...
 
+ + + + +

+Ridefinizioni di tipo (typedef)

typedef struct GameField gamefield_t
 struct contentente il puntatore alla matrice del campo di gioco e il puntatore alla finestra di ncurses. Continua...
 
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Funzioni

gamefield_tinitialize_gamefield (int y, int x)
 crea il campo da gioco Continua...
 
void free_gamefield (gamefield_t *g)
 free del campo da gioco. Continua...
 
void clear_top (gamefield_t *g)
 Pulizia della parte superiore dello schermo. Continua...
 
void draw_cursor (gamefield_t *g, tetrimino_t *t, int cur_pos)
 stampa l'ombra del tetramino dove questo verrá droppato. Continua...
 
void refresh_selector (gamefield_t *g, tetrimino_t *t, int cur_pos)
 visualizza il tetramino selezionato nella parte superiore di un campo da gioco partendo dalla posizione del cursore. Continua...
 
int manage_drop (gamefield_t *gameField, tetrimino_t *t)
 Gestisce l'input del drop del tetramino. Continua...
 
void refresh_gamefield (gamefield_t *g)
 Da chiamare per visualizzare le modifiche al campo del giocatore. Continua...
 
int get_first_free_row (int *f, tetrimino_t *t, int cur_pos)
 restituisce la prima riga libera nel campo da gioco. Continua...
 
int get_first_free_row_in_field (int *f, int cur_pos)
 restituisce la prima riga libera nel campo da gioco. Continua...
 
int add_tetrimino_to_gamefield (gamefield_t *g, tetrimino_t *t, int cur_pos)
 Aggiunge un tetramino al campo da gioco (funzione stub creata per compatibilitá). Continua...
 
int add_tetrimino_to_field (int *f, tetrimino_t *t, int cur_pos)
 Aggiunge un tetramino al campo da gioco. Continua...
 
int is_gamefield_top_occupied (gamefield_t *g)
 controlla se il gamefield é stato saturato in almeno un blocco (funzione stub). Continua...
 
int is_field_top_occupied (int *f)
 controlla se il field é stato saturato in almeno un blocco. Continua...
 
int * get_gamefield (gamefield_t *g)
 metodo getter per ricevere la matrice con i tetramini. Continua...
 
WINDOW * get_gamefield_win (gamefield_t *g)
 metodo getter per ricevere la finestra ncurses del campo da gioco. Continua...
 
int is_row_full (int *field, int row)
 Controlla se la riga del campo, entrambi specificati via parametro, è piena. Continua...
 
int is_row_empty (int *field, int row)
 Controlla se la riga del campo, entrambi specificati via parametro, è vuota. Continua...
 
int check_field (gamefield_t *gameField)
 Controlla il campo se è pieno o se ha righe piene. Continua...
 
void flip_values (gamefield_t *field, int rows)
 Inverte il numero di righe specificate nel campo specificato. Continua...
 
void flip_values_in_row (gamefield_t *field, int row)
 inverte i valori in una riga del campo da gioco. Continua...
 
int * clone_field (int *f)
 Clona il field e restituisce il puntatore. Continua...
 
+

Documentazione delle ridefinizioni di tipo (typedef)

+ +

◆ gamefield_t

+ +
+
+ + + + +
typedef struct GameField gamefield_t
+
+ +

struct contentente il puntatore alla matrice del campo di gioco e il puntatore alla finestra di ncurses.

+ +
+
+

Documentazione delle funzioni

+ +

◆ add_tetrimino_to_field()

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + +
int add_tetrimino_to_field (int * f,
tetrimino_tt,
int cur_pos 
)
+
+ +

Aggiunge un tetramino al campo da gioco.

+
Parametri
+ + + + +
[in]fmatrice di gioco (quella dove sono salvati i tetramini).
[in]ttetramino da piazzare.
[in]cur_posposizione del cursore.
+
+
+
Restituisce
1 se il tetramino si è incastrato, 0 se il campo era pieno e non è riuscito.
+ +
+
+ +

◆ add_tetrimino_to_gamefield()

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + +
int add_tetrimino_to_gamefield (gamefield_tg,
tetrimino_tt,
int cur_pos 
)
+
+ +

Aggiunge un tetramino al campo da gioco (funzione stub creata per compatibilitá).

+
Parametri
+ + + + +
[in]gcampo di gioco.
[in]ttetramino da piazzare.
[in]cur_posposizione del cursore.
+
+
+
Restituisce
1 se il tetramino si è incastrato, 0 se il campo era pieno e non è riuscito.
+ +
+
+ +

◆ check_field()

+ +
+
+ + + + + + + + +
int check_field (gamefield_tgameField)
+
+ +

Controlla il campo se è pieno o se ha righe piene.

+
Parametri
+ + +
[in]gameFieldIl campo da controllare.
+
+
+
Restituisce
Il numero di righe che il giocatore ha riempito.
+ +
+
+ +

◆ clear_top()

+ +
+
+ + + + + + + + +
void clear_top (gamefield_tg)
+
+ +

Pulizia della parte superiore dello schermo.

+
Parametri
+ + +
[in]gIl campo di gioco.
+
+
+ +
+
+ +

◆ clone_field()

+ +
+
+ + + + + + + + +
int* clone_field (int * f)
+
+ +

Clona il field e restituisce il puntatore.

+
Parametri
+ + +
[in]fIl field da clonare.
+
+
+
Restituisce
La matrice clonata.
+ +
+
+ +

◆ draw_cursor()

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + +
void draw_cursor (gamefield_tg,
tetrimino_tt,
int cur_pos 
)
+
+ +

stampa l'ombra del tetramino dove questo verrá droppato.

+
Parametri
+ + + + +
[in]gil puntatore al campo da gioco.
[in]til puntatore al tetramino.
[in]cur_posla posizione del cursore.
+
+
+ +
+
+ +

◆ flip_values()

+ +
+
+ + + + + + + + + + + + + + + + + + +
void flip_values (gamefield_tfield,
int rows 
)
+
+ +

Inverte il numero di righe specificate nel campo specificato.

+
Parametri
+ + + +
[in]fieldIl campo su cui invertire le righe.
[in]rowsIl numero di righe.
+
+
+ +
+
+ +

◆ flip_values_in_row()

+ +
+
+ + + + + + + + + + + + + + + + + + +
void flip_values_in_row (gamefield_tfield,
int row 
)
+
+ +

inverte i valori in una riga del campo da gioco.

+
Parametri
+ + + +
[in]fieldil campo da gioco.
[in]rowla riga dove effettuare l'operazione.
+
+
+ +
+
+ +

◆ free_gamefield()

+ +
+
+ + + + + + + + +
void free_gamefield (gamefield_tg)
+
+ +

free del campo da gioco.

+
Parametri
+ + +
[in]gil campo da gioco.
+
+
+ +
+
+ +

◆ get_first_free_row()

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + +
int get_first_free_row (int * f,
tetrimino_tt,
int cur_pos 
)
+
+ +

restituisce la prima riga libera nel campo da gioco.

+
Parametri
+ + + + +
[in]gIl campo da gioco da controllare.
[in]tIl tetramino da incastrare.
[in]cur_posLa posizione del cursore e quindi la prima colonna di discesa del tetramino.
+
+
+
Restituisce
row La posizione nella matrice della prima riga libera.
+ +
+
+ +

◆ get_first_free_row_in_field()

+ +
+
+ + + + + + + + + + + + + + + + + + +
int get_first_free_row_in_field (int * f,
int cur_pos 
)
+
+ +

restituisce la prima riga libera nel campo da gioco.

+
Parametri
+ + + + +
[in]gIl campo da gioco da controllare.
[in]tIl tetramino da incastrare.
[in]cur_posLa posizione del cursore e quindi la prima colonna di discesa del tetramino.
+
+
+
Restituisce
row La posizione nella matrice della prima riga libera.
+ +
+
+ +

◆ get_gamefield()

+ +
+
+ + + + + + + + +
int* get_gamefield (gamefield_tg)
+
+ +

metodo getter per ricevere la matrice con i tetramini.

+
Parametri
+ + +
[in]gpuntatore alla struct del campo da gioco.
+
+
+
Restituisce
field la matrice di interi che rappresenta la matrice con i tetramini.
+ +
+
+ +

◆ get_gamefield_win()

+ +
+
+ + + + + + + + +
WINDOW* get_gamefield_win (gamefield_tg)
+
+ +

metodo getter per ricevere la finestra ncurses del campo da gioco.

+
Parametri
+ + +
[in]gpuntatore alla struct del campo da gioco.
+
+
+
Restituisce
win la finestra di ncurses del campo da gioco.
+ +
+
+ +

◆ initialize_gamefield()

+ +
+
+ + + + + + + + + + + + + + + + + + +
gamefield_t* initialize_gamefield (int y,
int x 
)
+
+ +

crea il campo da gioco

+
Parametri
+ + + +
[in]y_posLa posizione Y iniziale in cui posizionare la finestra.
[in]x_posLa posizione X iniziale in cui posizionare la finestra.
+
+
+
Restituisce
Lo struct del gamefield istanziato.
+ +
+
+ +

◆ is_field_top_occupied()

+ +
+
+ + + + + + + + +
int is_field_top_occupied (int * f)
+
+ +

controlla se il field é stato saturato in almeno un blocco.

+
Parametri
+ + +
[in]fla matrice campo da gioco
+
+
+
Restituisce
1 se é pieno, 0 altrimenti.
+ +
+
+ +

◆ is_gamefield_top_occupied()

+ +
+
+ + + + + + + + +
int is_gamefield_top_occupied (gamefield_tg)
+
+ +

controlla se il gamefield é stato saturato in almeno un blocco (funzione stub).

+
Parametri
+ + +
[in]ggamefield da controllare.
+
+
+
Restituisce
1 se é pieno, 0 altrimenti.
+ +
+
+ +

◆ is_row_empty()

+ +
+
+ + + + + + + + + + + + + + + + + + +
int is_row_empty (int * field,
int row 
)
+
+ +

Controlla se la riga del campo, entrambi specificati via parametro, è vuota.

+
Parametri
+ + + +
[in]fieldIl campo su cui controllare la riga
[in]rowLa riga da controllare.
+
+
+
Restituisce
1 se la riga è vuota, 0 se ha almeno una cella piena, -1 se la riga è fuori dal campo.
+ +
+
+ +

◆ is_row_full()

+ +
+
+ + + + + + + + + + + + + + + + + + +
int is_row_full (int * field,
int row 
)
+
+ +

Controlla se la riga del campo, entrambi specificati via parametro, è piena.

+
Parametri
+ + + +
[in]fieldIl campo su cui controllare la riga.
[in]rowLa riga da controllare.
+
+
+
Restituisce
1 se la riga è piena, 0 se ha almeno una cella vuota, -1 se la riga è fuori dal campo.
+ +
+
+ +

◆ manage_drop()

+ +
+
+ + + + + + + + + + + + + + + + + + +
int manage_drop (gamefield_tgameField,
tetrimino_tt 
)
+
+ +

Gestisce l'input del drop del tetramino.

+
Parametri
+ + + +
[in]gameFieldIl campo dove bisogna droppare il tetramino.
[in]tIl tetramino da droppare.
+
+
+
Restituisce
il cursore dove droppare il tetramino.
+ +
+
+ +

◆ refresh_gamefield()

+ +
+
+ + + + + + + + +
void refresh_gamefield (gamefield_tg)
+
+ +

Da chiamare per visualizzare le modifiche al campo del giocatore.

+
Parametri
+ + +
[in]gIl campo da gioco di cui bisogna aggiornare lo schermo.
+
+
+ +
+
+ +

◆ refresh_selector()

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + +
void refresh_selector (gamefield_tg,
tetrimino_tt,
int cur_pos 
)
+
+ +

visualizza il tetramino selezionato nella parte superiore di un campo da gioco partendo dalla posizione del cursore.

+
Parametri
+ + + + +
[in]gil campo da gioco dove stampare.
[in]ttetramino da stampare.
[in]cur_posposizione del cursore.
+
+
+ +
+
+
+ + + + diff --git a/doxygen/html/gamefield_8c__incl.md5 b/doxygen/html/gamefield_8c__incl.md5 new file mode 100644 index 0000000..7f87ebb --- /dev/null +++ b/doxygen/html/gamefield_8c__incl.md5 @@ -0,0 +1 @@ +94661746c60ab22b189b2849dddb3846 \ No newline at end of file diff --git a/doxygen/html/gamefield_8c__incl.png b/doxygen/html/gamefield_8c__incl.png new file mode 100644 index 0000000..e8449d1 Binary files /dev/null and b/doxygen/html/gamefield_8c__incl.png differ diff --git a/doxygen/html/globals.html b/doxygen/html/globals.html new file mode 100644 index 0000000..a4f0411 --- /dev/null +++ b/doxygen/html/globals.html @@ -0,0 +1,466 @@ + + + + + + + +Tetrix: Elementi dei file + + + + + + + + + +
+
+ + + + + + + +
+
Tetrix +  1.0.0 +
+
Tetrix by Davide Antonio Amodio, Luca Boffo, Alvise Favero
+
+
+ + + + + + + +
+ +
+
+ + +
+ +
+ +
+
Questo è un elenco di tutti gli elementi dei file con collegamenti alla documentazione del file a cui appartengono:
+ +

- a -

+ + +

- b -

+ + +

- c -

+ + +

- d -

+ + +

- e -

+ + +

- f -

+ + +

- g -

+ + +

- i -

+ + +

- k -

+ + +

- l -

+ + +

- m -

+ + +

- n -

+ + +

- p -

+ + +

- r -

+ + +

- s -

+ + +

- t -

+ + +

- w -

+
+ + + + diff --git a/doxygen/html/globals_defs.html b/doxygen/html/globals_defs.html new file mode 100644 index 0000000..f8e97aa --- /dev/null +++ b/doxygen/html/globals_defs.html @@ -0,0 +1,78 @@ + + + + + + + +Tetrix: Elementi dei file + + + + + + + + + +
+
+ + + + + + + +
+
Tetrix +  1.0.0 +
+
Tetrix by Davide Antonio Amodio, Luca Boffo, Alvise Favero
+
+
+ + + + + + + +
+ +
+
+ + +
+ +
+ +
+
+ + + + diff --git a/doxygen/html/globals_func.html b/doxygen/html/globals_func.html new file mode 100644 index 0000000..b5ee27e --- /dev/null +++ b/doxygen/html/globals_func.html @@ -0,0 +1,420 @@ + + + + + + + +Tetrix: Elementi dei file + + + + + + + + + +
+
+ + + + + + + +
+
Tetrix +  1.0.0 +
+
Tetrix by Davide Antonio Amodio, Luca Boffo, Alvise Favero
+
+
+ + + + + + + +
+ +
+
+ + +
+ +
+ +
+  + +

- a -

+ + +

- b -

+ + +

- c -

+ + +

- d -

+ + +

- e -

+ + +

- f -

+ + +

- g -

+ + +

- i -

+ + +

- k -

+ + +

- l -

+ + +

- m -

+ + +

- n -

+ + +

- p -

+ + +

- r -

+ + +

- s -

+ + +

- w -

+
+ + + + diff --git a/doxygen/html/globals_type.html b/doxygen/html/globals_type.html new file mode 100644 index 0000000..372aff5 --- /dev/null +++ b/doxygen/html/globals_type.html @@ -0,0 +1,93 @@ + + + + + + + +Tetrix: Elementi dei file + + + + + + + + + +
+
+ + + + + + + +
+
Tetrix +  1.0.0 +
+
Tetrix by Davide Antonio Amodio, Luca Boffo, Alvise Favero
+
+
+ + + + + + + +
+ +
+
+ + +
+ +
+ +
+
+ + + + diff --git a/doxygen/html/globals_vars.html b/doxygen/html/globals_vars.html new file mode 100644 index 0000000..03da624 --- /dev/null +++ b/doxygen/html/globals_vars.html @@ -0,0 +1,96 @@ + + + + + + + +Tetrix: Elementi dei file + + + + + + + + + +
+
+ + + + + + + +
+
Tetrix +  1.0.0 +
+
Tetrix by Davide Antonio Amodio, Luca Boffo, Alvise Favero
+
+
+ + + + + + + +
+ +
+
+ + +
+ +
+ +
+
+ + + + diff --git a/doxygen/html/graph_legend.html b/doxygen/html/graph_legend.html new file mode 100644 index 0000000..0ae3377 --- /dev/null +++ b/doxygen/html/graph_legend.html @@ -0,0 +1,137 @@ + + + + + + + +Tetrix: Legenda del grafo + + + + + + + + + +
+
+ + + + + + + +
+
Tetrix +  1.0.0 +
+
Tetrix by Davide Antonio Amodio, Luca Boffo, Alvise Favero
+
+
+ + + + + + + +
+ +
+
+ + +
+ +
+ +
+
+
Legenda del grafo
+
+
+

Questa pagina spiega come interpretare i grafi generati da doxygen.

+

Si consideri l'esempio seguente:

/*! Classe invisibile per troncamento */
+
class Invisible { };
+
+
/*! Classe tronca, la relazione di ereditarietà è nascosta */
+
class Truncated : public Invisible { };
+
+
/* Classe non documentata con i commenti speciali di doxygen*/
+
class Undocumented { };
+
+
/*! Classe estesa mediante ereditarietà pubblica */
+
class PublicBase : public Truncated { };
+
+
/*! Classe templatizzata */
+
template<class T> class Templ { };
+
+
/*! Classe estesa mediante ereditarietà protetta*/
+
class ProtectedBase { };
+
+
/*! Classe estesa mediante ereditarietà privata*/
+
class PrivateBase { };
+
+
/*! Classe utilizzata dalla classe Inherited */
+
class Used { };
+
+
/*! Classe che eredita da varie classi*/
+
class Inherited : public PublicBase,
+
protected ProtectedBase,
+
private PrivateBase,
+
public Undocumented,
+
public Templ<int>
+
{
+
private:
+
Used *m_usedClass;
+
};
+

Verrà prodotto il grafo seguente:

+

I riquadri nel grafo qui sopra hanno il seguente significato:

+
    +
  • +Il riquadro grigio pieno rappresenta la struct o la classe per la quale il grafo è stato generato.
  • +
  • +Un riquadro con un bordo nero denota una struct o una classe documentata.
  • +
  • +Un riquadro con un bordo grigio indica una struct o una classe non documentata.
  • +
  • +Un riquadro con un bordo rosso indica una struct o una classe per la quale non sono mostrate tutte le relazioni di ereditarietà/contenimento (un grafo viene troncato se non rientra nei limiti prestabiliti).
  • +
+

Le frecce hanno il seguente significato:

+
    +
  • +Una freccia blu scuro indica una relazione di ereditarietà pubblica tra due classi.
  • +
  • +Una freccia verde indica un'ereditarietà protetta.
  • +
  • +Una freccia rossa indica un'ereditarietà privata.
  • +
  • +Una freccia viola tratteggiata indica che una classe è contenuta o usata da un'altra classe. La freccia viene etichettata con la o le variabili attraverso cui la struct o la classe puntata dalla freccia è accessibile.
  • +
  • +Una freccia gialla tratteggiata indica la relazione tra una istanza di un template e la classe templatizzata da cui è stata istanziata. La freccia viene etichettata con i parametri di template dell'istanza.
  • +
+
+ + + + diff --git a/doxygen/html/graph_legend.md5 b/doxygen/html/graph_legend.md5 new file mode 100644 index 0000000..6d9f6fd --- /dev/null +++ b/doxygen/html/graph_legend.md5 @@ -0,0 +1 @@ +35aadba97c74fd7ec9f1d333e3158ef7 \ No newline at end of file diff --git a/doxygen/html/graph_legend.png b/doxygen/html/graph_legend.png new file mode 100644 index 0000000..c3cac43 Binary files /dev/null and b/doxygen/html/graph_legend.png differ diff --git a/doxygen/html/index.html b/doxygen/html/index.html new file mode 100644 index 0000000..6185f84 --- /dev/null +++ b/doxygen/html/index.html @@ -0,0 +1,77 @@ + + + + + + + +Tetrix: Pagina Principale + + + + + + + + + +
+
+ + + + + + + +
+
Tetrix +  1.0.0 +
+
Tetrix by Davide Antonio Amodio, Luca Boffo, Alvise Favero
+
+
+ + + + + + + +
+ +
+
+ + +
+ +
+ +
+
+
Tetrix Documentazione
+
+
+
+ + + + diff --git a/doxygen/html/jquery.js b/doxygen/html/jquery.js new file mode 100644 index 0000000..103c32d --- /dev/null +++ b/doxygen/html/jquery.js @@ -0,0 +1,35 @@ +/*! jQuery v3.4.1 | (c) JS Foundation and other contributors | jquery.org/license */ +!function(e,t){"use strict";"object"==typeof module&&"object"==typeof module.exports?module.exports=e.document?t(e,!0):function(e){if(!e.document)throw new Error("jQuery requires a window with a document");return t(e)}:t(e)}("undefined"!=typeof window?window:this,function(C,e){"use strict";var t=[],E=C.document,r=Object.getPrototypeOf,s=t.slice,g=t.concat,u=t.push,i=t.indexOf,n={},o=n.toString,v=n.hasOwnProperty,a=v.toString,l=a.call(Object),y={},m=function(e){return"function"==typeof e&&"number"!=typeof e.nodeType},x=function(e){return null!=e&&e===e.window},c={type:!0,src:!0,nonce:!0,noModule:!0};function b(e,t,n){var r,i,o=(n=n||E).createElement("script");if(o.text=e,t)for(r in c)(i=t[r]||t.getAttribute&&t.getAttribute(r))&&o.setAttribute(r,i);n.head.appendChild(o).parentNode.removeChild(o)}function w(e){return null==e?e+"":"object"==typeof e||"function"==typeof e?n[o.call(e)]||"object":typeof e}var f="3.4.1",k=function(e,t){return new k.fn.init(e,t)},p=/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g;function d(e){var t=!!e&&"length"in e&&e.length,n=w(e);return!m(e)&&!x(e)&&("array"===n||0===t||"number"==typeof t&&0+~]|"+M+")"+M+"*"),U=new RegExp(M+"|>"),X=new RegExp($),V=new RegExp("^"+I+"$"),G={ID:new RegExp("^#("+I+")"),CLASS:new RegExp("^\\.("+I+")"),TAG:new RegExp("^("+I+"|[*])"),ATTR:new RegExp("^"+W),PSEUDO:new RegExp("^"+$),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+M+"*(even|odd|(([+-]|)(\\d*)n|)"+M+"*(?:([+-]|)"+M+"*(\\d+)|))"+M+"*\\)|)","i"),bool:new RegExp("^(?:"+R+")$","i"),needsContext:new RegExp("^"+M+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+M+"*((?:-\\d)?\\d*)"+M+"*\\)|)(?=[^-]|$)","i")},Y=/HTML$/i,Q=/^(?:input|select|textarea|button)$/i,J=/^h\d$/i,K=/^[^{]+\{\s*\[native \w/,Z=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,ee=/[+~]/,te=new RegExp("\\\\([\\da-f]{1,6}"+M+"?|("+M+")|.)","ig"),ne=function(e,t,n){var r="0x"+t-65536;return r!=r||n?t:r<0?String.fromCharCode(r+65536):String.fromCharCode(r>>10|55296,1023&r|56320)},re=/([\0-\x1f\x7f]|^-?\d)|^-$|[^\0-\x1f\x7f-\uFFFF\w-]/g,ie=function(e,t){return t?"\0"===e?"\ufffd":e.slice(0,-1)+"\\"+e.charCodeAt(e.length-1).toString(16)+" ":"\\"+e},oe=function(){T()},ae=be(function(e){return!0===e.disabled&&"fieldset"===e.nodeName.toLowerCase()},{dir:"parentNode",next:"legend"});try{H.apply(t=O.call(m.childNodes),m.childNodes),t[m.childNodes.length].nodeType}catch(e){H={apply:t.length?function(e,t){L.apply(e,O.call(t))}:function(e,t){var n=e.length,r=0;while(e[n++]=t[r++]);e.length=n-1}}}function se(t,e,n,r){var i,o,a,s,u,l,c,f=e&&e.ownerDocument,p=e?e.nodeType:9;if(n=n||[],"string"!=typeof t||!t||1!==p&&9!==p&&11!==p)return n;if(!r&&((e?e.ownerDocument||e:m)!==C&&T(e),e=e||C,E)){if(11!==p&&(u=Z.exec(t)))if(i=u[1]){if(9===p){if(!(a=e.getElementById(i)))return n;if(a.id===i)return n.push(a),n}else if(f&&(a=f.getElementById(i))&&y(e,a)&&a.id===i)return n.push(a),n}else{if(u[2])return H.apply(n,e.getElementsByTagName(t)),n;if((i=u[3])&&d.getElementsByClassName&&e.getElementsByClassName)return H.apply(n,e.getElementsByClassName(i)),n}if(d.qsa&&!A[t+" "]&&(!v||!v.test(t))&&(1!==p||"object"!==e.nodeName.toLowerCase())){if(c=t,f=e,1===p&&U.test(t)){(s=e.getAttribute("id"))?s=s.replace(re,ie):e.setAttribute("id",s=k),o=(l=h(t)).length;while(o--)l[o]="#"+s+" "+xe(l[o]);c=l.join(","),f=ee.test(t)&&ye(e.parentNode)||e}try{return H.apply(n,f.querySelectorAll(c)),n}catch(e){A(t,!0)}finally{s===k&&e.removeAttribute("id")}}}return g(t.replace(B,"$1"),e,n,r)}function ue(){var r=[];return function e(t,n){return r.push(t+" ")>b.cacheLength&&delete e[r.shift()],e[t+" "]=n}}function le(e){return e[k]=!0,e}function ce(e){var t=C.createElement("fieldset");try{return!!e(t)}catch(e){return!1}finally{t.parentNode&&t.parentNode.removeChild(t),t=null}}function fe(e,t){var n=e.split("|"),r=n.length;while(r--)b.attrHandle[n[r]]=t}function pe(e,t){var n=t&&e,r=n&&1===e.nodeType&&1===t.nodeType&&e.sourceIndex-t.sourceIndex;if(r)return r;if(n)while(n=n.nextSibling)if(n===t)return-1;return e?1:-1}function de(t){return function(e){return"input"===e.nodeName.toLowerCase()&&e.type===t}}function he(n){return function(e){var t=e.nodeName.toLowerCase();return("input"===t||"button"===t)&&e.type===n}}function ge(t){return function(e){return"form"in e?e.parentNode&&!1===e.disabled?"label"in e?"label"in e.parentNode?e.parentNode.disabled===t:e.disabled===t:e.isDisabled===t||e.isDisabled!==!t&&ae(e)===t:e.disabled===t:"label"in e&&e.disabled===t}}function ve(a){return le(function(o){return o=+o,le(function(e,t){var n,r=a([],e.length,o),i=r.length;while(i--)e[n=r[i]]&&(e[n]=!(t[n]=e[n]))})})}function ye(e){return e&&"undefined"!=typeof e.getElementsByTagName&&e}for(e in d=se.support={},i=se.isXML=function(e){var t=e.namespaceURI,n=(e.ownerDocument||e).documentElement;return!Y.test(t||n&&n.nodeName||"HTML")},T=se.setDocument=function(e){var t,n,r=e?e.ownerDocument||e:m;return r!==C&&9===r.nodeType&&r.documentElement&&(a=(C=r).documentElement,E=!i(C),m!==C&&(n=C.defaultView)&&n.top!==n&&(n.addEventListener?n.addEventListener("unload",oe,!1):n.attachEvent&&n.attachEvent("onunload",oe)),d.attributes=ce(function(e){return e.className="i",!e.getAttribute("className")}),d.getElementsByTagName=ce(function(e){return e.appendChild(C.createComment("")),!e.getElementsByTagName("*").length}),d.getElementsByClassName=K.test(C.getElementsByClassName),d.getById=ce(function(e){return a.appendChild(e).id=k,!C.getElementsByName||!C.getElementsByName(k).length}),d.getById?(b.filter.ID=function(e){var t=e.replace(te,ne);return function(e){return e.getAttribute("id")===t}},b.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&E){var n=t.getElementById(e);return n?[n]:[]}}):(b.filter.ID=function(e){var n=e.replace(te,ne);return function(e){var t="undefined"!=typeof e.getAttributeNode&&e.getAttributeNode("id");return t&&t.value===n}},b.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&E){var n,r,i,o=t.getElementById(e);if(o){if((n=o.getAttributeNode("id"))&&n.value===e)return[o];i=t.getElementsByName(e),r=0;while(o=i[r++])if((n=o.getAttributeNode("id"))&&n.value===e)return[o]}return[]}}),b.find.TAG=d.getElementsByTagName?function(e,t){return"undefined"!=typeof t.getElementsByTagName?t.getElementsByTagName(e):d.qsa?t.querySelectorAll(e):void 0}:function(e,t){var n,r=[],i=0,o=t.getElementsByTagName(e);if("*"===e){while(n=o[i++])1===n.nodeType&&r.push(n);return r}return o},b.find.CLASS=d.getElementsByClassName&&function(e,t){if("undefined"!=typeof t.getElementsByClassName&&E)return t.getElementsByClassName(e)},s=[],v=[],(d.qsa=K.test(C.querySelectorAll))&&(ce(function(e){a.appendChild(e).innerHTML="",e.querySelectorAll("[msallowcapture^='']").length&&v.push("[*^$]="+M+"*(?:''|\"\")"),e.querySelectorAll("[selected]").length||v.push("\\["+M+"*(?:value|"+R+")"),e.querySelectorAll("[id~="+k+"-]").length||v.push("~="),e.querySelectorAll(":checked").length||v.push(":checked"),e.querySelectorAll("a#"+k+"+*").length||v.push(".#.+[+~]")}),ce(function(e){e.innerHTML="";var t=C.createElement("input");t.setAttribute("type","hidden"),e.appendChild(t).setAttribute("name","D"),e.querySelectorAll("[name=d]").length&&v.push("name"+M+"*[*^$|!~]?="),2!==e.querySelectorAll(":enabled").length&&v.push(":enabled",":disabled"),a.appendChild(e).disabled=!0,2!==e.querySelectorAll(":disabled").length&&v.push(":enabled",":disabled"),e.querySelectorAll("*,:x"),v.push(",.*:")})),(d.matchesSelector=K.test(c=a.matches||a.webkitMatchesSelector||a.mozMatchesSelector||a.oMatchesSelector||a.msMatchesSelector))&&ce(function(e){d.disconnectedMatch=c.call(e,"*"),c.call(e,"[s!='']:x"),s.push("!=",$)}),v=v.length&&new RegExp(v.join("|")),s=s.length&&new RegExp(s.join("|")),t=K.test(a.compareDocumentPosition),y=t||K.test(a.contains)?function(e,t){var n=9===e.nodeType?e.documentElement:e,r=t&&t.parentNode;return e===r||!(!r||1!==r.nodeType||!(n.contains?n.contains(r):e.compareDocumentPosition&&16&e.compareDocumentPosition(r)))}:function(e,t){if(t)while(t=t.parentNode)if(t===e)return!0;return!1},D=t?function(e,t){if(e===t)return l=!0,0;var n=!e.compareDocumentPosition-!t.compareDocumentPosition;return n||(1&(n=(e.ownerDocument||e)===(t.ownerDocument||t)?e.compareDocumentPosition(t):1)||!d.sortDetached&&t.compareDocumentPosition(e)===n?e===C||e.ownerDocument===m&&y(m,e)?-1:t===C||t.ownerDocument===m&&y(m,t)?1:u?P(u,e)-P(u,t):0:4&n?-1:1)}:function(e,t){if(e===t)return l=!0,0;var n,r=0,i=e.parentNode,o=t.parentNode,a=[e],s=[t];if(!i||!o)return e===C?-1:t===C?1:i?-1:o?1:u?P(u,e)-P(u,t):0;if(i===o)return pe(e,t);n=e;while(n=n.parentNode)a.unshift(n);n=t;while(n=n.parentNode)s.unshift(n);while(a[r]===s[r])r++;return r?pe(a[r],s[r]):a[r]===m?-1:s[r]===m?1:0}),C},se.matches=function(e,t){return se(e,null,null,t)},se.matchesSelector=function(e,t){if((e.ownerDocument||e)!==C&&T(e),d.matchesSelector&&E&&!A[t+" "]&&(!s||!s.test(t))&&(!v||!v.test(t)))try{var n=c.call(e,t);if(n||d.disconnectedMatch||e.document&&11!==e.document.nodeType)return n}catch(e){A(t,!0)}return 0":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(e){return e[1]=e[1].replace(te,ne),e[3]=(e[3]||e[4]||e[5]||"").replace(te,ne),"~="===e[2]&&(e[3]=" "+e[3]+" "),e.slice(0,4)},CHILD:function(e){return e[1]=e[1].toLowerCase(),"nth"===e[1].slice(0,3)?(e[3]||se.error(e[0]),e[4]=+(e[4]?e[5]+(e[6]||1):2*("even"===e[3]||"odd"===e[3])),e[5]=+(e[7]+e[8]||"odd"===e[3])):e[3]&&se.error(e[0]),e},PSEUDO:function(e){var t,n=!e[6]&&e[2];return G.CHILD.test(e[0])?null:(e[3]?e[2]=e[4]||e[5]||"":n&&X.test(n)&&(t=h(n,!0))&&(t=n.indexOf(")",n.length-t)-n.length)&&(e[0]=e[0].slice(0,t),e[2]=n.slice(0,t)),e.slice(0,3))}},filter:{TAG:function(e){var t=e.replace(te,ne).toLowerCase();return"*"===e?function(){return!0}:function(e){return e.nodeName&&e.nodeName.toLowerCase()===t}},CLASS:function(e){var t=p[e+" "];return t||(t=new RegExp("(^|"+M+")"+e+"("+M+"|$)"))&&p(e,function(e){return t.test("string"==typeof e.className&&e.className||"undefined"!=typeof e.getAttribute&&e.getAttribute("class")||"")})},ATTR:function(n,r,i){return function(e){var t=se.attr(e,n);return null==t?"!="===r:!r||(t+="","="===r?t===i:"!="===r?t!==i:"^="===r?i&&0===t.indexOf(i):"*="===r?i&&-1:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i;function j(e,n,r){return m(n)?k.grep(e,function(e,t){return!!n.call(e,t,e)!==r}):n.nodeType?k.grep(e,function(e){return e===n!==r}):"string"!=typeof n?k.grep(e,function(e){return-1)[^>]*|#([\w-]+))$/;(k.fn.init=function(e,t,n){var r,i;if(!e)return this;if(n=n||q,"string"==typeof e){if(!(r="<"===e[0]&&">"===e[e.length-1]&&3<=e.length?[null,e,null]:L.exec(e))||!r[1]&&t)return!t||t.jquery?(t||n).find(e):this.constructor(t).find(e);if(r[1]){if(t=t instanceof k?t[0]:t,k.merge(this,k.parseHTML(r[1],t&&t.nodeType?t.ownerDocument||t:E,!0)),D.test(r[1])&&k.isPlainObject(t))for(r in t)m(this[r])?this[r](t[r]):this.attr(r,t[r]);return this}return(i=E.getElementById(r[2]))&&(this[0]=i,this.length=1),this}return e.nodeType?(this[0]=e,this.length=1,this):m(e)?void 0!==n.ready?n.ready(e):e(k):k.makeArray(e,this)}).prototype=k.fn,q=k(E);var H=/^(?:parents|prev(?:Until|All))/,O={children:!0,contents:!0,next:!0,prev:!0};function P(e,t){while((e=e[t])&&1!==e.nodeType);return e}k.fn.extend({has:function(e){var t=k(e,this),n=t.length;return this.filter(function(){for(var e=0;e\x20\t\r\n\f]*)/i,he=/^$|^module$|\/(?:java|ecma)script/i,ge={option:[1,""],thead:[1,"","
"],col:[2,"","
"],tr:[2,"","
"],td:[3,"","
"],_default:[0,"",""]};function ve(e,t){var n;return n="undefined"!=typeof e.getElementsByTagName?e.getElementsByTagName(t||"*"):"undefined"!=typeof e.querySelectorAll?e.querySelectorAll(t||"*"):[],void 0===t||t&&A(e,t)?k.merge([e],n):n}function ye(e,t){for(var n=0,r=e.length;nx",y.noCloneChecked=!!me.cloneNode(!0).lastChild.defaultValue;var Te=/^key/,Ce=/^(?:mouse|pointer|contextmenu|drag|drop)|click/,Ee=/^([^.]*)(?:\.(.+)|)/;function ke(){return!0}function Se(){return!1}function Ne(e,t){return e===function(){try{return E.activeElement}catch(e){}}()==("focus"===t)}function Ae(e,t,n,r,i,o){var a,s;if("object"==typeof t){for(s in"string"!=typeof n&&(r=r||n,n=void 0),t)Ae(e,s,n,r,t[s],o);return e}if(null==r&&null==i?(i=n,r=n=void 0):null==i&&("string"==typeof n?(i=r,r=void 0):(i=r,r=n,n=void 0)),!1===i)i=Se;else if(!i)return e;return 1===o&&(a=i,(i=function(e){return k().off(e),a.apply(this,arguments)}).guid=a.guid||(a.guid=k.guid++)),e.each(function(){k.event.add(this,t,i,r,n)})}function De(e,i,o){o?(Q.set(e,i,!1),k.event.add(e,i,{namespace:!1,handler:function(e){var t,n,r=Q.get(this,i);if(1&e.isTrigger&&this[i]){if(r.length)(k.event.special[i]||{}).delegateType&&e.stopPropagation();else if(r=s.call(arguments),Q.set(this,i,r),t=o(this,i),this[i](),r!==(n=Q.get(this,i))||t?Q.set(this,i,!1):n={},r!==n)return e.stopImmediatePropagation(),e.preventDefault(),n.value}else r.length&&(Q.set(this,i,{value:k.event.trigger(k.extend(r[0],k.Event.prototype),r.slice(1),this)}),e.stopImmediatePropagation())}})):void 0===Q.get(e,i)&&k.event.add(e,i,ke)}k.event={global:{},add:function(t,e,n,r,i){var o,a,s,u,l,c,f,p,d,h,g,v=Q.get(t);if(v){n.handler&&(n=(o=n).handler,i=o.selector),i&&k.find.matchesSelector(ie,i),n.guid||(n.guid=k.guid++),(u=v.events)||(u=v.events={}),(a=v.handle)||(a=v.handle=function(e){return"undefined"!=typeof k&&k.event.triggered!==e.type?k.event.dispatch.apply(t,arguments):void 0}),l=(e=(e||"").match(R)||[""]).length;while(l--)d=g=(s=Ee.exec(e[l])||[])[1],h=(s[2]||"").split(".").sort(),d&&(f=k.event.special[d]||{},d=(i?f.delegateType:f.bindType)||d,f=k.event.special[d]||{},c=k.extend({type:d,origType:g,data:r,handler:n,guid:n.guid,selector:i,needsContext:i&&k.expr.match.needsContext.test(i),namespace:h.join(".")},o),(p=u[d])||((p=u[d]=[]).delegateCount=0,f.setup&&!1!==f.setup.call(t,r,h,a)||t.addEventListener&&t.addEventListener(d,a)),f.add&&(f.add.call(t,c),c.handler.guid||(c.handler.guid=n.guid)),i?p.splice(p.delegateCount++,0,c):p.push(c),k.event.global[d]=!0)}},remove:function(e,t,n,r,i){var o,a,s,u,l,c,f,p,d,h,g,v=Q.hasData(e)&&Q.get(e);if(v&&(u=v.events)){l=(t=(t||"").match(R)||[""]).length;while(l--)if(d=g=(s=Ee.exec(t[l])||[])[1],h=(s[2]||"").split(".").sort(),d){f=k.event.special[d]||{},p=u[d=(r?f.delegateType:f.bindType)||d]||[],s=s[2]&&new RegExp("(^|\\.)"+h.join("\\.(?:.*\\.|)")+"(\\.|$)"),a=o=p.length;while(o--)c=p[o],!i&&g!==c.origType||n&&n.guid!==c.guid||s&&!s.test(c.namespace)||r&&r!==c.selector&&("**"!==r||!c.selector)||(p.splice(o,1),c.selector&&p.delegateCount--,f.remove&&f.remove.call(e,c));a&&!p.length&&(f.teardown&&!1!==f.teardown.call(e,h,v.handle)||k.removeEvent(e,d,v.handle),delete u[d])}else for(d in u)k.event.remove(e,d+t[l],n,r,!0);k.isEmptyObject(u)&&Q.remove(e,"handle events")}},dispatch:function(e){var t,n,r,i,o,a,s=k.event.fix(e),u=new Array(arguments.length),l=(Q.get(this,"events")||{})[s.type]||[],c=k.event.special[s.type]||{};for(u[0]=s,t=1;t\x20\t\r\n\f]*)[^>]*)\/>/gi,qe=/\s*$/g;function Oe(e,t){return A(e,"table")&&A(11!==t.nodeType?t:t.firstChild,"tr")&&k(e).children("tbody")[0]||e}function Pe(e){return e.type=(null!==e.getAttribute("type"))+"/"+e.type,e}function Re(e){return"true/"===(e.type||"").slice(0,5)?e.type=e.type.slice(5):e.removeAttribute("type"),e}function Me(e,t){var n,r,i,o,a,s,u,l;if(1===t.nodeType){if(Q.hasData(e)&&(o=Q.access(e),a=Q.set(t,o),l=o.events))for(i in delete a.handle,a.events={},l)for(n=0,r=l[i].length;n")},clone:function(e,t,n){var r,i,o,a,s,u,l,c=e.cloneNode(!0),f=oe(e);if(!(y.noCloneChecked||1!==e.nodeType&&11!==e.nodeType||k.isXMLDoc(e)))for(a=ve(c),r=0,i=(o=ve(e)).length;r").attr(n.scriptAttrs||{}).prop({charset:n.scriptCharset,src:n.url}).on("load error",i=function(e){r.remove(),i=null,e&&t("error"===e.type?404:200,e.type)}),E.head.appendChild(r[0])},abort:function(){i&&i()}}});var Vt,Gt=[],Yt=/(=)\?(?=&|$)|\?\?/;k.ajaxSetup({jsonp:"callback",jsonpCallback:function(){var e=Gt.pop()||k.expando+"_"+kt++;return this[e]=!0,e}}),k.ajaxPrefilter("json jsonp",function(e,t,n){var r,i,o,a=!1!==e.jsonp&&(Yt.test(e.url)?"url":"string"==typeof e.data&&0===(e.contentType||"").indexOf("application/x-www-form-urlencoded")&&Yt.test(e.data)&&"data");if(a||"jsonp"===e.dataTypes[0])return r=e.jsonpCallback=m(e.jsonpCallback)?e.jsonpCallback():e.jsonpCallback,a?e[a]=e[a].replace(Yt,"$1"+r):!1!==e.jsonp&&(e.url+=(St.test(e.url)?"&":"?")+e.jsonp+"="+r),e.converters["script json"]=function(){return o||k.error(r+" was not called"),o[0]},e.dataTypes[0]="json",i=C[r],C[r]=function(){o=arguments},n.always(function(){void 0===i?k(C).removeProp(r):C[r]=i,e[r]&&(e.jsonpCallback=t.jsonpCallback,Gt.push(r)),o&&m(i)&&i(o[0]),o=i=void 0}),"script"}),y.createHTMLDocument=((Vt=E.implementation.createHTMLDocument("").body).innerHTML="
",2===Vt.childNodes.length),k.parseHTML=function(e,t,n){return"string"!=typeof e?[]:("boolean"==typeof t&&(n=t,t=!1),t||(y.createHTMLDocument?((r=(t=E.implementation.createHTMLDocument("")).createElement("base")).href=E.location.href,t.head.appendChild(r)):t=E),o=!n&&[],(i=D.exec(e))?[t.createElement(i[1])]:(i=we([e],t,o),o&&o.length&&k(o).remove(),k.merge([],i.childNodes)));var r,i,o},k.fn.load=function(e,t,n){var r,i,o,a=this,s=e.indexOf(" ");return-1").append(k.parseHTML(e)).find(r):e)}).always(n&&function(e,t){a.each(function(){n.apply(this,o||[e.responseText,t,e])})}),this},k.each(["ajaxStart","ajaxStop","ajaxComplete","ajaxError","ajaxSuccess","ajaxSend"],function(e,t){k.fn[t]=function(e){return this.on(t,e)}}),k.expr.pseudos.animated=function(t){return k.grep(k.timers,function(e){return t===e.elem}).length},k.offset={setOffset:function(e,t,n){var r,i,o,a,s,u,l=k.css(e,"position"),c=k(e),f={};"static"===l&&(e.style.position="relative"),s=c.offset(),o=k.css(e,"top"),u=k.css(e,"left"),("absolute"===l||"fixed"===l)&&-1<(o+u).indexOf("auto")?(a=(r=c.position()).top,i=r.left):(a=parseFloat(o)||0,i=parseFloat(u)||0),m(t)&&(t=t.call(e,n,k.extend({},s))),null!=t.top&&(f.top=t.top-s.top+a),null!=t.left&&(f.left=t.left-s.left+i),"using"in t?t.using.call(e,f):c.css(f)}},k.fn.extend({offset:function(t){if(arguments.length)return void 0===t?this:this.each(function(e){k.offset.setOffset(this,t,e)});var e,n,r=this[0];return r?r.getClientRects().length?(e=r.getBoundingClientRect(),n=r.ownerDocument.defaultView,{top:e.top+n.pageYOffset,left:e.left+n.pageXOffset}):{top:0,left:0}:void 0},position:function(){if(this[0]){var e,t,n,r=this[0],i={top:0,left:0};if("fixed"===k.css(r,"position"))t=r.getBoundingClientRect();else{t=this.offset(),n=r.ownerDocument,e=r.offsetParent||n.documentElement;while(e&&(e===n.body||e===n.documentElement)&&"static"===k.css(e,"position"))e=e.parentNode;e&&e!==r&&1===e.nodeType&&((i=k(e).offset()).top+=k.css(e,"borderTopWidth",!0),i.left+=k.css(e,"borderLeftWidth",!0))}return{top:t.top-i.top-k.css(r,"marginTop",!0),left:t.left-i.left-k.css(r,"marginLeft",!0)}}},offsetParent:function(){return this.map(function(){var e=this.offsetParent;while(e&&"static"===k.css(e,"position"))e=e.offsetParent;return e||ie})}}),k.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},function(t,i){var o="pageYOffset"===i;k.fn[t]=function(e){return _(this,function(e,t,n){var r;if(x(e)?r=e:9===e.nodeType&&(r=e.defaultView),void 0===n)return r?r[i]:e[t];r?r.scrollTo(o?r.pageXOffset:n,o?n:r.pageYOffset):e[t]=n},t,e,arguments.length)}}),k.each(["top","left"],function(e,n){k.cssHooks[n]=ze(y.pixelPosition,function(e,t){if(t)return t=_e(e,n),$e.test(t)?k(e).position()[n]+"px":t})}),k.each({Height:"height",Width:"width"},function(a,s){k.each({padding:"inner"+a,content:s,"":"outer"+a},function(r,o){k.fn[o]=function(e,t){var n=arguments.length&&(r||"boolean"!=typeof e),i=r||(!0===e||!0===t?"margin":"border");return _(this,function(e,t,n){var r;return x(e)?0===o.indexOf("outer")?e["inner"+a]:e.document.documentElement["client"+a]:9===e.nodeType?(r=e.documentElement,Math.max(e.body["scroll"+a],r["scroll"+a],e.body["offset"+a],r["offset"+a],r["client"+a])):void 0===n?k.css(e,t,i):k.style(e,t,n,i)},s,n?e:void 0,n)}})}),k.each("blur focus focusin focusout resize scroll click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup contextmenu".split(" "),function(e,n){k.fn[n]=function(e,t){return 0a;a++)for(i in o[a])n=o[a][i],o[a].hasOwnProperty(i)&&void 0!==n&&(e[i]=t.isPlainObject(n)?t.isPlainObject(e[i])?t.widget.extend({},e[i],n):t.widget.extend({},n):n);return e},t.widget.bridge=function(e,i){var n=i.prototype.widgetFullName||e;t.fn[e]=function(o){var a="string"==typeof o,r=s.call(arguments,1),h=this;return a?this.length||"instance"!==o?this.each(function(){var i,s=t.data(this,n);return"instance"===o?(h=s,!1):s?t.isFunction(s[o])&&"_"!==o.charAt(0)?(i=s[o].apply(s,r),i!==s&&void 0!==i?(h=i&&i.jquery?h.pushStack(i.get()):i,!1):void 0):t.error("no such method '"+o+"' for "+e+" widget instance"):t.error("cannot call methods on "+e+" prior to initialization; "+"attempted to call method '"+o+"'")}):h=void 0:(r.length&&(o=t.widget.extend.apply(null,[o].concat(r))),this.each(function(){var e=t.data(this,n);e?(e.option(o||{}),e._init&&e._init()):t.data(this,n,new i(o,this))})),h}},t.Widget=function(){},t.Widget._childConstructors=[],t.Widget.prototype={widgetName:"widget",widgetEventPrefix:"",defaultElement:"
",options:{classes:{},disabled:!1,create:null},_createWidget:function(e,s){s=t(s||this.defaultElement||this)[0],this.element=t(s),this.uuid=i++,this.eventNamespace="."+this.widgetName+this.uuid,this.bindings=t(),this.hoverable=t(),this.focusable=t(),this.classesElementLookup={},s!==this&&(t.data(s,this.widgetFullName,this),this._on(!0,this.element,{remove:function(t){t.target===s&&this.destroy()}}),this.document=t(s.style?s.ownerDocument:s.document||s),this.window=t(this.document[0].defaultView||this.document[0].parentWindow)),this.options=t.widget.extend({},this.options,this._getCreateOptions(),e),this._create(),this.options.disabled&&this._setOptionDisabled(this.options.disabled),this._trigger("create",null,this._getCreateEventData()),this._init()},_getCreateOptions:function(){return{}},_getCreateEventData:t.noop,_create:t.noop,_init:t.noop,destroy:function(){var e=this;this._destroy(),t.each(this.classesElementLookup,function(t,i){e._removeClass(i,t)}),this.element.off(this.eventNamespace).removeData(this.widgetFullName),this.widget().off(this.eventNamespace).removeAttr("aria-disabled"),this.bindings.off(this.eventNamespace)},_destroy:t.noop,widget:function(){return this.element},option:function(e,i){var s,n,o,a=e;if(0===arguments.length)return t.widget.extend({},this.options);if("string"==typeof e)if(a={},s=e.split("."),e=s.shift(),s.length){for(n=a[e]=t.widget.extend({},this.options[e]),o=0;s.length-1>o;o++)n[s[o]]=n[s[o]]||{},n=n[s[o]];if(e=s.pop(),1===arguments.length)return void 0===n[e]?null:n[e];n[e]=i}else{if(1===arguments.length)return void 0===this.options[e]?null:this.options[e];a[e]=i}return this._setOptions(a),this},_setOptions:function(t){var e;for(e in t)this._setOption(e,t[e]);return this},_setOption:function(t,e){return"classes"===t&&this._setOptionClasses(e),this.options[t]=e,"disabled"===t&&this._setOptionDisabled(e),this},_setOptionClasses:function(e){var i,s,n;for(i in e)n=this.classesElementLookup[i],e[i]!==this.options.classes[i]&&n&&n.length&&(s=t(n.get()),this._removeClass(n,i),s.addClass(this._classes({element:s,keys:i,classes:e,add:!0})))},_setOptionDisabled:function(t){this._toggleClass(this.widget(),this.widgetFullName+"-disabled",null,!!t),t&&(this._removeClass(this.hoverable,null,"ui-state-hover"),this._removeClass(this.focusable,null,"ui-state-focus"))},enable:function(){return this._setOptions({disabled:!1})},disable:function(){return this._setOptions({disabled:!0})},_classes:function(e){function i(i,o){var a,r;for(r=0;i.length>r;r++)a=n.classesElementLookup[i[r]]||t(),a=e.add?t(t.unique(a.get().concat(e.element.get()))):t(a.not(e.element).get()),n.classesElementLookup[i[r]]=a,s.push(i[r]),o&&e.classes[i[r]]&&s.push(e.classes[i[r]])}var s=[],n=this;return e=t.extend({element:this.element,classes:this.options.classes||{}},e),this._on(e.element,{remove:"_untrackClassesElement"}),e.keys&&i(e.keys.match(/\S+/g)||[],!0),e.extra&&i(e.extra.match(/\S+/g)||[]),s.join(" ")},_untrackClassesElement:function(e){var i=this;t.each(i.classesElementLookup,function(s,n){-1!==t.inArray(e.target,n)&&(i.classesElementLookup[s]=t(n.not(e.target).get()))})},_removeClass:function(t,e,i){return this._toggleClass(t,e,i,!1)},_addClass:function(t,e,i){return this._toggleClass(t,e,i,!0)},_toggleClass:function(t,e,i,s){s="boolean"==typeof s?s:i;var n="string"==typeof t||null===t,o={extra:n?e:i,keys:n?t:e,element:n?this.element:t,add:s};return o.element.toggleClass(this._classes(o),s),this},_on:function(e,i,s){var n,o=this;"boolean"!=typeof e&&(s=i,i=e,e=!1),s?(i=n=t(i),this.bindings=this.bindings.add(i)):(s=i,i=this.element,n=this.widget()),t.each(s,function(s,a){function r(){return e||o.options.disabled!==!0&&!t(this).hasClass("ui-state-disabled")?("string"==typeof a?o[a]:a).apply(o,arguments):void 0}"string"!=typeof a&&(r.guid=a.guid=a.guid||r.guid||t.guid++);var h=s.match(/^([\w:-]*)\s*(.*)$/),l=h[1]+o.eventNamespace,c=h[2];c?n.on(l,c,r):i.on(l,r)})},_off:function(e,i){i=(i||"").split(" ").join(this.eventNamespace+" ")+this.eventNamespace,e.off(i).off(i),this.bindings=t(this.bindings.not(e).get()),this.focusable=t(this.focusable.not(e).get()),this.hoverable=t(this.hoverable.not(e).get())},_delay:function(t,e){function i(){return("string"==typeof t?s[t]:t).apply(s,arguments)}var s=this;return setTimeout(i,e||0)},_hoverable:function(e){this.hoverable=this.hoverable.add(e),this._on(e,{mouseenter:function(e){this._addClass(t(e.currentTarget),null,"ui-state-hover")},mouseleave:function(e){this._removeClass(t(e.currentTarget),null,"ui-state-hover")}})},_focusable:function(e){this.focusable=this.focusable.add(e),this._on(e,{focusin:function(e){this._addClass(t(e.currentTarget),null,"ui-state-focus")},focusout:function(e){this._removeClass(t(e.currentTarget),null,"ui-state-focus")}})},_trigger:function(e,i,s){var n,o,a=this.options[e];if(s=s||{},i=t.Event(i),i.type=(e===this.widgetEventPrefix?e:this.widgetEventPrefix+e).toLowerCase(),i.target=this.element[0],o=i.originalEvent)for(n in o)n in i||(i[n]=o[n]);return this.element.trigger(i,s),!(t.isFunction(a)&&a.apply(this.element[0],[i].concat(s))===!1||i.isDefaultPrevented())}},t.each({show:"fadeIn",hide:"fadeOut"},function(e,i){t.Widget.prototype["_"+e]=function(s,n,o){"string"==typeof n&&(n={effect:n});var a,r=n?n===!0||"number"==typeof n?i:n.effect||i:e;n=n||{},"number"==typeof n&&(n={duration:n}),a=!t.isEmptyObject(n),n.complete=o,n.delay&&s.delay(n.delay),a&&t.effects&&t.effects.effect[r]?s[e](n):r!==e&&s[r]?s[r](n.duration,n.easing,o):s.queue(function(i){t(this)[e](),o&&o.call(s[0]),i()})}}),t.widget,function(){function e(t,e,i){return[parseFloat(t[0])*(u.test(t[0])?e/100:1),parseFloat(t[1])*(u.test(t[1])?i/100:1)]}function i(e,i){return parseInt(t.css(e,i),10)||0}function s(e){var i=e[0];return 9===i.nodeType?{width:e.width(),height:e.height(),offset:{top:0,left:0}}:t.isWindow(i)?{width:e.width(),height:e.height(),offset:{top:e.scrollTop(),left:e.scrollLeft()}}:i.preventDefault?{width:0,height:0,offset:{top:i.pageY,left:i.pageX}}:{width:e.outerWidth(),height:e.outerHeight(),offset:e.offset()}}var n,o=Math.max,a=Math.abs,r=/left|center|right/,h=/top|center|bottom/,l=/[\+\-]\d+(\.[\d]+)?%?/,c=/^\w+/,u=/%$/,d=t.fn.position;t.position={scrollbarWidth:function(){if(void 0!==n)return n;var e,i,s=t("
"),o=s.children()[0];return t("body").append(s),e=o.offsetWidth,s.css("overflow","scroll"),i=o.offsetWidth,e===i&&(i=s[0].clientWidth),s.remove(),n=e-i},getScrollInfo:function(e){var i=e.isWindow||e.isDocument?"":e.element.css("overflow-x"),s=e.isWindow||e.isDocument?"":e.element.css("overflow-y"),n="scroll"===i||"auto"===i&&e.widthi?"left":e>0?"right":"center",vertical:0>r?"top":s>0?"bottom":"middle"};l>p&&p>a(e+i)&&(u.horizontal="center"),c>f&&f>a(s+r)&&(u.vertical="middle"),u.important=o(a(e),a(i))>o(a(s),a(r))?"horizontal":"vertical",n.using.call(this,t,u)}),h.offset(t.extend(D,{using:r}))})},t.ui.position={fit:{left:function(t,e){var i,s=e.within,n=s.isWindow?s.scrollLeft:s.offset.left,a=s.width,r=t.left-e.collisionPosition.marginLeft,h=n-r,l=r+e.collisionWidth-a-n;e.collisionWidth>a?h>0&&0>=l?(i=t.left+h+e.collisionWidth-a-n,t.left+=h-i):t.left=l>0&&0>=h?n:h>l?n+a-e.collisionWidth:n:h>0?t.left+=h:l>0?t.left-=l:t.left=o(t.left-r,t.left)},top:function(t,e){var i,s=e.within,n=s.isWindow?s.scrollTop:s.offset.top,a=e.within.height,r=t.top-e.collisionPosition.marginTop,h=n-r,l=r+e.collisionHeight-a-n;e.collisionHeight>a?h>0&&0>=l?(i=t.top+h+e.collisionHeight-a-n,t.top+=h-i):t.top=l>0&&0>=h?n:h>l?n+a-e.collisionHeight:n:h>0?t.top+=h:l>0?t.top-=l:t.top=o(t.top-r,t.top)}},flip:{left:function(t,e){var i,s,n=e.within,o=n.offset.left+n.scrollLeft,r=n.width,h=n.isWindow?n.scrollLeft:n.offset.left,l=t.left-e.collisionPosition.marginLeft,c=l-h,u=l+e.collisionWidth-r-h,d="left"===e.my[0]?-e.elemWidth:"right"===e.my[0]?e.elemWidth:0,p="left"===e.at[0]?e.targetWidth:"right"===e.at[0]?-e.targetWidth:0,f=-2*e.offset[0];0>c?(i=t.left+d+p+f+e.collisionWidth-r-o,(0>i||a(c)>i)&&(t.left+=d+p+f)):u>0&&(s=t.left-e.collisionPosition.marginLeft+d+p+f-h,(s>0||u>a(s))&&(t.left+=d+p+f))},top:function(t,e){var i,s,n=e.within,o=n.offset.top+n.scrollTop,r=n.height,h=n.isWindow?n.scrollTop:n.offset.top,l=t.top-e.collisionPosition.marginTop,c=l-h,u=l+e.collisionHeight-r-h,d="top"===e.my[1],p=d?-e.elemHeight:"bottom"===e.my[1]?e.elemHeight:0,f="top"===e.at[1]?e.targetHeight:"bottom"===e.at[1]?-e.targetHeight:0,m=-2*e.offset[1];0>c?(s=t.top+p+f+m+e.collisionHeight-r-o,(0>s||a(c)>s)&&(t.top+=p+f+m)):u>0&&(i=t.top-e.collisionPosition.marginTop+p+f+m-h,(i>0||u>a(i))&&(t.top+=p+f+m))}},flipfit:{left:function(){t.ui.position.flip.left.apply(this,arguments),t.ui.position.fit.left.apply(this,arguments)},top:function(){t.ui.position.flip.top.apply(this,arguments),t.ui.position.fit.top.apply(this,arguments)}}}}(),t.ui.position,t.extend(t.expr[":"],{data:t.expr.createPseudo?t.expr.createPseudo(function(e){return function(i){return!!t.data(i,e)}}):function(e,i,s){return!!t.data(e,s[3])}}),t.fn.extend({disableSelection:function(){var t="onselectstart"in document.createElement("div")?"selectstart":"mousedown";return function(){return this.on(t+".ui-disableSelection",function(t){t.preventDefault()})}}(),enableSelection:function(){return this.off(".ui-disableSelection")}}),t.ui.focusable=function(i,s){var n,o,a,r,h,l=i.nodeName.toLowerCase();return"area"===l?(n=i.parentNode,o=n.name,i.href&&o&&"map"===n.nodeName.toLowerCase()?(a=t("img[usemap='#"+o+"']"),a.length>0&&a.is(":visible")):!1):(/^(input|select|textarea|button|object)$/.test(l)?(r=!i.disabled,r&&(h=t(i).closest("fieldset")[0],h&&(r=!h.disabled))):r="a"===l?i.href||s:s,r&&t(i).is(":visible")&&e(t(i)))},t.extend(t.expr[":"],{focusable:function(e){return t.ui.focusable(e,null!=t.attr(e,"tabindex"))}}),t.ui.focusable,t.fn.form=function(){return"string"==typeof this[0].form?this.closest("form"):t(this[0].form)},t.ui.formResetMixin={_formResetHandler:function(){var e=t(this);setTimeout(function(){var i=e.data("ui-form-reset-instances");t.each(i,function(){this.refresh()})})},_bindFormResetHandler:function(){if(this.form=this.element.form(),this.form.length){var t=this.form.data("ui-form-reset-instances")||[];t.length||this.form.on("reset.ui-form-reset",this._formResetHandler),t.push(this),this.form.data("ui-form-reset-instances",t)}},_unbindFormResetHandler:function(){if(this.form.length){var e=this.form.data("ui-form-reset-instances");e.splice(t.inArray(this,e),1),e.length?this.form.data("ui-form-reset-instances",e):this.form.removeData("ui-form-reset-instances").off("reset.ui-form-reset")}}},"1.7"===t.fn.jquery.substring(0,3)&&(t.each(["Width","Height"],function(e,i){function s(e,i,s,o){return t.each(n,function(){i-=parseFloat(t.css(e,"padding"+this))||0,s&&(i-=parseFloat(t.css(e,"border"+this+"Width"))||0),o&&(i-=parseFloat(t.css(e,"margin"+this))||0)}),i}var n="Width"===i?["Left","Right"]:["Top","Bottom"],o=i.toLowerCase(),a={innerWidth:t.fn.innerWidth,innerHeight:t.fn.innerHeight,outerWidth:t.fn.outerWidth,outerHeight:t.fn.outerHeight};t.fn["inner"+i]=function(e){return void 0===e?a["inner"+i].call(this):this.each(function(){t(this).css(o,s(this,e)+"px")})},t.fn["outer"+i]=function(e,n){return"number"!=typeof e?a["outer"+i].call(this,e):this.each(function(){t(this).css(o,s(this,e,!0,n)+"px")})}}),t.fn.addBack=function(t){return this.add(null==t?this.prevObject:this.prevObject.filter(t))}),t.ui.keyCode={BACKSPACE:8,COMMA:188,DELETE:46,DOWN:40,END:35,ENTER:13,ESCAPE:27,HOME:36,LEFT:37,PAGE_DOWN:34,PAGE_UP:33,PERIOD:190,RIGHT:39,SPACE:32,TAB:9,UP:38},t.ui.escapeSelector=function(){var t=/([!"#$%&'()*+,./:;<=>?@[\]^`{|}~])/g;return function(e){return e.replace(t,"\\$1")}}(),t.fn.labels=function(){var e,i,s,n,o;return this[0].labels&&this[0].labels.length?this.pushStack(this[0].labels):(n=this.eq(0).parents("label"),s=this.attr("id"),s&&(e=this.eq(0).parents().last(),o=e.add(e.length?e.siblings():this.siblings()),i="label[for='"+t.ui.escapeSelector(s)+"']",n=n.add(o.find(i).addBack(i))),this.pushStack(n))},t.fn.scrollParent=function(e){var i=this.css("position"),s="absolute"===i,n=e?/(auto|scroll|hidden)/:/(auto|scroll)/,o=this.parents().filter(function(){var e=t(this);return s&&"static"===e.css("position")?!1:n.test(e.css("overflow")+e.css("overflow-y")+e.css("overflow-x"))}).eq(0);return"fixed"!==i&&o.length?o:t(this[0].ownerDocument||document)},t.extend(t.expr[":"],{tabbable:function(e){var i=t.attr(e,"tabindex"),s=null!=i;return(!s||i>=0)&&t.ui.focusable(e,s)}}),t.fn.extend({uniqueId:function(){var t=0;return function(){return this.each(function(){this.id||(this.id="ui-id-"+ ++t)})}}(),removeUniqueId:function(){return this.each(function(){/^ui-id-\d+$/.test(this.id)&&t(this).removeAttr("id")})}}),t.ui.ie=!!/msie [\w.]+/.exec(navigator.userAgent.toLowerCase());var n=!1;t(document).on("mouseup",function(){n=!1}),t.widget("ui.mouse",{version:"1.12.1",options:{cancel:"input, textarea, button, select, option",distance:1,delay:0},_mouseInit:function(){var e=this;this.element.on("mousedown."+this.widgetName,function(t){return e._mouseDown(t)}).on("click."+this.widgetName,function(i){return!0===t.data(i.target,e.widgetName+".preventClickEvent")?(t.removeData(i.target,e.widgetName+".preventClickEvent"),i.stopImmediatePropagation(),!1):void 0}),this.started=!1},_mouseDestroy:function(){this.element.off("."+this.widgetName),this._mouseMoveDelegate&&this.document.off("mousemove."+this.widgetName,this._mouseMoveDelegate).off("mouseup."+this.widgetName,this._mouseUpDelegate)},_mouseDown:function(e){if(!n){this._mouseMoved=!1,this._mouseStarted&&this._mouseUp(e),this._mouseDownEvent=e;var i=this,s=1===e.which,o="string"==typeof this.options.cancel&&e.target.nodeName?t(e.target).closest(this.options.cancel).length:!1;return s&&!o&&this._mouseCapture(e)?(this.mouseDelayMet=!this.options.delay,this.mouseDelayMet||(this._mouseDelayTimer=setTimeout(function(){i.mouseDelayMet=!0},this.options.delay)),this._mouseDistanceMet(e)&&this._mouseDelayMet(e)&&(this._mouseStarted=this._mouseStart(e)!==!1,!this._mouseStarted)?(e.preventDefault(),!0):(!0===t.data(e.target,this.widgetName+".preventClickEvent")&&t.removeData(e.target,this.widgetName+".preventClickEvent"),this._mouseMoveDelegate=function(t){return i._mouseMove(t)},this._mouseUpDelegate=function(t){return i._mouseUp(t)},this.document.on("mousemove."+this.widgetName,this._mouseMoveDelegate).on("mouseup."+this.widgetName,this._mouseUpDelegate),e.preventDefault(),n=!0,!0)):!0}},_mouseMove:function(e){if(this._mouseMoved){if(t.ui.ie&&(!document.documentMode||9>document.documentMode)&&!e.button)return this._mouseUp(e);if(!e.which)if(e.originalEvent.altKey||e.originalEvent.ctrlKey||e.originalEvent.metaKey||e.originalEvent.shiftKey)this.ignoreMissingWhich=!0;else if(!this.ignoreMissingWhich)return this._mouseUp(e)}return(e.which||e.button)&&(this._mouseMoved=!0),this._mouseStarted?(this._mouseDrag(e),e.preventDefault()):(this._mouseDistanceMet(e)&&this._mouseDelayMet(e)&&(this._mouseStarted=this._mouseStart(this._mouseDownEvent,e)!==!1,this._mouseStarted?this._mouseDrag(e):this._mouseUp(e)),!this._mouseStarted)},_mouseUp:function(e){this.document.off("mousemove."+this.widgetName,this._mouseMoveDelegate).off("mouseup."+this.widgetName,this._mouseUpDelegate),this._mouseStarted&&(this._mouseStarted=!1,e.target===this._mouseDownEvent.target&&t.data(e.target,this.widgetName+".preventClickEvent",!0),this._mouseStop(e)),this._mouseDelayTimer&&(clearTimeout(this._mouseDelayTimer),delete this._mouseDelayTimer),this.ignoreMissingWhich=!1,n=!1,e.preventDefault()},_mouseDistanceMet:function(t){return Math.max(Math.abs(this._mouseDownEvent.pageX-t.pageX),Math.abs(this._mouseDownEvent.pageY-t.pageY))>=this.options.distance},_mouseDelayMet:function(){return this.mouseDelayMet},_mouseStart:function(){},_mouseDrag:function(){},_mouseStop:function(){},_mouseCapture:function(){return!0}}),t.ui.plugin={add:function(e,i,s){var n,o=t.ui[e].prototype;for(n in s)o.plugins[n]=o.plugins[n]||[],o.plugins[n].push([i,s[n]])},call:function(t,e,i,s){var n,o=t.plugins[e];if(o&&(s||t.element[0].parentNode&&11!==t.element[0].parentNode.nodeType))for(n=0;o.length>n;n++)t.options[o[n][0]]&&o[n][1].apply(t.element,i)}},t.widget("ui.resizable",t.ui.mouse,{version:"1.12.1",widgetEventPrefix:"resize",options:{alsoResize:!1,animate:!1,animateDuration:"slow",animateEasing:"swing",aspectRatio:!1,autoHide:!1,classes:{"ui-resizable-se":"ui-icon ui-icon-gripsmall-diagonal-se"},containment:!1,ghost:!1,grid:!1,handles:"e,s,se",helper:!1,maxHeight:null,maxWidth:null,minHeight:10,minWidth:10,zIndex:90,resize:null,start:null,stop:null},_num:function(t){return parseFloat(t)||0},_isNumber:function(t){return!isNaN(parseFloat(t))},_hasScroll:function(e,i){if("hidden"===t(e).css("overflow"))return!1;var s=i&&"left"===i?"scrollLeft":"scrollTop",n=!1;return e[s]>0?!0:(e[s]=1,n=e[s]>0,e[s]=0,n)},_create:function(){var e,i=this.options,s=this;this._addClass("ui-resizable"),t.extend(this,{_aspectRatio:!!i.aspectRatio,aspectRatio:i.aspectRatio,originalElement:this.element,_proportionallyResizeElements:[],_helper:i.helper||i.ghost||i.animate?i.helper||"ui-resizable-helper":null}),this.element[0].nodeName.match(/^(canvas|textarea|input|select|button|img)$/i)&&(this.element.wrap(t("
").css({position:this.element.css("position"),width:this.element.outerWidth(),height:this.element.outerHeight(),top:this.element.css("top"),left:this.element.css("left")})),this.element=this.element.parent().data("ui-resizable",this.element.resizable("instance")),this.elementIsWrapper=!0,e={marginTop:this.originalElement.css("marginTop"),marginRight:this.originalElement.css("marginRight"),marginBottom:this.originalElement.css("marginBottom"),marginLeft:this.originalElement.css("marginLeft")},this.element.css(e),this.originalElement.css("margin",0),this.originalResizeStyle=this.originalElement.css("resize"),this.originalElement.css("resize","none"),this._proportionallyResizeElements.push(this.originalElement.css({position:"static",zoom:1,display:"block"})),this.originalElement.css(e),this._proportionallyResize()),this._setupHandles(),i.autoHide&&t(this.element).on("mouseenter",function(){i.disabled||(s._removeClass("ui-resizable-autohide"),s._handles.show())}).on("mouseleave",function(){i.disabled||s.resizing||(s._addClass("ui-resizable-autohide"),s._handles.hide())}),this._mouseInit()},_destroy:function(){this._mouseDestroy();var e,i=function(e){t(e).removeData("resizable").removeData("ui-resizable").off(".resizable").find(".ui-resizable-handle").remove()};return this.elementIsWrapper&&(i(this.element),e=this.element,this.originalElement.css({position:e.css("position"),width:e.outerWidth(),height:e.outerHeight(),top:e.css("top"),left:e.css("left")}).insertAfter(e),e.remove()),this.originalElement.css("resize",this.originalResizeStyle),i(this.originalElement),this},_setOption:function(t,e){switch(this._super(t,e),t){case"handles":this._removeHandles(),this._setupHandles();break;default:}},_setupHandles:function(){var e,i,s,n,o,a=this.options,r=this;if(this.handles=a.handles||(t(".ui-resizable-handle",this.element).length?{n:".ui-resizable-n",e:".ui-resizable-e",s:".ui-resizable-s",w:".ui-resizable-w",se:".ui-resizable-se",sw:".ui-resizable-sw",ne:".ui-resizable-ne",nw:".ui-resizable-nw"}:"e,s,se"),this._handles=t(),this.handles.constructor===String)for("all"===this.handles&&(this.handles="n,e,s,w,se,sw,ne,nw"),s=this.handles.split(","),this.handles={},i=0;s.length>i;i++)e=t.trim(s[i]),n="ui-resizable-"+e,o=t("
"),this._addClass(o,"ui-resizable-handle "+n),o.css({zIndex:a.zIndex}),this.handles[e]=".ui-resizable-"+e,this.element.append(o);this._renderAxis=function(e){var i,s,n,o;e=e||this.element;for(i in this.handles)this.handles[i].constructor===String?this.handles[i]=this.element.children(this.handles[i]).first().show():(this.handles[i].jquery||this.handles[i].nodeType)&&(this.handles[i]=t(this.handles[i]),this._on(this.handles[i],{mousedown:r._mouseDown})),this.elementIsWrapper&&this.originalElement[0].nodeName.match(/^(textarea|input|select|button)$/i)&&(s=t(this.handles[i],this.element),o=/sw|ne|nw|se|n|s/.test(i)?s.outerHeight():s.outerWidth(),n=["padding",/ne|nw|n/.test(i)?"Top":/se|sw|s/.test(i)?"Bottom":/^e$/.test(i)?"Right":"Left"].join(""),e.css(n,o),this._proportionallyResize()),this._handles=this._handles.add(this.handles[i])},this._renderAxis(this.element),this._handles=this._handles.add(this.element.find(".ui-resizable-handle")),this._handles.disableSelection(),this._handles.on("mouseover",function(){r.resizing||(this.className&&(o=this.className.match(/ui-resizable-(se|sw|ne|nw|n|e|s|w)/i)),r.axis=o&&o[1]?o[1]:"se")}),a.autoHide&&(this._handles.hide(),this._addClass("ui-resizable-autohide"))},_removeHandles:function(){this._handles.remove()},_mouseCapture:function(e){var i,s,n=!1;for(i in this.handles)s=t(this.handles[i])[0],(s===e.target||t.contains(s,e.target))&&(n=!0);return!this.options.disabled&&n},_mouseStart:function(e){var i,s,n,o=this.options,a=this.element;return this.resizing=!0,this._renderProxy(),i=this._num(this.helper.css("left")),s=this._num(this.helper.css("top")),o.containment&&(i+=t(o.containment).scrollLeft()||0,s+=t(o.containment).scrollTop()||0),this.offset=this.helper.offset(),this.position={left:i,top:s},this.size=this._helper?{width:this.helper.width(),height:this.helper.height()}:{width:a.width(),height:a.height()},this.originalSize=this._helper?{width:a.outerWidth(),height:a.outerHeight()}:{width:a.width(),height:a.height()},this.sizeDiff={width:a.outerWidth()-a.width(),height:a.outerHeight()-a.height()},this.originalPosition={left:i,top:s},this.originalMousePosition={left:e.pageX,top:e.pageY},this.aspectRatio="number"==typeof o.aspectRatio?o.aspectRatio:this.originalSize.width/this.originalSize.height||1,n=t(".ui-resizable-"+this.axis).css("cursor"),t("body").css("cursor","auto"===n?this.axis+"-resize":n),this._addClass("ui-resizable-resizing"),this._propagate("start",e),!0},_mouseDrag:function(e){var i,s,n=this.originalMousePosition,o=this.axis,a=e.pageX-n.left||0,r=e.pageY-n.top||0,h=this._change[o];return this._updatePrevProperties(),h?(i=h.apply(this,[e,a,r]),this._updateVirtualBoundaries(e.shiftKey),(this._aspectRatio||e.shiftKey)&&(i=this._updateRatio(i,e)),i=this._respectSize(i,e),this._updateCache(i),this._propagate("resize",e),s=this._applyChanges(),!this._helper&&this._proportionallyResizeElements.length&&this._proportionallyResize(),t.isEmptyObject(s)||(this._updatePrevProperties(),this._trigger("resize",e,this.ui()),this._applyChanges()),!1):!1},_mouseStop:function(e){this.resizing=!1;var i,s,n,o,a,r,h,l=this.options,c=this;return this._helper&&(i=this._proportionallyResizeElements,s=i.length&&/textarea/i.test(i[0].nodeName),n=s&&this._hasScroll(i[0],"left")?0:c.sizeDiff.height,o=s?0:c.sizeDiff.width,a={width:c.helper.width()-o,height:c.helper.height()-n},r=parseFloat(c.element.css("left"))+(c.position.left-c.originalPosition.left)||null,h=parseFloat(c.element.css("top"))+(c.position.top-c.originalPosition.top)||null,l.animate||this.element.css(t.extend(a,{top:h,left:r})),c.helper.height(c.size.height),c.helper.width(c.size.width),this._helper&&!l.animate&&this._proportionallyResize()),t("body").css("cursor","auto"),this._removeClass("ui-resizable-resizing"),this._propagate("stop",e),this._helper&&this.helper.remove(),!1},_updatePrevProperties:function(){this.prevPosition={top:this.position.top,left:this.position.left},this.prevSize={width:this.size.width,height:this.size.height}},_applyChanges:function(){var t={};return this.position.top!==this.prevPosition.top&&(t.top=this.position.top+"px"),this.position.left!==this.prevPosition.left&&(t.left=this.position.left+"px"),this.size.width!==this.prevSize.width&&(t.width=this.size.width+"px"),this.size.height!==this.prevSize.height&&(t.height=this.size.height+"px"),this.helper.css(t),t},_updateVirtualBoundaries:function(t){var e,i,s,n,o,a=this.options;o={minWidth:this._isNumber(a.minWidth)?a.minWidth:0,maxWidth:this._isNumber(a.maxWidth)?a.maxWidth:1/0,minHeight:this._isNumber(a.minHeight)?a.minHeight:0,maxHeight:this._isNumber(a.maxHeight)?a.maxHeight:1/0},(this._aspectRatio||t)&&(e=o.minHeight*this.aspectRatio,s=o.minWidth/this.aspectRatio,i=o.maxHeight*this.aspectRatio,n=o.maxWidth/this.aspectRatio,e>o.minWidth&&(o.minWidth=e),s>o.minHeight&&(o.minHeight=s),o.maxWidth>i&&(o.maxWidth=i),o.maxHeight>n&&(o.maxHeight=n)),this._vBoundaries=o},_updateCache:function(t){this.offset=this.helper.offset(),this._isNumber(t.left)&&(this.position.left=t.left),this._isNumber(t.top)&&(this.position.top=t.top),this._isNumber(t.height)&&(this.size.height=t.height),this._isNumber(t.width)&&(this.size.width=t.width)},_updateRatio:function(t){var e=this.position,i=this.size,s=this.axis;return this._isNumber(t.height)?t.width=t.height*this.aspectRatio:this._isNumber(t.width)&&(t.height=t.width/this.aspectRatio),"sw"===s&&(t.left=e.left+(i.width-t.width),t.top=null),"nw"===s&&(t.top=e.top+(i.height-t.height),t.left=e.left+(i.width-t.width)),t},_respectSize:function(t){var e=this._vBoundaries,i=this.axis,s=this._isNumber(t.width)&&e.maxWidth&&e.maxWidtht.width,a=this._isNumber(t.height)&&e.minHeight&&e.minHeight>t.height,r=this.originalPosition.left+this.originalSize.width,h=this.originalPosition.top+this.originalSize.height,l=/sw|nw|w/.test(i),c=/nw|ne|n/.test(i);return o&&(t.width=e.minWidth),a&&(t.height=e.minHeight),s&&(t.width=e.maxWidth),n&&(t.height=e.maxHeight),o&&l&&(t.left=r-e.minWidth),s&&l&&(t.left=r-e.maxWidth),a&&c&&(t.top=h-e.minHeight),n&&c&&(t.top=h-e.maxHeight),t.width||t.height||t.left||!t.top?t.width||t.height||t.top||!t.left||(t.left=null):t.top=null,t},_getPaddingPlusBorderDimensions:function(t){for(var e=0,i=[],s=[t.css("borderTopWidth"),t.css("borderRightWidth"),t.css("borderBottomWidth"),t.css("borderLeftWidth")],n=[t.css("paddingTop"),t.css("paddingRight"),t.css("paddingBottom"),t.css("paddingLeft")];4>e;e++)i[e]=parseFloat(s[e])||0,i[e]+=parseFloat(n[e])||0;return{height:i[0]+i[2],width:i[1]+i[3]}},_proportionallyResize:function(){if(this._proportionallyResizeElements.length)for(var t,e=0,i=this.helper||this.element;this._proportionallyResizeElements.length>e;e++)t=this._proportionallyResizeElements[e],this.outerDimensions||(this.outerDimensions=this._getPaddingPlusBorderDimensions(t)),t.css({height:i.height()-this.outerDimensions.height||0,width:i.width()-this.outerDimensions.width||0})},_renderProxy:function(){var e=this.element,i=this.options;this.elementOffset=e.offset(),this._helper?(this.helper=this.helper||t("
"),this._addClass(this.helper,this._helper),this.helper.css({width:this.element.outerWidth(),height:this.element.outerHeight(),position:"absolute",left:this.elementOffset.left+"px",top:this.elementOffset.top+"px",zIndex:++i.zIndex}),this.helper.appendTo("body").disableSelection()):this.helper=this.element +},_change:{e:function(t,e){return{width:this.originalSize.width+e}},w:function(t,e){var i=this.originalSize,s=this.originalPosition;return{left:s.left+e,width:i.width-e}},n:function(t,e,i){var s=this.originalSize,n=this.originalPosition;return{top:n.top+i,height:s.height-i}},s:function(t,e,i){return{height:this.originalSize.height+i}},se:function(e,i,s){return t.extend(this._change.s.apply(this,arguments),this._change.e.apply(this,[e,i,s]))},sw:function(e,i,s){return t.extend(this._change.s.apply(this,arguments),this._change.w.apply(this,[e,i,s]))},ne:function(e,i,s){return t.extend(this._change.n.apply(this,arguments),this._change.e.apply(this,[e,i,s]))},nw:function(e,i,s){return t.extend(this._change.n.apply(this,arguments),this._change.w.apply(this,[e,i,s]))}},_propagate:function(e,i){t.ui.plugin.call(this,e,[i,this.ui()]),"resize"!==e&&this._trigger(e,i,this.ui())},plugins:{},ui:function(){return{originalElement:this.originalElement,element:this.element,helper:this.helper,position:this.position,size:this.size,originalSize:this.originalSize,originalPosition:this.originalPosition}}}),t.ui.plugin.add("resizable","animate",{stop:function(e){var i=t(this).resizable("instance"),s=i.options,n=i._proportionallyResizeElements,o=n.length&&/textarea/i.test(n[0].nodeName),a=o&&i._hasScroll(n[0],"left")?0:i.sizeDiff.height,r=o?0:i.sizeDiff.width,h={width:i.size.width-r,height:i.size.height-a},l=parseFloat(i.element.css("left"))+(i.position.left-i.originalPosition.left)||null,c=parseFloat(i.element.css("top"))+(i.position.top-i.originalPosition.top)||null;i.element.animate(t.extend(h,c&&l?{top:c,left:l}:{}),{duration:s.animateDuration,easing:s.animateEasing,step:function(){var s={width:parseFloat(i.element.css("width")),height:parseFloat(i.element.css("height")),top:parseFloat(i.element.css("top")),left:parseFloat(i.element.css("left"))};n&&n.length&&t(n[0]).css({width:s.width,height:s.height}),i._updateCache(s),i._propagate("resize",e)}})}}),t.ui.plugin.add("resizable","containment",{start:function(){var e,i,s,n,o,a,r,h=t(this).resizable("instance"),l=h.options,c=h.element,u=l.containment,d=u instanceof t?u.get(0):/parent/.test(u)?c.parent().get(0):u;d&&(h.containerElement=t(d),/document/.test(u)||u===document?(h.containerOffset={left:0,top:0},h.containerPosition={left:0,top:0},h.parentData={element:t(document),left:0,top:0,width:t(document).width(),height:t(document).height()||document.body.parentNode.scrollHeight}):(e=t(d),i=[],t(["Top","Right","Left","Bottom"]).each(function(t,s){i[t]=h._num(e.css("padding"+s))}),h.containerOffset=e.offset(),h.containerPosition=e.position(),h.containerSize={height:e.innerHeight()-i[3],width:e.innerWidth()-i[1]},s=h.containerOffset,n=h.containerSize.height,o=h.containerSize.width,a=h._hasScroll(d,"left")?d.scrollWidth:o,r=h._hasScroll(d)?d.scrollHeight:n,h.parentData={element:d,left:s.left,top:s.top,width:a,height:r}))},resize:function(e){var i,s,n,o,a=t(this).resizable("instance"),r=a.options,h=a.containerOffset,l=a.position,c=a._aspectRatio||e.shiftKey,u={top:0,left:0},d=a.containerElement,p=!0;d[0]!==document&&/static/.test(d.css("position"))&&(u=h),l.left<(a._helper?h.left:0)&&(a.size.width=a.size.width+(a._helper?a.position.left-h.left:a.position.left-u.left),c&&(a.size.height=a.size.width/a.aspectRatio,p=!1),a.position.left=r.helper?h.left:0),l.top<(a._helper?h.top:0)&&(a.size.height=a.size.height+(a._helper?a.position.top-h.top:a.position.top),c&&(a.size.width=a.size.height*a.aspectRatio,p=!1),a.position.top=a._helper?h.top:0),n=a.containerElement.get(0)===a.element.parent().get(0),o=/relative|absolute/.test(a.containerElement.css("position")),n&&o?(a.offset.left=a.parentData.left+a.position.left,a.offset.top=a.parentData.top+a.position.top):(a.offset.left=a.element.offset().left,a.offset.top=a.element.offset().top),i=Math.abs(a.sizeDiff.width+(a._helper?a.offset.left-u.left:a.offset.left-h.left)),s=Math.abs(a.sizeDiff.height+(a._helper?a.offset.top-u.top:a.offset.top-h.top)),i+a.size.width>=a.parentData.width&&(a.size.width=a.parentData.width-i,c&&(a.size.height=a.size.width/a.aspectRatio,p=!1)),s+a.size.height>=a.parentData.height&&(a.size.height=a.parentData.height-s,c&&(a.size.width=a.size.height*a.aspectRatio,p=!1)),p||(a.position.left=a.prevPosition.left,a.position.top=a.prevPosition.top,a.size.width=a.prevSize.width,a.size.height=a.prevSize.height)},stop:function(){var e=t(this).resizable("instance"),i=e.options,s=e.containerOffset,n=e.containerPosition,o=e.containerElement,a=t(e.helper),r=a.offset(),h=a.outerWidth()-e.sizeDiff.width,l=a.outerHeight()-e.sizeDiff.height;e._helper&&!i.animate&&/relative/.test(o.css("position"))&&t(this).css({left:r.left-n.left-s.left,width:h,height:l}),e._helper&&!i.animate&&/static/.test(o.css("position"))&&t(this).css({left:r.left-n.left-s.left,width:h,height:l})}}),t.ui.plugin.add("resizable","alsoResize",{start:function(){var e=t(this).resizable("instance"),i=e.options;t(i.alsoResize).each(function(){var e=t(this);e.data("ui-resizable-alsoresize",{width:parseFloat(e.width()),height:parseFloat(e.height()),left:parseFloat(e.css("left")),top:parseFloat(e.css("top"))})})},resize:function(e,i){var s=t(this).resizable("instance"),n=s.options,o=s.originalSize,a=s.originalPosition,r={height:s.size.height-o.height||0,width:s.size.width-o.width||0,top:s.position.top-a.top||0,left:s.position.left-a.left||0};t(n.alsoResize).each(function(){var e=t(this),s=t(this).data("ui-resizable-alsoresize"),n={},o=e.parents(i.originalElement[0]).length?["width","height"]:["width","height","top","left"];t.each(o,function(t,e){var i=(s[e]||0)+(r[e]||0);i&&i>=0&&(n[e]=i||null)}),e.css(n)})},stop:function(){t(this).removeData("ui-resizable-alsoresize")}}),t.ui.plugin.add("resizable","ghost",{start:function(){var e=t(this).resizable("instance"),i=e.size;e.ghost=e.originalElement.clone(),e.ghost.css({opacity:.25,display:"block",position:"relative",height:i.height,width:i.width,margin:0,left:0,top:0}),e._addClass(e.ghost,"ui-resizable-ghost"),t.uiBackCompat!==!1&&"string"==typeof e.options.ghost&&e.ghost.addClass(this.options.ghost),e.ghost.appendTo(e.helper)},resize:function(){var e=t(this).resizable("instance");e.ghost&&e.ghost.css({position:"relative",height:e.size.height,width:e.size.width})},stop:function(){var e=t(this).resizable("instance");e.ghost&&e.helper&&e.helper.get(0).removeChild(e.ghost.get(0))}}),t.ui.plugin.add("resizable","grid",{resize:function(){var e,i=t(this).resizable("instance"),s=i.options,n=i.size,o=i.originalSize,a=i.originalPosition,r=i.axis,h="number"==typeof s.grid?[s.grid,s.grid]:s.grid,l=h[0]||1,c=h[1]||1,u=Math.round((n.width-o.width)/l)*l,d=Math.round((n.height-o.height)/c)*c,p=o.width+u,f=o.height+d,m=s.maxWidth&&p>s.maxWidth,g=s.maxHeight&&f>s.maxHeight,_=s.minWidth&&s.minWidth>p,v=s.minHeight&&s.minHeight>f;s.grid=h,_&&(p+=l),v&&(f+=c),m&&(p-=l),g&&(f-=c),/^(se|s|e)$/.test(r)?(i.size.width=p,i.size.height=f):/^(ne)$/.test(r)?(i.size.width=p,i.size.height=f,i.position.top=a.top-d):/^(sw)$/.test(r)?(i.size.width=p,i.size.height=f,i.position.left=a.left-u):((0>=f-c||0>=p-l)&&(e=i._getPaddingPlusBorderDimensions(this)),f-c>0?(i.size.height=f,i.position.top=a.top-d):(f=c-e.height,i.size.height=f,i.position.top=a.top+o.height-f),p-l>0?(i.size.width=p,i.position.left=a.left-u):(p=l-e.width,i.size.width=p,i.position.left=a.left+o.width-p))}}),t.ui.resizable});/** + * Copyright (c) 2007 Ariel Flesler - aflesler ○ gmail • com | https://github.com/flesler + * Licensed under MIT + * @author Ariel Flesler + * @version 2.1.2 + */ +;(function(f){"use strict";"function"===typeof define&&define.amd?define(["jquery"],f):"undefined"!==typeof module&&module.exports?module.exports=f(require("jquery")):f(jQuery)})(function($){"use strict";function n(a){return!a.nodeName||-1!==$.inArray(a.nodeName.toLowerCase(),["iframe","#document","html","body"])}function h(a){return $.isFunction(a)||$.isPlainObject(a)?a:{top:a,left:a}}var p=$.scrollTo=function(a,d,b){return $(window).scrollTo(a,d,b)};p.defaults={axis:"xy",duration:0,limit:!0};$.fn.scrollTo=function(a,d,b){"object"=== typeof d&&(b=d,d=0);"function"===typeof b&&(b={onAfter:b});"max"===a&&(a=9E9);b=$.extend({},p.defaults,b);d=d||b.duration;var u=b.queue&&1=f[g]?0:Math.min(f[g],n));!a&&1-1){targetElements.on(evt+EVENT_NAMESPACE,function elementToggle(event){$.powerTip.toggle(this,event)})}else{targetElements.on(evt+EVENT_NAMESPACE,function elementOpen(event){$.powerTip.show(this,event)})}});$.each(options.closeEvents,function(idx,evt){if($.inArray(evt,options.openEvents)<0){targetElements.on(evt+EVENT_NAMESPACE,function elementClose(event){$.powerTip.hide(this,!isMouseEvent(event))})}});targetElements.on("keydown"+EVENT_NAMESPACE,function elementKeyDown(event){if(event.keyCode===27){$.powerTip.hide(this,true)}})}return targetElements};$.fn.powerTip.defaults={fadeInTime:200,fadeOutTime:100,followMouse:false,popupId:"powerTip",popupClass:null,intentSensitivity:7,intentPollInterval:100,closeDelay:100,placement:"n",smartPlacement:false,offset:10,mouseOnToPopup:false,manual:false,openEvents:["mouseenter","focus"],closeEvents:["mouseleave","blur"]};$.fn.powerTip.smartPlacementLists={n:["n","ne","nw","s"],e:["e","ne","se","w","nw","sw","n","s","e"],s:["s","se","sw","n"],w:["w","nw","sw","e","ne","se","n","s","w"],nw:["nw","w","sw","n","s","se","nw"],ne:["ne","e","se","n","s","sw","ne"],sw:["sw","w","nw","s","n","ne","sw"],se:["se","e","ne","s","n","nw","se"],"nw-alt":["nw-alt","n","ne-alt","sw-alt","s","se-alt","w","e"],"ne-alt":["ne-alt","n","nw-alt","se-alt","s","sw-alt","e","w"],"sw-alt":["sw-alt","s","se-alt","nw-alt","n","ne-alt","w","e"],"se-alt":["se-alt","s","sw-alt","ne-alt","n","nw-alt","e","w"]};$.powerTip={show:function apiShowTip(element,event){if(isMouseEvent(event)){trackMouse(event);session.previousX=event.pageX;session.previousY=event.pageY;$(element).data(DATA_DISPLAYCONTROLLER).show()}else{$(element).first().data(DATA_DISPLAYCONTROLLER).show(true,true)}return element},reposition:function apiResetPosition(element){$(element).first().data(DATA_DISPLAYCONTROLLER).resetPosition();return element},hide:function apiCloseTip(element,immediate){var displayController;immediate=element?immediate:true;if(element){displayController=$(element).first().data(DATA_DISPLAYCONTROLLER)}else if(session.activeHover){displayController=session.activeHover.data(DATA_DISPLAYCONTROLLER)}if(displayController){displayController.hide(immediate)}return element},toggle:function apiToggle(element,event){if(session.activeHover&&session.activeHover.is(element)){$.powerTip.hide(element,!isMouseEvent(event))}else{$.powerTip.show(element,event)}return element}};$.powerTip.showTip=$.powerTip.show;$.powerTip.closeTip=$.powerTip.hide;function CSSCoordinates(){var me=this;me.top="auto";me.left="auto";me.right="auto";me.bottom="auto";me.set=function(property,value){if($.isNumeric(value)){me[property]=Math.round(value)}}}function DisplayController(element,options,tipController){var hoverTimer=null,myCloseDelay=null;function openTooltip(immediate,forceOpen){cancelTimer();if(!element.data(DATA_HASACTIVEHOVER)){if(!immediate){session.tipOpenImminent=true;hoverTimer=setTimeout(function intentDelay(){hoverTimer=null;checkForIntent()},options.intentPollInterval)}else{if(forceOpen){element.data(DATA_FORCEDOPEN,true)}closeAnyDelayed();tipController.showTip(element)}}else{cancelClose()}}function closeTooltip(disableDelay){if(myCloseDelay){myCloseDelay=session.closeDelayTimeout=clearTimeout(myCloseDelay);session.delayInProgress=false}cancelTimer();session.tipOpenImminent=false;if(element.data(DATA_HASACTIVEHOVER)){element.data(DATA_FORCEDOPEN,false);if(!disableDelay){session.delayInProgress=true;session.closeDelayTimeout=setTimeout(function closeDelay(){session.closeDelayTimeout=null;tipController.hideTip(element);session.delayInProgress=false;myCloseDelay=null},options.closeDelay);myCloseDelay=session.closeDelayTimeout}else{tipController.hideTip(element)}}}function checkForIntent(){var xDifference=Math.abs(session.previousX-session.currentX),yDifference=Math.abs(session.previousY-session.currentY),totalDifference=xDifference+yDifference;if(totalDifference",{id:options.popupId});if($body.length===0){$body=$("body")}$body.append(tipElement);session.tooltips=session.tooltips?session.tooltips.add(tipElement):tipElement}if(options.followMouse){if(!tipElement.data(DATA_HASMOUSEMOVE)){$document.on("mousemove"+EVENT_NAMESPACE,positionTipOnCursor);$window.on("scroll"+EVENT_NAMESPACE,positionTipOnCursor);tipElement.data(DATA_HASMOUSEMOVE,true)}}function beginShowTip(element){element.data(DATA_HASACTIVEHOVER,true);tipElement.queue(function queueTipInit(next){showTip(element);next()})}function showTip(element){var tipContent;if(!element.data(DATA_HASACTIVEHOVER)){return}if(session.isTipOpen){if(!session.isClosing){hideTip(session.activeHover)}tipElement.delay(100).queue(function queueTipAgain(next){showTip(element);next()});return}element.trigger("powerTipPreRender");tipContent=getTooltipContent(element);if(tipContent){tipElement.empty().append(tipContent)}else{return}element.trigger("powerTipRender");session.activeHover=element;session.isTipOpen=true;tipElement.data(DATA_MOUSEONTOTIP,options.mouseOnToPopup);tipElement.addClass(options.popupClass);if(!options.followMouse||element.data(DATA_FORCEDOPEN)){positionTipOnElement(element);session.isFixedTipOpen=true}else{positionTipOnCursor()}if(!element.data(DATA_FORCEDOPEN)&&!options.followMouse){$document.on("click"+EVENT_NAMESPACE,function documentClick(event){var target=event.target;if(target!==element[0]){if(options.mouseOnToPopup){if(target!==tipElement[0]&&!$.contains(tipElement[0],target)){$.powerTip.hide()}}else{$.powerTip.hide()}}})}if(options.mouseOnToPopup&&!options.manual){tipElement.on("mouseenter"+EVENT_NAMESPACE,function tipMouseEnter(){if(session.activeHover){session.activeHover.data(DATA_DISPLAYCONTROLLER).cancel()}});tipElement.on("mouseleave"+EVENT_NAMESPACE,function tipMouseLeave(){if(session.activeHover){session.activeHover.data(DATA_DISPLAYCONTROLLER).hide()}})}tipElement.fadeIn(options.fadeInTime,function fadeInCallback(){if(!session.desyncTimeout){session.desyncTimeout=setInterval(closeDesyncedTip,500)}element.trigger("powerTipOpen")})}function hideTip(element){session.isClosing=true;session.isTipOpen=false;session.desyncTimeout=clearInterval(session.desyncTimeout);element.data(DATA_HASACTIVEHOVER,false);element.data(DATA_FORCEDOPEN,false);$document.off("click"+EVENT_NAMESPACE);tipElement.off(EVENT_NAMESPACE);tipElement.fadeOut(options.fadeOutTime,function fadeOutCallback(){var coords=new CSSCoordinates;session.activeHover=null;session.isClosing=false;session.isFixedTipOpen=false;tipElement.removeClass();coords.set("top",session.currentY+options.offset);coords.set("left",session.currentX+options.offset);tipElement.css(coords);element.trigger("powerTipClose")})}function positionTipOnCursor(){var tipWidth,tipHeight,coords,collisions,collisionCount;if(!session.isFixedTipOpen&&(session.isTipOpen||session.tipOpenImminent&&tipElement.data(DATA_HASMOUSEMOVE))){tipWidth=tipElement.outerWidth();tipHeight=tipElement.outerHeight();coords=new CSSCoordinates;coords.set("top",session.currentY+options.offset);coords.set("left",session.currentX+options.offset);collisions=getViewportCollisions(coords,tipWidth,tipHeight);if(collisions!==Collision.none){collisionCount=countFlags(collisions);if(collisionCount===1){if(collisions===Collision.right){coords.set("left",session.scrollLeft+session.windowWidth-tipWidth)}else if(collisions===Collision.bottom){coords.set("top",session.scrollTop+session.windowHeight-tipHeight)}}else{coords.set("left",session.currentX-tipWidth-options.offset);coords.set("top",session.currentY-tipHeight-options.offset)}}tipElement.css(coords)}}function positionTipOnElement(element){var priorityList,finalPlacement;if(options.smartPlacement||options.followMouse&&element.data(DATA_FORCEDOPEN)){priorityList=$.fn.powerTip.smartPlacementLists[options.placement];$.each(priorityList,function(idx,pos){var collisions=getViewportCollisions(placeTooltip(element,pos),tipElement.outerWidth(),tipElement.outerHeight());finalPlacement=pos;return collisions!==Collision.none})}else{placeTooltip(element,options.placement);finalPlacement=options.placement}tipElement.removeClass("w nw sw e ne se n s w se-alt sw-alt ne-alt nw-alt");tipElement.addClass(finalPlacement)}function placeTooltip(element,placement){var iterationCount=0,tipWidth,tipHeight,coords=new CSSCoordinates;coords.set("top",0);coords.set("left",0);tipElement.css(coords);do{tipWidth=tipElement.outerWidth();tipHeight=tipElement.outerHeight();coords=placementCalculator.compute(element,placement,tipWidth,tipHeight,options.offset);tipElement.css(coords)}while(++iterationCount<=5&&(tipWidth!==tipElement.outerWidth()||tipHeight!==tipElement.outerHeight()));return coords}function closeDesyncedTip(){var isDesynced=false,hasDesyncableCloseEvent=$.grep(["mouseleave","mouseout","blur","focusout"],function(eventType){return $.inArray(eventType,options.closeEvents)!==-1}).length>0;if(session.isTipOpen&&!session.isClosing&&!session.delayInProgress&&hasDesyncableCloseEvent){if(session.activeHover.data(DATA_HASACTIVEHOVER)===false||session.activeHover.is(":disabled")){isDesynced=true}else if(!isMouseOver(session.activeHover)&&!session.activeHover.is(":focus")&&!session.activeHover.data(DATA_FORCEDOPEN)){if(tipElement.data(DATA_MOUSEONTOTIP)){if(!isMouseOver(tipElement)){isDesynced=true}}else{isDesynced=true}}if(isDesynced){hideTip(session.activeHover)}}}this.showTip=beginShowTip;this.hideTip=hideTip;this.resetPosition=positionTipOnElement}function isSvgElement(element){return Boolean(window.SVGElement&&element[0]instanceof SVGElement)}function isMouseEvent(event){return Boolean(event&&$.inArray(event.type,MOUSE_EVENTS)>-1&&typeof event.pageX==="number")}function initTracking(){if(!session.mouseTrackingActive){session.mouseTrackingActive=true;getViewportDimensions();$(getViewportDimensions);$document.on("mousemove"+EVENT_NAMESPACE,trackMouse);$window.on("resize"+EVENT_NAMESPACE,trackResize);$window.on("scroll"+EVENT_NAMESPACE,trackScroll)}}function getViewportDimensions(){session.scrollLeft=$window.scrollLeft();session.scrollTop=$window.scrollTop();session.windowWidth=$window.width();session.windowHeight=$window.height()}function trackResize(){session.windowWidth=$window.width();session.windowHeight=$window.height()}function trackScroll(){var x=$window.scrollLeft(),y=$window.scrollTop();if(x!==session.scrollLeft){session.currentX+=x-session.scrollLeft;session.scrollLeft=x}if(y!==session.scrollTop){session.currentY+=y-session.scrollTop;session.scrollTop=y}}function trackMouse(event){session.currentX=event.pageX;session.currentY=event.pageY}function isMouseOver(element){var elementPosition=element.offset(),elementBox=element[0].getBoundingClientRect(),elementWidth=elementBox.right-elementBox.left,elementHeight=elementBox.bottom-elementBox.top;return session.currentX>=elementPosition.left&&session.currentX<=elementPosition.left+elementWidth&&session.currentY>=elementPosition.top&&session.currentY<=elementPosition.top+elementHeight}function getTooltipContent(element){var tipText=element.data(DATA_POWERTIP),tipObject=element.data(DATA_POWERTIPJQ),tipTarget=element.data(DATA_POWERTIPTARGET),targetElement,content;if(tipText){if($.isFunction(tipText)){tipText=tipText.call(element[0])}content=tipText}else if(tipObject){if($.isFunction(tipObject)){tipObject=tipObject.call(element[0])}if(tipObject.length>0){content=tipObject.clone(true,true)}}else if(tipTarget){targetElement=$("#"+tipTarget);if(targetElement.length>0){content=targetElement.html()}}return content}function getViewportCollisions(coords,elementWidth,elementHeight){var viewportTop=session.scrollTop,viewportLeft=session.scrollLeft,viewportBottom=viewportTop+session.windowHeight,viewportRight=viewportLeft+session.windowWidth,collisions=Collision.none;if(coords.topviewportBottom||Math.abs(coords.bottom-session.windowHeight)>viewportBottom){collisions|=Collision.bottom}if(coords.leftviewportRight){collisions|=Collision.left}if(coords.left+elementWidth>viewportRight||coords.right1)){a.preventDefault();var c=a.originalEvent.changedTouches[0],d=document.createEvent("MouseEvents");d.initMouseEvent(b,!0,!0,window,1,c.screenX,c.screenY,c.clientX,c.clientY,!1,!1,!1,!1,0,null),a.target.dispatchEvent(d)}}if(a.support.touch="ontouchend"in document,a.support.touch){var e,b=a.ui.mouse.prototype,c=b._mouseInit,d=b._mouseDestroy;b._touchStart=function(a){var b=this;!e&&b._mouseCapture(a.originalEvent.changedTouches[0])&&(e=!0,b._touchMoved=!1,f(a,"mouseover"),f(a,"mousemove"),f(a,"mousedown"))},b._touchMove=function(a){e&&(this._touchMoved=!0,f(a,"mousemove"))},b._touchEnd=function(a){e&&(f(a,"mouseup"),f(a,"mouseout"),this._touchMoved||f(a,"click"),e=!1)},b._mouseInit=function(){var b=this;b.element.bind({touchstart:a.proxy(b,"_touchStart"),touchmove:a.proxy(b,"_touchMove"),touchend:a.proxy(b,"_touchEnd")}),c.call(b)},b._mouseDestroy=function(){var b=this;b.element.unbind({touchstart:a.proxy(b,"_touchStart"),touchmove:a.proxy(b,"_touchMove"),touchend:a.proxy(b,"_touchEnd")}),d.call(b)}}}(jQuery);/*! SmartMenus jQuery Plugin - v1.1.0 - September 17, 2017 + * http://www.smartmenus.org/ + * Copyright Vasil Dinkov, Vadikom Web Ltd. http://vadikom.com; Licensed MIT */(function(t){"function"==typeof define&&define.amd?define(["jquery"],t):"object"==typeof module&&"object"==typeof module.exports?module.exports=t(require("jquery")):t(jQuery)})(function($){function initMouseDetection(t){var e=".smartmenus_mouse";if(mouseDetectionEnabled||t)mouseDetectionEnabled&&t&&($(document).off(e),mouseDetectionEnabled=!1);else{var i=!0,s=null,o={mousemove:function(t){var e={x:t.pageX,y:t.pageY,timeStamp:(new Date).getTime()};if(s){var o=Math.abs(s.x-e.x),a=Math.abs(s.y-e.y);if((o>0||a>0)&&2>=o&&2>=a&&300>=e.timeStamp-s.timeStamp&&(mouse=!0,i)){var n=$(t.target).closest("a");n.is("a")&&$.each(menuTrees,function(){return $.contains(this.$root[0],n[0])?(this.itemEnter({currentTarget:n[0]}),!1):void 0}),i=!1}}s=e}};o[touchEvents?"touchstart":"pointerover pointermove pointerout MSPointerOver MSPointerMove MSPointerOut"]=function(t){isTouchEvent(t.originalEvent)&&(mouse=!1)},$(document).on(getEventsNS(o,e)),mouseDetectionEnabled=!0}}function isTouchEvent(t){return!/^(4|mouse)$/.test(t.pointerType)}function getEventsNS(t,e){e||(e="");var i={};for(var s in t)i[s.split(" ").join(e+" ")+e]=t[s];return i}var menuTrees=[],mouse=!1,touchEvents="ontouchstart"in window,mouseDetectionEnabled=!1,requestAnimationFrame=window.requestAnimationFrame||function(t){return setTimeout(t,1e3/60)},cancelAnimationFrame=window.cancelAnimationFrame||function(t){clearTimeout(t)},canAnimate=!!$.fn.animate;return $.SmartMenus=function(t,e){this.$root=$(t),this.opts=e,this.rootId="",this.accessIdPrefix="",this.$subArrow=null,this.activatedItems=[],this.visibleSubMenus=[],this.showTimeout=0,this.hideTimeout=0,this.scrollTimeout=0,this.clickActivated=!1,this.focusActivated=!1,this.zIndexInc=0,this.idInc=0,this.$firstLink=null,this.$firstSub=null,this.disabled=!1,this.$disableOverlay=null,this.$touchScrollingSub=null,this.cssTransforms3d="perspective"in t.style||"webkitPerspective"in t.style,this.wasCollapsible=!1,this.init()},$.extend($.SmartMenus,{hideAll:function(){$.each(menuTrees,function(){this.menuHideAll()})},destroy:function(){for(;menuTrees.length;)menuTrees[0].destroy();initMouseDetection(!0)},prototype:{init:function(t){var e=this;if(!t){menuTrees.push(this),this.rootId=((new Date).getTime()+Math.random()+"").replace(/\D/g,""),this.accessIdPrefix="sm-"+this.rootId+"-",this.$root.hasClass("sm-rtl")&&(this.opts.rightToLeftSubMenus=!0);var i=".smartmenus";this.$root.data("smartmenus",this).attr("data-smartmenus-id",this.rootId).dataSM("level",1).on(getEventsNS({"mouseover focusin":$.proxy(this.rootOver,this),"mouseout focusout":$.proxy(this.rootOut,this),keydown:$.proxy(this.rootKeyDown,this)},i)).on(getEventsNS({mouseenter:$.proxy(this.itemEnter,this),mouseleave:$.proxy(this.itemLeave,this),mousedown:$.proxy(this.itemDown,this),focus:$.proxy(this.itemFocus,this),blur:$.proxy(this.itemBlur,this),click:$.proxy(this.itemClick,this)},i),"a"),i+=this.rootId,this.opts.hideOnClick&&$(document).on(getEventsNS({touchstart:$.proxy(this.docTouchStart,this),touchmove:$.proxy(this.docTouchMove,this),touchend:$.proxy(this.docTouchEnd,this),click:$.proxy(this.docClick,this)},i)),$(window).on(getEventsNS({"resize orientationchange":$.proxy(this.winResize,this)},i)),this.opts.subIndicators&&(this.$subArrow=$("").addClass("sub-arrow"),this.opts.subIndicatorsText&&this.$subArrow.html(this.opts.subIndicatorsText)),initMouseDetection()}if(this.$firstSub=this.$root.find("ul").each(function(){e.menuInit($(this))}).eq(0),this.$firstLink=this.$root.find("a").eq(0),this.opts.markCurrentItem){var s=/(index|default)\.[^#\?\/]*/i,o=/#.*/,a=window.location.href.replace(s,""),n=a.replace(o,"");this.$root.find("a").each(function(){var t=this.href.replace(s,""),i=$(this);(t==a||t==n)&&(i.addClass("current"),e.opts.markCurrentTree&&i.parentsUntil("[data-smartmenus-id]","ul").each(function(){$(this).dataSM("parent-a").addClass("current")}))})}this.wasCollapsible=this.isCollapsible()},destroy:function(t){if(!t){var e=".smartmenus";this.$root.removeData("smartmenus").removeAttr("data-smartmenus-id").removeDataSM("level").off(e),e+=this.rootId,$(document).off(e),$(window).off(e),this.opts.subIndicators&&(this.$subArrow=null)}this.menuHideAll();var i=this;this.$root.find("ul").each(function(){var t=$(this);t.dataSM("scroll-arrows")&&t.dataSM("scroll-arrows").remove(),t.dataSM("shown-before")&&((i.opts.subMenusMinWidth||i.opts.subMenusMaxWidth)&&t.css({width:"",minWidth:"",maxWidth:""}).removeClass("sm-nowrap"),t.dataSM("scroll-arrows")&&t.dataSM("scroll-arrows").remove(),t.css({zIndex:"",top:"",left:"",marginLeft:"",marginTop:"",display:""})),0==(t.attr("id")||"").indexOf(i.accessIdPrefix)&&t.removeAttr("id")}).removeDataSM("in-mega").removeDataSM("shown-before").removeDataSM("scroll-arrows").removeDataSM("parent-a").removeDataSM("level").removeDataSM("beforefirstshowfired").removeAttr("role").removeAttr("aria-hidden").removeAttr("aria-labelledby").removeAttr("aria-expanded"),this.$root.find("a.has-submenu").each(function(){var t=$(this);0==t.attr("id").indexOf(i.accessIdPrefix)&&t.removeAttr("id")}).removeClass("has-submenu").removeDataSM("sub").removeAttr("aria-haspopup").removeAttr("aria-controls").removeAttr("aria-expanded").closest("li").removeDataSM("sub"),this.opts.subIndicators&&this.$root.find("span.sub-arrow").remove(),this.opts.markCurrentItem&&this.$root.find("a.current").removeClass("current"),t||(this.$root=null,this.$firstLink=null,this.$firstSub=null,this.$disableOverlay&&(this.$disableOverlay.remove(),this.$disableOverlay=null),menuTrees.splice($.inArray(this,menuTrees),1))},disable:function(t){if(!this.disabled){if(this.menuHideAll(),!t&&!this.opts.isPopup&&this.$root.is(":visible")){var e=this.$root.offset();this.$disableOverlay=$('
').css({position:"absolute",top:e.top,left:e.left,width:this.$root.outerWidth(),height:this.$root.outerHeight(),zIndex:this.getStartZIndex(!0),opacity:0}).appendTo(document.body)}this.disabled=!0}},docClick:function(t){return this.$touchScrollingSub?(this.$touchScrollingSub=null,void 0):((this.visibleSubMenus.length&&!$.contains(this.$root[0],t.target)||$(t.target).closest("a").length)&&this.menuHideAll(),void 0)},docTouchEnd:function(){if(this.lastTouch){if(!(!this.visibleSubMenus.length||void 0!==this.lastTouch.x2&&this.lastTouch.x1!=this.lastTouch.x2||void 0!==this.lastTouch.y2&&this.lastTouch.y1!=this.lastTouch.y2||this.lastTouch.target&&$.contains(this.$root[0],this.lastTouch.target))){this.hideTimeout&&(clearTimeout(this.hideTimeout),this.hideTimeout=0);var t=this;this.hideTimeout=setTimeout(function(){t.menuHideAll()},350)}this.lastTouch=null}},docTouchMove:function(t){if(this.lastTouch){var e=t.originalEvent.touches[0];this.lastTouch.x2=e.pageX,this.lastTouch.y2=e.pageY}},docTouchStart:function(t){var e=t.originalEvent.touches[0];this.lastTouch={x1:e.pageX,y1:e.pageY,target:e.target}},enable:function(){this.disabled&&(this.$disableOverlay&&(this.$disableOverlay.remove(),this.$disableOverlay=null),this.disabled=!1)},getClosestMenu:function(t){for(var e=$(t).closest("ul");e.dataSM("in-mega");)e=e.parent().closest("ul");return e[0]||null},getHeight:function(t){return this.getOffset(t,!0)},getOffset:function(t,e){var i;"none"==t.css("display")&&(i={position:t[0].style.position,visibility:t[0].style.visibility},t.css({position:"absolute",visibility:"hidden"}).show());var s=t[0].getBoundingClientRect&&t[0].getBoundingClientRect(),o=s&&(e?s.height||s.bottom-s.top:s.width||s.right-s.left);return o||0===o||(o=e?t[0].offsetHeight:t[0].offsetWidth),i&&t.hide().css(i),o},getStartZIndex:function(t){var e=parseInt(this[t?"$root":"$firstSub"].css("z-index"));return!t&&isNaN(e)&&(e=parseInt(this.$root.css("z-index"))),isNaN(e)?1:e},getTouchPoint:function(t){return t.touches&&t.touches[0]||t.changedTouches&&t.changedTouches[0]||t},getViewport:function(t){var e=t?"Height":"Width",i=document.documentElement["client"+e],s=window["inner"+e];return s&&(i=Math.min(i,s)),i},getViewportHeight:function(){return this.getViewport(!0)},getViewportWidth:function(){return this.getViewport()},getWidth:function(t){return this.getOffset(t)},handleEvents:function(){return!this.disabled&&this.isCSSOn()},handleItemEvents:function(t){return this.handleEvents()&&!this.isLinkInMegaMenu(t)},isCollapsible:function(){return"static"==this.$firstSub.css("position")},isCSSOn:function(){return"inline"!=this.$firstLink.css("display")},isFixed:function(){var t="fixed"==this.$root.css("position");return t||this.$root.parentsUntil("body").each(function(){return"fixed"==$(this).css("position")?(t=!0,!1):void 0}),t},isLinkInMegaMenu:function(t){return $(this.getClosestMenu(t[0])).hasClass("mega-menu")},isTouchMode:function(){return!mouse||this.opts.noMouseOver||this.isCollapsible()},itemActivate:function(t,e){var i=t.closest("ul"),s=i.dataSM("level");if(s>1&&(!this.activatedItems[s-2]||this.activatedItems[s-2][0]!=i.dataSM("parent-a")[0])){var o=this;$(i.parentsUntil("[data-smartmenus-id]","ul").get().reverse()).add(i).each(function(){o.itemActivate($(this).dataSM("parent-a"))})}if((!this.isCollapsible()||e)&&this.menuHideSubMenus(this.activatedItems[s-1]&&this.activatedItems[s-1][0]==t[0]?s:s-1),this.activatedItems[s-1]=t,this.$root.triggerHandler("activate.smapi",t[0])!==!1){var a=t.dataSM("sub");a&&(this.isTouchMode()||!this.opts.showOnClick||this.clickActivated)&&this.menuShow(a)}},itemBlur:function(t){var e=$(t.currentTarget);this.handleItemEvents(e)&&this.$root.triggerHandler("blur.smapi",e[0])},itemClick:function(t){var e=$(t.currentTarget);if(this.handleItemEvents(e)){if(this.$touchScrollingSub&&this.$touchScrollingSub[0]==e.closest("ul")[0])return this.$touchScrollingSub=null,t.stopPropagation(),!1;if(this.$root.triggerHandler("click.smapi",e[0])===!1)return!1;var i=$(t.target).is(".sub-arrow"),s=e.dataSM("sub"),o=s?2==s.dataSM("level"):!1,a=this.isCollapsible(),n=/toggle$/.test(this.opts.collapsibleBehavior),r=/link$/.test(this.opts.collapsibleBehavior),h=/^accordion/.test(this.opts.collapsibleBehavior);if(s&&!s.is(":visible")){if((!r||!a||i)&&(this.opts.showOnClick&&o&&(this.clickActivated=!0),this.itemActivate(e,h),s.is(":visible")))return this.focusActivated=!0,!1}else if(a&&(n||i))return this.itemActivate(e,h),this.menuHide(s),n&&(this.focusActivated=!1),!1;return this.opts.showOnClick&&o||e.hasClass("disabled")||this.$root.triggerHandler("select.smapi",e[0])===!1?!1:void 0}},itemDown:function(t){var e=$(t.currentTarget);this.handleItemEvents(e)&&e.dataSM("mousedown",!0)},itemEnter:function(t){var e=$(t.currentTarget);if(this.handleItemEvents(e)){if(!this.isTouchMode()){this.showTimeout&&(clearTimeout(this.showTimeout),this.showTimeout=0);var i=this;this.showTimeout=setTimeout(function(){i.itemActivate(e)},this.opts.showOnClick&&1==e.closest("ul").dataSM("level")?1:this.opts.showTimeout)}this.$root.triggerHandler("mouseenter.smapi",e[0])}},itemFocus:function(t){var e=$(t.currentTarget);this.handleItemEvents(e)&&(!this.focusActivated||this.isTouchMode()&&e.dataSM("mousedown")||this.activatedItems.length&&this.activatedItems[this.activatedItems.length-1][0]==e[0]||this.itemActivate(e,!0),this.$root.triggerHandler("focus.smapi",e[0]))},itemLeave:function(t){var e=$(t.currentTarget);this.handleItemEvents(e)&&(this.isTouchMode()||(e[0].blur(),this.showTimeout&&(clearTimeout(this.showTimeout),this.showTimeout=0)),e.removeDataSM("mousedown"),this.$root.triggerHandler("mouseleave.smapi",e[0]))},menuHide:function(t){if(this.$root.triggerHandler("beforehide.smapi",t[0])!==!1&&(canAnimate&&t.stop(!0,!0),"none"!=t.css("display"))){var e=function(){t.css("z-index","")};this.isCollapsible()?canAnimate&&this.opts.collapsibleHideFunction?this.opts.collapsibleHideFunction.call(this,t,e):t.hide(this.opts.collapsibleHideDuration,e):canAnimate&&this.opts.hideFunction?this.opts.hideFunction.call(this,t,e):t.hide(this.opts.hideDuration,e),t.dataSM("scroll")&&(this.menuScrollStop(t),t.css({"touch-action":"","-ms-touch-action":"","-webkit-transform":"",transform:""}).off(".smartmenus_scroll").removeDataSM("scroll").dataSM("scroll-arrows").hide()),t.dataSM("parent-a").removeClass("highlighted").attr("aria-expanded","false"),t.attr({"aria-expanded":"false","aria-hidden":"true"});var i=t.dataSM("level");this.activatedItems.splice(i-1,1),this.visibleSubMenus.splice($.inArray(t,this.visibleSubMenus),1),this.$root.triggerHandler("hide.smapi",t[0])}},menuHideAll:function(){this.showTimeout&&(clearTimeout(this.showTimeout),this.showTimeout=0);for(var t=this.opts.isPopup?1:0,e=this.visibleSubMenus.length-1;e>=t;e--)this.menuHide(this.visibleSubMenus[e]);this.opts.isPopup&&(canAnimate&&this.$root.stop(!0,!0),this.$root.is(":visible")&&(canAnimate&&this.opts.hideFunction?this.opts.hideFunction.call(this,this.$root):this.$root.hide(this.opts.hideDuration))),this.activatedItems=[],this.visibleSubMenus=[],this.clickActivated=!1,this.focusActivated=!1,this.zIndexInc=0,this.$root.triggerHandler("hideAll.smapi")},menuHideSubMenus:function(t){for(var e=this.activatedItems.length-1;e>=t;e--){var i=this.activatedItems[e].dataSM("sub");i&&this.menuHide(i)}},menuInit:function(t){if(!t.dataSM("in-mega")){t.hasClass("mega-menu")&&t.find("ul").dataSM("in-mega",!0);for(var e=2,i=t[0];(i=i.parentNode.parentNode)!=this.$root[0];)e++;var s=t.prevAll("a").eq(-1);s.length||(s=t.prevAll().find("a").eq(-1)),s.addClass("has-submenu").dataSM("sub",t),t.dataSM("parent-a",s).dataSM("level",e).parent().dataSM("sub",t);var o=s.attr("id")||this.accessIdPrefix+ ++this.idInc,a=t.attr("id")||this.accessIdPrefix+ ++this.idInc;s.attr({id:o,"aria-haspopup":"true","aria-controls":a,"aria-expanded":"false"}),t.attr({id:a,role:"group","aria-hidden":"true","aria-labelledby":o,"aria-expanded":"false"}),this.opts.subIndicators&&s[this.opts.subIndicatorsPos](this.$subArrow.clone())}},menuPosition:function(t){var e,i,s=t.dataSM("parent-a"),o=s.closest("li"),a=o.parent(),n=t.dataSM("level"),r=this.getWidth(t),h=this.getHeight(t),u=s.offset(),l=u.left,c=u.top,d=this.getWidth(s),m=this.getHeight(s),p=$(window),f=p.scrollLeft(),v=p.scrollTop(),b=this.getViewportWidth(),S=this.getViewportHeight(),g=a.parent().is("[data-sm-horizontal-sub]")||2==n&&!a.hasClass("sm-vertical"),M=this.opts.rightToLeftSubMenus&&!o.is("[data-sm-reverse]")||!this.opts.rightToLeftSubMenus&&o.is("[data-sm-reverse]"),w=2==n?this.opts.mainMenuSubOffsetX:this.opts.subMenusSubOffsetX,T=2==n?this.opts.mainMenuSubOffsetY:this.opts.subMenusSubOffsetY;if(g?(e=M?d-r-w:w,i=this.opts.bottomToTopSubMenus?-h-T:m+T):(e=M?w-r:d-w,i=this.opts.bottomToTopSubMenus?m-T-h:T),this.opts.keepInViewport){var y=l+e,I=c+i;if(M&&f>y?e=g?f-y+e:d-w:!M&&y+r>f+b&&(e=g?f+b-r-y+e:w-r),g||(S>h&&I+h>v+S?i+=v+S-h-I:(h>=S||v>I)&&(i+=v-I)),g&&(I+h>v+S+.49||v>I)||!g&&h>S+.49){var x=this;t.dataSM("scroll-arrows")||t.dataSM("scroll-arrows",$([$('')[0],$('')[0]]).on({mouseenter:function(){t.dataSM("scroll").up=$(this).hasClass("scroll-up"),x.menuScroll(t)},mouseleave:function(e){x.menuScrollStop(t),x.menuScrollOut(t,e)},"mousewheel DOMMouseScroll":function(t){t.preventDefault()}}).insertAfter(t));var A=".smartmenus_scroll";if(t.dataSM("scroll",{y:this.cssTransforms3d?0:i-m,step:1,itemH:m,subH:h,arrowDownH:this.getHeight(t.dataSM("scroll-arrows").eq(1))}).on(getEventsNS({mouseover:function(e){x.menuScrollOver(t,e)},mouseout:function(e){x.menuScrollOut(t,e)},"mousewheel DOMMouseScroll":function(e){x.menuScrollMousewheel(t,e)}},A)).dataSM("scroll-arrows").css({top:"auto",left:"0",marginLeft:e+(parseInt(t.css("border-left-width"))||0),width:r-(parseInt(t.css("border-left-width"))||0)-(parseInt(t.css("border-right-width"))||0),zIndex:t.css("z-index")}).eq(g&&this.opts.bottomToTopSubMenus?0:1).show(),this.isFixed()){var C={};C[touchEvents?"touchstart touchmove touchend":"pointerdown pointermove pointerup MSPointerDown MSPointerMove MSPointerUp"]=function(e){x.menuScrollTouch(t,e)},t.css({"touch-action":"none","-ms-touch-action":"none"}).on(getEventsNS(C,A))}}}t.css({top:"auto",left:"0",marginLeft:e,marginTop:i-m})},menuScroll:function(t,e,i){var s,o=t.dataSM("scroll"),a=t.dataSM("scroll-arrows"),n=o.up?o.upEnd:o.downEnd;if(!e&&o.momentum){if(o.momentum*=.92,s=o.momentum,.5>s)return this.menuScrollStop(t),void 0}else s=i||(e||!this.opts.scrollAccelerate?this.opts.scrollStep:Math.floor(o.step));var r=t.dataSM("level");if(this.activatedItems[r-1]&&this.activatedItems[r-1].dataSM("sub")&&this.activatedItems[r-1].dataSM("sub").is(":visible")&&this.menuHideSubMenus(r-1),o.y=o.up&&o.y>=n||!o.up&&n>=o.y?o.y:Math.abs(n-o.y)>s?o.y+(o.up?s:-s):n,t.css(this.cssTransforms3d?{"-webkit-transform":"translate3d(0, "+o.y+"px, 0)",transform:"translate3d(0, "+o.y+"px, 0)"}:{marginTop:o.y}),mouse&&(o.up&&o.y>o.downEnd||!o.up&&o.y0;t.dataSM("scroll-arrows").eq(i?0:1).is(":visible")&&(t.dataSM("scroll").up=i,this.menuScroll(t,!0))}e.preventDefault()},menuScrollOut:function(t,e){mouse&&(/^scroll-(up|down)/.test((e.relatedTarget||"").className)||(t[0]==e.relatedTarget||$.contains(t[0],e.relatedTarget))&&this.getClosestMenu(e.relatedTarget)==t[0]||t.dataSM("scroll-arrows").css("visibility","hidden"))},menuScrollOver:function(t,e){if(mouse&&!/^scroll-(up|down)/.test(e.target.className)&&this.getClosestMenu(e.target)==t[0]){this.menuScrollRefreshData(t);var i=t.dataSM("scroll"),s=$(window).scrollTop()-t.dataSM("parent-a").offset().top-i.itemH;t.dataSM("scroll-arrows").eq(0).css("margin-top",s).end().eq(1).css("margin-top",s+this.getViewportHeight()-i.arrowDownH).end().css("visibility","visible")}},menuScrollRefreshData:function(t){var e=t.dataSM("scroll"),i=$(window).scrollTop()-t.dataSM("parent-a").offset().top-e.itemH;this.cssTransforms3d&&(i=-(parseFloat(t.css("margin-top"))-i)),$.extend(e,{upEnd:i,downEnd:i+this.getViewportHeight()-e.subH})},menuScrollStop:function(t){return this.scrollTimeout?(cancelAnimationFrame(this.scrollTimeout),this.scrollTimeout=0,t.dataSM("scroll").step=1,!0):void 0},menuScrollTouch:function(t,e){if(e=e.originalEvent,isTouchEvent(e)){var i=this.getTouchPoint(e);if(this.getClosestMenu(i.target)==t[0]){var s=t.dataSM("scroll");if(/(start|down)$/i.test(e.type))this.menuScrollStop(t)?(e.preventDefault(),this.$touchScrollingSub=t):this.$touchScrollingSub=null,this.menuScrollRefreshData(t),$.extend(s,{touchStartY:i.pageY,touchStartTime:e.timeStamp});else if(/move$/i.test(e.type)){var o=void 0!==s.touchY?s.touchY:s.touchStartY;if(void 0!==o&&o!=i.pageY){this.$touchScrollingSub=t;var a=i.pageY>o;void 0!==s.up&&s.up!=a&&$.extend(s,{touchStartY:i.pageY,touchStartTime:e.timeStamp}),$.extend(s,{up:a,touchY:i.pageY}),this.menuScroll(t,!0,Math.abs(i.pageY-o))}e.preventDefault()}else void 0!==s.touchY&&((s.momentum=15*Math.pow(Math.abs(i.pageY-s.touchStartY)/(e.timeStamp-s.touchStartTime),2))&&(this.menuScrollStop(t),this.menuScroll(t),e.preventDefault()),delete s.touchY)}}},menuShow:function(t){if((t.dataSM("beforefirstshowfired")||(t.dataSM("beforefirstshowfired",!0),this.$root.triggerHandler("beforefirstshow.smapi",t[0])!==!1))&&this.$root.triggerHandler("beforeshow.smapi",t[0])!==!1&&(t.dataSM("shown-before",!0),canAnimate&&t.stop(!0,!0),!t.is(":visible"))){var e=t.dataSM("parent-a"),i=this.isCollapsible();if((this.opts.keepHighlighted||i)&&e.addClass("highlighted"),i)t.removeClass("sm-nowrap").css({zIndex:"",width:"auto",minWidth:"",maxWidth:"",top:"",left:"",marginLeft:"",marginTop:""});else{if(t.css("z-index",this.zIndexInc=(this.zIndexInc||this.getStartZIndex())+1),(this.opts.subMenusMinWidth||this.opts.subMenusMaxWidth)&&(t.css({width:"auto",minWidth:"",maxWidth:""}).addClass("sm-nowrap"),this.opts.subMenusMinWidth&&t.css("min-width",this.opts.subMenusMinWidth),this.opts.subMenusMaxWidth)){var s=this.getWidth(t);t.css("max-width",this.opts.subMenusMaxWidth),s>this.getWidth(t)&&t.removeClass("sm-nowrap").css("width",this.opts.subMenusMaxWidth)}this.menuPosition(t)}var o=function(){t.css("overflow","")};i?canAnimate&&this.opts.collapsibleShowFunction?this.opts.collapsibleShowFunction.call(this,t,o):t.show(this.opts.collapsibleShowDuration,o):canAnimate&&this.opts.showFunction?this.opts.showFunction.call(this,t,o):t.show(this.opts.showDuration,o),e.attr("aria-expanded","true"),t.attr({"aria-expanded":"true","aria-hidden":"false"}),this.visibleSubMenus.push(t),this.$root.triggerHandler("show.smapi",t[0])}},popupHide:function(t){this.hideTimeout&&(clearTimeout(this.hideTimeout),this.hideTimeout=0);var e=this;this.hideTimeout=setTimeout(function(){e.menuHideAll()},t?1:this.opts.hideTimeout)},popupShow:function(t,e){if(!this.opts.isPopup)return alert('SmartMenus jQuery Error:\n\nIf you want to show this menu via the "popupShow" method, set the isPopup:true option.'),void 0;if(this.hideTimeout&&(clearTimeout(this.hideTimeout),this.hideTimeout=0),this.$root.dataSM("shown-before",!0),canAnimate&&this.$root.stop(!0,!0),!this.$root.is(":visible")){this.$root.css({left:t,top:e});var i=this,s=function(){i.$root.css("overflow","")};canAnimate&&this.opts.showFunction?this.opts.showFunction.call(this,this.$root,s):this.$root.show(this.opts.showDuration,s),this.visibleSubMenus[0]=this.$root}},refresh:function(){this.destroy(!0),this.init(!0)},rootKeyDown:function(t){if(this.handleEvents())switch(t.keyCode){case 27:var e=this.activatedItems[0];if(e){this.menuHideAll(),e[0].focus();var i=e.dataSM("sub");i&&this.menuHide(i)}break;case 32:var s=$(t.target);if(s.is("a")&&this.handleItemEvents(s)){var i=s.dataSM("sub");i&&!i.is(":visible")&&(this.itemClick({currentTarget:t.target}),t.preventDefault())}}},rootOut:function(t){if(this.handleEvents()&&!this.isTouchMode()&&t.target!=this.$root[0]&&(this.hideTimeout&&(clearTimeout(this.hideTimeout),this.hideTimeout=0),!this.opts.showOnClick||!this.opts.hideOnClick)){var e=this;this.hideTimeout=setTimeout(function(){e.menuHideAll()},this.opts.hideTimeout)}},rootOver:function(t){this.handleEvents()&&!this.isTouchMode()&&t.target!=this.$root[0]&&this.hideTimeout&&(clearTimeout(this.hideTimeout),this.hideTimeout=0)},winResize:function(t){if(this.handleEvents()){if(!("onorientationchange"in window)||"orientationchange"==t.type){var e=this.isCollapsible();this.wasCollapsible&&e||(this.activatedItems.length&&this.activatedItems[this.activatedItems.length-1][0].blur(),this.menuHideAll()),this.wasCollapsible=e}}else if(this.$disableOverlay){var i=this.$root.offset();this.$disableOverlay.css({top:i.top,left:i.left,width:this.$root.outerWidth(),height:this.$root.outerHeight()})}}}}),$.fn.dataSM=function(t,e){return e?this.data(t+"_smartmenus",e):this.data(t+"_smartmenus")},$.fn.removeDataSM=function(t){return this.removeData(t+"_smartmenus")},$.fn.smartmenus=function(options){if("string"==typeof options){var args=arguments,method=options;return Array.prototype.shift.call(args),this.each(function(){var t=$(this).data("smartmenus");t&&t[method]&&t[method].apply(t,args)})}return this.each(function(){var dataOpts=$(this).data("sm-options")||null;if(dataOpts)try{dataOpts=eval("("+dataOpts+")")}catch(e){dataOpts=null,alert('ERROR\n\nSmartMenus jQuery init:\nInvalid "data-sm-options" attribute value syntax.')}new $.SmartMenus(this,$.extend({},$.fn.smartmenus.defaults,options,dataOpts))})},$.fn.smartmenus.defaults={isPopup:!1,mainMenuSubOffsetX:0,mainMenuSubOffsetY:0,subMenusSubOffsetX:0,subMenusSubOffsetY:0,subMenusMinWidth:"10em",subMenusMaxWidth:"20em",subIndicators:!0,subIndicatorsPos:"append",subIndicatorsText:"",scrollStep:30,scrollAccelerate:!0,showTimeout:250,hideTimeout:500,showDuration:0,showFunction:null,hideDuration:0,hideFunction:function(t,e){t.fadeOut(200,e)},collapsibleShowDuration:0,collapsibleShowFunction:function(t,e){t.slideDown(200,e)},collapsibleHideDuration:0,collapsibleHideFunction:function(t,e){t.slideUp(200,e)},showOnClick:!1,hideOnClick:!0,noMouseOver:!1,keepInViewport:!0,keepHighlighted:!0,markCurrentItem:!1,markCurrentTree:!0,rightToLeftSubMenus:!1,bottomToTopSubMenus:!1,collapsibleBehavior:"default"},$}); \ No newline at end of file diff --git a/doxygen/html/logo.png b/doxygen/html/logo.png new file mode 100644 index 0000000..b3c3189 Binary files /dev/null and b/doxygen/html/logo.png differ diff --git a/doxygen/html/main_8c.html b/doxygen/html/main_8c.html new file mode 100644 index 0000000..064cb70 --- /dev/null +++ b/doxygen/html/main_8c.html @@ -0,0 +1,265 @@ + + + + + + + +Tetrix: Riferimenti per il file src/main.c + + + + + + + + + +
+
+ + + + + + + +
+
Tetrix +  1.0.0 +
+
Tetrix by Davide Antonio Amodio, Luca Boffo, Alvise Favero
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+ +
+
Riferimenti per il file main.c
+
+
+
#include <stdio.h>
+#include <stdlib.h>
+#include <time.h>
+#include <ncurses.h>
+#include "../include/singleplayer.h"
+#include "../include/multiplayer.h"
+#include "../include/functions.h"
+#include "../include/constants.h"
+
+Grafo delle dipendenze di inclusione per main.c:
+
+
+ + + + + + + + + + + +
+
+ + + + + + + + + + + + + + + + + + + + + +

+Funzioni

void init_colors ()
 inizializziamo tutti i colori (é una funzione stub) Continua...
 
void init_main_screen ()
 inizializza la finestra main di ncurses con i nostri parametri (é una funzione stub) Continua...
 
void print_logo ()
 stampa il logo del gioco in ASCII art. Continua...
 
void print_menu ()
 
void print_credits ()
 stampa la finestra in basso con i nostri crediti. Continua...
 
void main_menu ()
 stampa e gestisce il menú principale. Continua...
 
int main ()
 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... Continua...
 
+

Documentazione delle funzioni

+ +

◆ init_colors()

+ +
+
+ + + + + + + +
void init_colors ()
+
+ +

inizializziamo tutti i colori (é una funzione stub)

+ +
+
+ +

◆ init_main_screen()

+ +
+
+ + + + + + + +
void init_main_screen ()
+
+ +

inizializza la finestra main di ncurses con i nostri parametri (é una funzione stub)

+ +
+
+ +

◆ main()

+ +
+
+ + + + + + + +
int main ()
+
+ +

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)

+
Restituisce
letteralmente ritorna come é andata, se non é 0 preoccupati :lol:
+ +
+
+ +

◆ main_menu()

+ +
+
+ + + + + + + +
void main_menu ()
+
+ +

stampa e gestisce il menú principale.

+ +
+
+ +

◆ print_credits()

+ +
+
+ + + + + + + +
void print_credits ()
+
+ +

stampa la finestra in basso con i nostri crediti.

+ +
+
+ +

◆ print_logo()

+ +
+
+ + + + + + + +
void print_logo ()
+
+ +

stampa il logo del gioco in ASCII art.

+ +
+
+ +

◆ print_menu()

+ +
+
+ + + + + + + +
void print_menu ()
+
+ +
+
+
+ + + + diff --git a/doxygen/html/main_8c__incl.md5 b/doxygen/html/main_8c__incl.md5 new file mode 100644 index 0000000..5eaa601 --- /dev/null +++ b/doxygen/html/main_8c__incl.md5 @@ -0,0 +1 @@ +2e379bd398ae741d39f07f33048da0c7 \ No newline at end of file diff --git a/doxygen/html/main_8c__incl.png b/doxygen/html/main_8c__incl.png new file mode 100644 index 0000000..db3a094 Binary files /dev/null and b/doxygen/html/main_8c__incl.png differ diff --git a/doxygen/html/menu.js b/doxygen/html/menu.js new file mode 100644 index 0000000..2fe2214 --- /dev/null +++ b/doxygen/html/menu.js @@ -0,0 +1,51 @@ +/* + @licstart The following is the entire license notice for the JavaScript code in this file. + + The MIT License (MIT) + + Copyright (C) 1997-2020 by Dimitri van Heesch + + Permission is hereby granted, free of charge, to any person obtaining a copy of this software + and associated documentation files (the "Software"), to deal in the Software without restriction, + including without limitation the rights to use, copy, modify, merge, publish, distribute, + sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in all copies or + substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING + BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, + DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + + @licend The above is the entire license notice for the JavaScript code in this file + */ +function initMenu(relPath,searchEnabled,serverSide,searchPage,search) { + function makeTree(data,relPath) { + var result=''; + if ('children' in data) { + result+=''; + } + return result; + } + + $('#main-nav').append(makeTree(menudata,relPath)); + $('#main-nav').children(':first').addClass('sm sm-dox').attr('id','main-menu'); + if (searchEnabled) { + if (serverSide) { + $('#main-menu').append('
  • '); + } else { + $('#main-menu').append('
  • '); + } + } + $('#main-menu').smartmenus(); +} +/* @license-end */ diff --git a/doxygen/html/menudata.js b/doxygen/html/menudata.js new file mode 100644 index 0000000..10c7fab --- /dev/null +++ b/doxygen/html/menudata.js @@ -0,0 +1,73 @@ +/* + @licstart The following is the entire license notice for the JavaScript code in this file. + + The MIT License (MIT) + + Copyright (C) 1997-2020 by Dimitri van Heesch + + Permission is hereby granted, free of charge, to any person obtaining a copy of this software + and associated documentation files (the "Software"), to deal in the Software without restriction, + including without limitation the rights to use, copy, modify, merge, publish, distribute, + sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in all copies or + substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING + BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, + DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + + @licend The above is the entire license notice for the JavaScript code in this file +*/ +var menudata={children:[ +{text:"Pagina Principale",url:"index.html"}, +{text:"Classi",url:"annotated.html",children:[ +{text:"Elenco dei tipi composti",url:"annotated.html"}, +{text:"Indice dei tipi composti",url:"classes.html"}, +{text:"Membri dei composti",url:"functions.html",children:[ +{text:"Tutto",url:"functions.html"}, +{text:"Variabili",url:"functions_vars.html"}]}]}, +{text:"File",url:"files.html",children:[ +{text:"Elenco dei file",url:"files.html"}, +{text:"Elementi dei file",url:"globals.html",children:[ +{text:"Tutto",url:"globals.html",children:[ +{text:"a",url:"globals.html#index_a"}, +{text:"b",url:"globals.html#index_b"}, +{text:"c",url:"globals.html#index_c"}, +{text:"d",url:"globals.html#index_d"}, +{text:"e",url:"globals.html#index_e"}, +{text:"f",url:"globals.html#index_f"}, +{text:"g",url:"globals.html#index_g"}, +{text:"i",url:"globals.html#index_i"}, +{text:"k",url:"globals.html#index_k"}, +{text:"l",url:"globals.html#index_l"}, +{text:"m",url:"globals.html#index_m"}, +{text:"n",url:"globals.html#index_n"}, +{text:"p",url:"globals.html#index_p"}, +{text:"r",url:"globals.html#index_r"}, +{text:"s",url:"globals.html#index_s"}, +{text:"t",url:"globals.html#index_t"}, +{text:"w",url:"globals.html#index_w"}]}, +{text:"Funzioni",url:"globals_func.html",children:[ +{text:"a",url:"globals_func.html#index_a"}, +{text:"b",url:"globals_func.html#index_b"}, +{text:"c",url:"globals_func.html#index_c"}, +{text:"d",url:"globals_func.html#index_d"}, +{text:"e",url:"globals_func.html#index_e"}, +{text:"f",url:"globals_func.html#index_f"}, +{text:"g",url:"globals_func.html#index_g"}, +{text:"i",url:"globals_func.html#index_i"}, +{text:"k",url:"globals_func.html#index_k"}, +{text:"l",url:"globals_func.html#index_l"}, +{text:"m",url:"globals_func.html#index_m"}, +{text:"n",url:"globals_func.html#index_n"}, +{text:"p",url:"globals_func.html#index_p"}, +{text:"r",url:"globals_func.html#index_r"}, +{text:"s",url:"globals_func.html#index_s"}, +{text:"w",url:"globals_func.html#index_w"}]}, +{text:"Variabili",url:"globals_vars.html"}, +{text:"Ridefinizioni di tipo (typedef)",url:"globals_type.html"}, +{text:"Definizioni",url:"globals_defs.html"}]}]}]} diff --git a/doxygen/html/multiplayer_8c.html b/doxygen/html/multiplayer_8c.html new file mode 100644 index 0000000..3cb8ee9 --- /dev/null +++ b/doxygen/html/multiplayer_8c.html @@ -0,0 +1,440 @@ + + + + + + + +Tetrix: Riferimenti per il file src/multiplayer.c + + + + + + + + + +
    +
    + + + + + + + +
    +
    Tetrix +  1.0.0 +
    +
    Tetrix by Davide Antonio Amodio, Luca Boffo, Alvise Favero
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    + +
    +
    Riferimenti per il file multiplayer.c
    +
    +
    +
    #include <ncurses.h>
    +#include <string.h>
    +#include <stdlib.h>
    +#include "../include/player.h"
    +#include "../include/gamefield.h"
    +#include "../include/tetrimino.h"
    +#include "../include/functions.h"
    +#include "../include/constants.h"
    +#include "../include/bot.h"
    +
    +Grafo delle dipendenze di inclusione per multiplayer.c:
    +
    +
    + + + + + + + + + + + + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + +

    +Funzioni

    void pvp_new_game ()
     Inizia la partita in PvP. Continua...
     
    void pvp_continue_game (player_t **players, gamefield_t **gameFields, tetrimini_pool_t *pool, pointboard_t *points)
     corpo principale del gioco che si alterna fra scelta blocco e drop dello stesso fra i giocatori controllando eventuali perdite, righe riempite ecc... Continua...
     
    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)
     gestisce la fine della partita e dealloca tutto ció che é stato usato Continua...
     
    void pve_new_game ()
     Inizia la partita in PvCPU. Continua...
     
    void pve_continue_game (player_t **players, gamefield_t **gameFields, tetrimini_pool_t *pool, pointboard_t *points, int difficulty)
     corpo principale del gioco che si alterna fra scelta blocco e drop dello stesso fra il giocatore e la CPU controllando eventuali perdite, righe riempite ecc... Continua...
     
    void pvp_instructions (char *nickname1, char *nickname2)
     stampa le istruzioni per la partita in pvp Continua...
     
    int select_difficulty ()
     Crea un menu per selezionare la difficoltà e restituisce il valore di errore del bot. Il suo errore consiste nella dimensione dell'array delle migliori soluzioni, da cui selezionerà casualmente la mossa. Più è grande l'array, meno è probabile che scelga la soluzione migliore. Continua...
     
    void pve_instructions (char *nickname)
     stampa le istruzioni per la partita in pvp Continua...
     
    +

    Documentazione delle funzioni

    + +

    ◆ pve_continue_game()

    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    void pve_continue_game (player_t ** players,
    gamefield_t ** gameFields,
    tetrimini_pool_tpool,
    pointboard_tpoints,
    int difficulty 
    )
    +
    + +

    corpo principale del gioco che si alterna fra scelta blocco e drop dello stesso fra il giocatore e la CPU controllando eventuali perdite, righe riempite ecc...

    +
    Parametri
    + + + + + + +
    [in]playersArray di puntatori ai giocatori.
    [in]gameFieldsArray di puntatoro ai campi da gioco dei giocatori.
    [in]poolLa pool usata in partita con i tetramini rimanenti.
    [in]pointsIl puntatore ai punteggii dei giocatori.
    [in]difficultyLa difficoltá del BOT.
    +
    +
    + +
    +
    + +

    ◆ pve_instructions()

    + +
    +
    + + + + + + + + +
    void pve_instructions (char * nickname)
    +
    + +

    stampa le istruzioni per la partita in pvp

    +
    Parametri
    + + +
    [in]nicknamepuntatore al nome del giocatore
    +
    +
    + +
    +
    + +

    ◆ pve_new_game()

    + +
    +
    + + + + + + + +
    void pve_new_game ()
    +
    + +

    Inizia la partita in PvCPU.

    + +
    +
    + +

    ◆ pvp_continue_game()

    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    void pvp_continue_game (player_t ** players,
    gamefield_t ** gameFields,
    tetrimini_pool_tpool,
    pointboard_tpoints 
    )
    +
    + +

    corpo principale del gioco che si alterna fra scelta blocco e drop dello stesso fra i giocatori controllando eventuali perdite, righe riempite ecc...

    +
    Parametri
    + + + + + +
    [in]playersArray di puntatori ai giocatori.
    [in]gameFieldsArray di puntatoro ai campi da gioco dei giocatori.
    [in]poolLa pool usata in partita con i tetramini rimanenti.
    [in]pointsIl puntatore ai punteggii dei giocatori.
    +
    +
    + +
    +
    + +

    ◆ pvp_end_game()

    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    void pvp_end_game (int win_flag,
    gamefield_t ** gameFields,
    tetrimini_pool_tpool,
    pointboard_tpoints,
    player_t ** players,
    unsigned int start_time,
    int * moves 
    )
    +
    + +

    gestisce la fine della partita e dealloca tutto ció che é stato usato

    +
    Parametri
    + + + + + + + + +
    [in]win_flagvalore che segna chi ha vinto la partita
    [in]gameFieldsArray di puntatori ai campi da gioco dei giocatori.
    [in]poolLa pool usata in partita con i tetramini rimanenti. (serve per deallocarla)
    [in]pointsIl puntatore ai punteggi dei giocatori.
    [in]playersArray di puntatori ai giocatori.
    [in]start_timetimestamp di inizio della partita.
    [in]movespuntatore ad array di int contenente per ciascun giocatore il numero di mosse effettuate.
    +
    +
    + +
    +
    + +

    ◆ pvp_instructions()

    + +
    +
    + + + + + + + + + + + + + + + + + + +
    void pvp_instructions (char * nickname1,
    char * nickname2 
    )
    +
    + +

    stampa le istruzioni per la partita in pvp

    +
    Parametri
    + + + +
    [in]nickname1puntatore al nome del primo giocatore
    [in]nickname2puntatore al nome del secondo giocatore
    +
    +
    + +
    +
    + +

    ◆ pvp_new_game()

    + +
    +
    + + + + + + + +
    void pvp_new_game ()
    +
    + +

    Inizia la partita in PvP.

    + +
    +
    + +

    ◆ select_difficulty()

    + +
    +
    + + + + + + + +
    int select_difficulty ()
    +
    + +

    Crea un menu per selezionare la difficoltà e restituisce il valore di errore del bot. Il suo errore consiste nella dimensione dell'array delle migliori soluzioni, da cui selezionerà casualmente la mossa. Più è grande l'array, meno è probabile che scelga la soluzione migliore.

    +
    Restituisce
    L'errore del bot.
    + +
    +
    +
    + + + + diff --git a/doxygen/html/multiplayer_8c__incl.md5 b/doxygen/html/multiplayer_8c__incl.md5 new file mode 100644 index 0000000..3a80422 --- /dev/null +++ b/doxygen/html/multiplayer_8c__incl.md5 @@ -0,0 +1 @@ +f5ebf3596bee8715aa6682bab1f4b229 \ No newline at end of file diff --git a/doxygen/html/multiplayer_8c__incl.png b/doxygen/html/multiplayer_8c__incl.png new file mode 100644 index 0000000..f225612 Binary files /dev/null and b/doxygen/html/multiplayer_8c__incl.png differ diff --git a/doxygen/html/nav_f.png b/doxygen/html/nav_f.png new file mode 100644 index 0000000..72a58a5 Binary files /dev/null and b/doxygen/html/nav_f.png differ diff --git a/doxygen/html/nav_g.png b/doxygen/html/nav_g.png new file mode 100644 index 0000000..2093a23 Binary files /dev/null and b/doxygen/html/nav_g.png differ diff --git a/doxygen/html/nav_h.png b/doxygen/html/nav_h.png new file mode 100644 index 0000000..33389b1 Binary files /dev/null and b/doxygen/html/nav_h.png differ diff --git a/doxygen/html/open.png b/doxygen/html/open.png new file mode 100644 index 0000000..30f75c7 Binary files /dev/null and b/doxygen/html/open.png differ diff --git a/doxygen/html/player_8c.html b/doxygen/html/player_8c.html new file mode 100644 index 0000000..da21da3 --- /dev/null +++ b/doxygen/html/player_8c.html @@ -0,0 +1,492 @@ + + + + + + + +Tetrix: Riferimenti per il file src/player.c + + + + + + + + + +
    +
    + + + + + + + +
    +
    Tetrix +  1.0.0 +
    +
    Tetrix by Davide Antonio Amodio, Luca Boffo, Alvise Favero
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    + +
    +
    Riferimenti per il file player.c
    +
    +
    +
    #include <ncurses.h>
    +#include <malloc.h>
    +#include <string.h>
    +#include "../include/constants.h"
    +
    +Grafo delle dipendenze di inclusione per player.c:
    +
    +
    + + + + + + + +
    +
    + + + + + + +

    +Composti

    struct  Player
     
    struct  PointBoard
     struct della tabella dei punti, contiene la finestra di ncurses e il/i puntatore/i al/ai player. Continua...
     
    + + + + + + +

    +Ridefinizioni di tipo (typedef)

    typedef struct Player player_t
     
    typedef struct PointBoard pointboard_t
     struct della tabella dei punti, contiene la finestra di ncurses e il/i puntatore/i al/ai player. Continua...
     
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

    +Funzioni

    player_tinitialize_player (char *nick)
     Istanzia uno struct giocatore e lo inizializza con il nickname passato e con cursore e punti a 0. Continua...
     
    void free_player (player_t *p)
     free del player. Continua...
     
    void refresh_pointboard (pointboard_t *board)
     ricarica la pointboard Continua...
     
    pointboard_tinitialize_pointboard (int y, int x, player_t *player_1, player_t *player_2)
     Inizializza una finestra che tiene traccia dei punti di ogni giocatore. Viene posizionata con l'angolo in alto a sinistra sulle coordinate specificate. Continua...
     
    void free_pointboard (pointboard_t *p)
     free della pointboard. Continua...
     
    WINDOW * get_pointboard_win (pointboard_t *p)
     metodo getter per ricevere la finestra ncurses della finestra di punti. Continua...
     
    void player_add_points (player_t *p, pointboard_t *board, int points)
     aggiunge punti al giocatore. Continua...
     
    char * get_player_nick (player_t *p)
     ritorna il nickname di un player. Continua...
     
    unsigned int get_player_points (player_t *p)
     ritorna i punti di un player. Continua...
     
    int get_points (int deletedRows)
     Restituisce il numero di punti corrispondenti alle righe riempite. Continua...
     
    +

    Documentazione delle ridefinizioni di tipo (typedef)

    + +

    ◆ player_t

    + +
    +
    + + + + +
    typedef struct Player player_t
    +
    + +
    +
    + +

    ◆ pointboard_t

    + +
    +
    + + + + +
    typedef struct PointBoard pointboard_t
    +
    + +

    struct della tabella dei punti, contiene la finestra di ncurses e il/i puntatore/i al/ai player.

    + +
    +
    +

    Documentazione delle funzioni

    + +

    ◆ free_player()

    + +
    +
    + + + + + + + + +
    void free_player (player_tp)
    +
    + +

    free del player.

    +
    Parametri
    + + +
    [in]pil player.
    +
    +
    + +
    +
    + +

    ◆ free_pointboard()

    + +
    +
    + + + + + + + + +
    void free_pointboard (pointboard_tp)
    +
    + +

    free della pointboard.

    +
    Parametri
    + + +
    [in]pLa pointboard.
    +
    +
    + +
    +
    + +

    ◆ get_player_nick()

    + +
    +
    + + + + + + + + +
    char* get_player_nick (player_tp)
    +
    + +

    ritorna il nickname di un player.

    +
    Parametri
    + + +
    [in]pStruct del giocatore.
    +
    +
    +
    Restituisce
    nickname stringa con il nickname del giocatore.
    + +
    +
    + +

    ◆ get_player_points()

    + +
    +
    + + + + + + + + +
    unsigned int get_player_points (player_tp)
    +
    + +

    ritorna i punti di un player.

    +
    Parametri
    + + +
    [in]pStruct del giocatore.
    +
    +
    +
    Restituisce
    points punti del giocatore.
    + +
    +
    + +

    ◆ get_pointboard_win()

    + +
    +
    + + + + + + + + +
    WINDOW* get_pointboard_win (pointboard_tp)
    +
    + +

    metodo getter per ricevere la finestra ncurses della finestra di punti.

    +
    Parametri
    + + +
    [in]ppuntatore alla struct della pointboard.
    +
    +
    +
    Restituisce
    win la finestra di ncurses del campo da gioco.
    + +
    +
    + +

    ◆ get_points()

    + +
    +
    + + + + + + + + +
    int get_points (int deletedRows)
    +
    + +

    Restituisce il numero di punti corrispondenti alle righe riempite.

    +
    Parametri
    + + +
    [in]deletedRowsLe righe riempite.
    +
    +
    +
    Restituisce
    I punti.
    + +
    +
    + +

    ◆ initialize_player()

    + +
    +
    + + + + + + + + +
    player_t* initialize_player (char * nick)
    +
    + +

    Istanzia uno struct giocatore e lo inizializza con il nickname passato e con cursore e punti a 0.

    +
    Parametri
    + + +
    [in]nickIl nome del giocatore.
    +
    +
    +
    Restituisce
    p Lo struct giocatore istanziato.
    + +
    +
    + +

    ◆ initialize_pointboard()

    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    pointboard_t* initialize_pointboard (int y,
    int x,
    player_tplayer_1,
    player_tplayer_2 
    )
    +
    + +

    Inizializza una finestra che tiene traccia dei punti di ogni giocatore. Viene posizionata con l'angolo in alto a sinistra sulle coordinate specificate.

    +
    Parametri
    + + + + + +
    [in]yL'asse y in cui posizionare la point board.
    [in]xL'asse x in cui posizionare la point board.
    [in]player_1Il giocatore 1.
    [in]player_2Il giocatore 2. In caso di giocatore singolo deve essere NULL.
    +
    +
    +
    Restituisce
    pointboard_t La point board inizializzata.
    + +
    +
    + +

    ◆ player_add_points()

    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + +
    void player_add_points (player_tp,
    pointboard_tboard,
    int points 
    )
    +
    + +

    aggiunge punti al giocatore.

    +
    Parametri
    + + + + +
    [in]pStruct del giocatore.
    [in]boardStruct della tabella dei punti.
    [in]pointsPunti da aggiungere.
    +
    +
    + +
    +
    + +

    ◆ refresh_pointboard()

    + +
    +
    + + + + + + + + +
    void refresh_pointboard (pointboard_tboard)
    +
    + +

    ricarica la pointboard

    +
    Parametri
    + + +
    [in]boardLa pointboard da ricaricare.
    +
    +
    + +
    +
    +
    + + + + diff --git a/doxygen/html/player_8c__incl.md5 b/doxygen/html/player_8c__incl.md5 new file mode 100644 index 0000000..e10b46f --- /dev/null +++ b/doxygen/html/player_8c__incl.md5 @@ -0,0 +1 @@ +515d61d2877b4d14f52184bdaba77c73 \ No newline at end of file diff --git a/doxygen/html/player_8c__incl.png b/doxygen/html/player_8c__incl.png new file mode 100644 index 0000000..8a0be07 Binary files /dev/null and b/doxygen/html/player_8c__incl.png differ diff --git a/doxygen/html/search/all_0.html b/doxygen/html/search/all_0.html new file mode 100644 index 0000000..8d1ba30 --- /dev/null +++ b/doxygen/html/search/all_0.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Caricamento in corso...
    +
    + +
    Ricerca in corso...
    +
    Nessun risultato
    + +
    + + diff --git a/doxygen/html/search/all_0.js b/doxygen/html/search/all_0.js new file mode 100644 index 0000000..f830925 --- /dev/null +++ b/doxygen/html/search/all_0.js @@ -0,0 +1,9 @@ +var searchData= +[ + ['add_5ftetrimino_5ffrom_5fpool_0',['add_tetrimino_from_pool',['../tetrimino_8c.html#ae62d6f2c6861dc72bf09d0f4b16646b0',1,'tetrimino.c']]], + ['add_5ftetrimino_5fto_5ffield_1',['add_tetrimino_to_field',['../gamefield_8c.html#a67a11e444f724efccb602b10db356866',1,'gamefield.c']]], + ['add_5ftetrimino_5fto_5fgamefield_2',['add_tetrimino_to_gamefield',['../gamefield_8c.html#a83c9ef65386319cf06e30033a5fc6c83',1,'gamefield.c']]], + ['are_5ftet_5fequal_3',['are_tet_equal',['../tetrimino_8c.html#ac5cf6efd450c7b69fbb06f6a20a6f779',1,'tetrimino.c']]], + ['art_5fgame_5fover_4',['ART_GAME_OVER',['../constants_8c.html#a7a0d0206e173acb869d5cdc53d15cfe4',1,'constants.c']]], + ['art_5flogo_5',['ART_LOGO',['../constants_8c.html#aa528716657af1ddb536d6e59ba31743c',1,'constants.c']]] +]; diff --git a/doxygen/html/search/all_1.html b/doxygen/html/search/all_1.html new file mode 100644 index 0000000..2eb01ce --- /dev/null +++ b/doxygen/html/search/all_1.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Caricamento in corso...
    +
    + +
    Ricerca in corso...
    +
    Nessun risultato
    + +
    + + diff --git a/doxygen/html/search/all_1.js b/doxygen/html/search/all_1.js new file mode 100644 index 0000000..6ae39e5 --- /dev/null +++ b/doxygen/html/search/all_1.js @@ -0,0 +1,5 @@ +var searchData= +[ + ['blank_5fcells_6',['blank_cells',['../functions_8c.html#a3a5f938f4f9b4f760f3c10ad83d52b72',1,'functions.c']]], + ['bot_2ec_7',['bot.c',['../bot_8c.html',1,'']]] +]; diff --git a/doxygen/html/search/all_10.html b/doxygen/html/search/all_10.html new file mode 100644 index 0000000..92e415a --- /dev/null +++ b/doxygen/html/search/all_10.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Caricamento in corso...
    +
    + +
    Ricerca in corso...
    +
    Nessun risultato
    + +
    + + diff --git a/doxygen/html/search/all_10.js b/doxygen/html/search/all_10.js new file mode 100644 index 0000000..8715ca2 --- /dev/null +++ b/doxygen/html/search/all_10.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['values_137',['values',['../structTetrimino.html#a082e818a1c54c22e38982f2d9d91c105',1,'Tetrimino']]] +]; diff --git a/doxygen/html/search/all_11.html b/doxygen/html/search/all_11.html new file mode 100644 index 0000000..e787cb3 --- /dev/null +++ b/doxygen/html/search/all_11.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Caricamento in corso...
    +
    + +
    Ricerca in corso...
    +
    Nessun risultato
    + +
    + + diff --git a/doxygen/html/search/all_11.js b/doxygen/html/search/all_11.js new file mode 100644 index 0000000..1291253 --- /dev/null +++ b/doxygen/html/search/all_11.js @@ -0,0 +1,5 @@ +var searchData= +[ + ['win_138',['win',['../structGameField.html#a6418953d5b7628f69e17588838c59082',1,'GameField::win()'],['../structPointBoard.html#a32f69dccfa00b957bbd9506c9a21a73e',1,'PointBoard::win()'],['../structTetriminiPool.html#a3a7d968487a873a6427c34e6162a2d7f',1,'TetriminiPool::win()']]], + ['wprint_5fwith_5fdelay_139',['wprint_with_delay',['../functions_8c.html#acd05e28a06191e00d567509aefc2e6b2',1,'functions.c']]] +]; diff --git a/doxygen/html/search/all_2.html b/doxygen/html/search/all_2.html new file mode 100644 index 0000000..fed6575 --- /dev/null +++ b/doxygen/html/search/all_2.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Caricamento in corso...
    +
    + +
    Ricerca in corso...
    +
    Nessun risultato
    + +
    + + diff --git a/doxygen/html/search/all_2.js b/doxygen/html/search/all_2.js new file mode 100644 index 0000000..a3f71b3 --- /dev/null +++ b/doxygen/html/search/all_2.js @@ -0,0 +1,13 @@ +var searchData= +[ + ['calculate_5fscore_8',['calculate_score',['../bot_8c.html#af1f9847c36f2d28992c1aeec1e0d0124',1,'bot.c']]], + ['check_5ffield_9',['check_field',['../gamefield_8c.html#a77bf733aed6daadcad423c53267a185c',1,'gamefield.c']]], + ['choose_5fstrategy_10',['choose_strategy',['../bot_8c.html#aeee954dc9c077bf79206dd6adc7c12d5',1,'bot.c']]], + ['clear_5ftop_11',['clear_top',['../gamefield_8c.html#a1d7e07c024f849ed99c32a404e208205',1,'gamefield.c']]], + ['clone_5ffield_12',['clone_field',['../gamefield_8c.html#a8816471ebde80e7ae7648f24d14628f5',1,'gamefield.c']]], + ['cols_13',['cols',['../structTetrimino.html#ab4c71bb75a4c24cece4caf7518e54f98',1,'Tetrimino']]], + ['compare_5ffields_14',['compare_fields',['../functions_8c.html#aba3f65615a485d6d9d6b5123fd044eed',1,'functions.c']]], + ['constants_2ec_15',['constants.c',['../constants_8c.html',1,'']]], + ['constants_5fc_16',['CONSTANTS_C',['../constants_8c.html#ab143aaf593ab8bb709f4da31ee844e4a',1,'constants.c']]], + ['cursor_17',['cursor',['../structStrategy.html#a0a99fe73a3eeab4361e231fc2f803639',1,'Strategy']]] +]; diff --git a/doxygen/html/search/all_3.html b/doxygen/html/search/all_3.html new file mode 100644 index 0000000..2193e40 --- /dev/null +++ b/doxygen/html/search/all_3.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Caricamento in corso...
    +
    + +
    Ricerca in corso...
    +
    Nessun risultato
    + +
    + + diff --git a/doxygen/html/search/all_3.js b/doxygen/html/search/all_3.js new file mode 100644 index 0000000..140f8a6 --- /dev/null +++ b/doxygen/html/search/all_3.js @@ -0,0 +1,5 @@ +var searchData= +[ + ['delay_18',['delay',['../functions_8c.html#a6a546a532625256f814fafe73f901ad9',1,'functions.c']]], + ['draw_5fcursor_19',['draw_cursor',['../gamefield_8c.html#a016c346c90ad609858e9c4fe71ba1a30',1,'gamefield.c']]] +]; diff --git a/doxygen/html/search/all_4.html b/doxygen/html/search/all_4.html new file mode 100644 index 0000000..61fbd61 --- /dev/null +++ b/doxygen/html/search/all_4.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Caricamento in corso...
    +
    + +
    Ricerca in corso...
    +
    Nessun risultato
    + +
    + + diff --git a/doxygen/html/search/all_4.js b/doxygen/html/search/all_4.js new file mode 100644 index 0000000..eaab191 --- /dev/null +++ b/doxygen/html/search/all_4.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['end_5fgame_20',['end_game',['../singleplayer_8c.html#a917dffd1f9e92514b029649201df79fe',1,'singleplayer.c']]] +]; diff --git a/doxygen/html/search/all_5.html b/doxygen/html/search/all_5.html new file mode 100644 index 0000000..fce4c80 --- /dev/null +++ b/doxygen/html/search/all_5.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Caricamento in corso...
    +
    + +
    Ricerca in corso...
    +
    Nessun risultato
    + +
    + + diff --git a/doxygen/html/search/all_5.js b/doxygen/html/search/all_5.js new file mode 100644 index 0000000..bbf002f --- /dev/null +++ b/doxygen/html/search/all_5.js @@ -0,0 +1,13 @@ +var searchData= +[ + ['field_21',['field',['../structStrategy.html#ae87ec2fd0e852be895bea0c38940ab0b',1,'Strategy::field()'],['../structGameField.html#a781130b9360b6587e643206ccf2941df',1,'GameField::field()']]], + ['flip_5fvalues_22',['flip_values',['../gamefield_8c.html#a2e7375a66c65e77646b63db474635eeb',1,'gamefield.c']]], + ['flip_5fvalues_5fin_5frow_23',['flip_values_in_row',['../gamefield_8c.html#adf10c073b190134923207a5871a9809c',1,'gamefield.c']]], + ['form_24',['form',['../functions_8c.html#aee7b9fd8e7a94d7dfd62ffcb7e82570f',1,'functions.c']]], + ['free_5fgamefield_25',['free_gamefield',['../gamefield_8c.html#abfb0772a6365658ab0b88acb32b97f80',1,'gamefield.c']]], + ['free_5fplayer_26',['free_player',['../player_8c.html#a83b575c805cff5723c0f1b218934a479',1,'player.c']]], + ['free_5fpointboard_27',['free_pointboard',['../player_8c.html#aad98f75b691e908467b81cfa4f50394d',1,'player.c']]], + ['free_5fpool_28',['free_pool',['../tetrimino_8c.html#a18a9358b2ccf347d46e375f3e92147c5',1,'tetrimino.c']]], + ['free_5ftetrimino_29',['free_tetrimino',['../tetrimino_8c.html#a3311448078a900a696614a1345455730',1,'tetrimino.c']]], + ['functions_2ec_30',['functions.c',['../functions_8c.html',1,'']]] +]; diff --git a/doxygen/html/search/all_6.html b/doxygen/html/search/all_6.html new file mode 100644 index 0000000..9fa3b72 --- /dev/null +++ b/doxygen/html/search/all_6.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Caricamento in corso...
    +
    + +
    Ricerca in corso...
    +
    Nessun risultato
    + +
    + + diff --git a/doxygen/html/search/all_6.js b/doxygen/html/search/all_6.js new file mode 100644 index 0000000..38d536c --- /dev/null +++ b/doxygen/html/search/all_6.js @@ -0,0 +1,27 @@ +var searchData= +[ + ['gamefield_31',['GameField',['../structGameField.html',1,'']]], + ['gamefield_2ec_32',['gamefield.c',['../gamefield_8c.html',1,'']]], + ['gamefield_5ft_33',['gamefield_t',['../gamefield_8c.html#a6048f95a643402d01e0ede801448198a',1,'gamefield.c']]], + ['get_5fascii_5fart_5fcols_34',['get_ASCII_art_cols',['../functions_8c.html#a0a32b7ef19af15d7a94704b5d6ffc6dd',1,'functions.c']]], + ['get_5fascii_5fart_5frows_35',['get_ASCII_art_rows',['../functions_8c.html#a3c756f08e3d50e98c77157872d0b67c6',1,'functions.c']]], + ['get_5ffirst_5ffree_5frow_36',['get_first_free_row',['../gamefield_8c.html#a1c3e2c3a634c4ff2d185960ba9ab1941',1,'gamefield.c']]], + ['get_5ffirst_5ffree_5frow_5fin_5ffield_37',['get_first_free_row_in_field',['../gamefield_8c.html#adf50972d64a4f1bcd7aaaa5410ebeb24',1,'gamefield.c']]], + ['get_5fgamefield_38',['get_gamefield',['../gamefield_8c.html#a76852cf02d820b1a4405821eb504b660',1,'gamefield.c']]], + ['get_5fgamefield_5fwin_39',['get_gamefield_win',['../gamefield_8c.html#a9f2757da752cfa98de0c477d035d222d',1,'gamefield.c']]], + ['get_5fplayer_5fnick_40',['get_player_nick',['../player_8c.html#af2dd530b0d8702fbd846e2754522ff22',1,'player.c']]], + ['get_5fplayer_5fpoints_41',['get_player_points',['../player_8c.html#a700c5470b96d6cd83f82745ca74981b2',1,'player.c']]], + ['get_5fpointboard_5fwin_42',['get_pointboard_win',['../player_8c.html#a6e8f7ab5154c9d335ee740f7e2d23d28',1,'player.c']]], + ['get_5fpoints_43',['get_points',['../player_8c.html#aaefe972e916ce0cb7a95bcbe7cd855ae',1,'player.c']]], + ['get_5fpool_5fwin_44',['get_pool_win',['../tetrimino_8c.html#ae42d71f193c4a5e08130b2ba1c6601c7',1,'tetrimino.c']]], + ['get_5fremaining_5ftetriminos_45',['get_remaining_tetriminos',['../tetrimino_8c.html#a9a20ed2c57b693528963d07d2cb20f0b',1,'tetrimino.c']]], + ['get_5fstrategy_5fcursor_46',['get_strategy_cursor',['../bot_8c.html#a1a5dc71a9e367f2316d7f3360fbbe332',1,'bot.c']]], + ['get_5fstrategy_5ftet_5frotation_47',['get_strategy_tet_rotation',['../bot_8c.html#a918677fc8aae2873a3be3b4dfa0a52cb',1,'bot.c']]], + ['get_5fstrategy_5ftet_5ftype_48',['get_strategy_tet_type',['../bot_8c.html#a3e76728fa125c9b5028448bb0aff6209',1,'bot.c']]], + ['get_5ftet_5fcolor_49',['get_tet_color',['../tetrimino_8c.html#a11a3762dd4fda202339da0db5504b6f8',1,'tetrimino.c']]], + ['get_5ftet_5fcols_50',['get_tet_cols',['../tetrimino_8c.html#af051201343001a1176e783bcc191dc73',1,'tetrimino.c']]], + ['get_5ftet_5frows_51',['get_tet_rows',['../tetrimino_8c.html#a5a9cee155fb528f61673a57e3909c3c0',1,'tetrimino.c']]], + ['get_5ftet_5ftype_52',['get_tet_type',['../tetrimino_8c.html#aa714506df9c70df9941dc825dcd43292',1,'tetrimino.c']]], + ['get_5ftet_5fvalues_53',['get_tet_values',['../tetrimino_8c.html#aa436fdf416f645272a14b86168df57de',1,'tetrimino.c']]], + ['get_5ftetrimino_54',['get_tetrimino',['../tetrimino_8c.html#aca18ec1086e88441dc0fe05bf9cc6530',1,'tetrimino.c']]] +]; diff --git a/doxygen/html/search/all_7.html b/doxygen/html/search/all_7.html new file mode 100644 index 0000000..9d824f9 --- /dev/null +++ b/doxygen/html/search/all_7.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Caricamento in corso...
    +
    + +
    Ricerca in corso...
    +
    Nessun risultato
    + +
    + + diff --git a/doxygen/html/search/all_7.js b/doxygen/html/search/all_7.js new file mode 100644 index 0000000..81c4195 --- /dev/null +++ b/doxygen/html/search/all_7.js @@ -0,0 +1,15 @@ +var searchData= +[ + ['init_5fcolors_55',['init_colors',['../main_8c.html#a63790e021bbe6eb4ee0525657d2c8b3f',1,'main.c']]], + ['init_5fmain_5fscreen_56',['init_main_screen',['../main_8c.html#a41b1be9518c4382e524f8248e6dacf07',1,'main.c']]], + ['initialize_5fgamefield_57',['initialize_gamefield',['../gamefield_8c.html#ae52961e906027f24e3770ee8fbed0275',1,'gamefield.c']]], + ['initialize_5fplayer_58',['initialize_player',['../player_8c.html#abe71310071a7e8feeaa5df98c38c006a',1,'player.c']]], + ['initialize_5fpointboard_59',['initialize_pointboard',['../player_8c.html#afe4c670e3af2bf7cf257310b8f1a55a4',1,'player.c']]], + ['initialize_5fpool_60',['initialize_pool',['../tetrimino_8c.html#aa9768773d2f4a879dfbfc4b557e42e16',1,'tetrimino.c']]], + ['instructions_61',['instructions',['../singleplayer_8c.html#aca06f56b37becd914127b7d8e2479b9d',1,'singleplayer.c']]], + ['is_5ffield_5ftop_5foccupied_62',['is_field_top_occupied',['../gamefield_8c.html#aa96825c95023bf04f6e30ee1f22f2a4a',1,'gamefield.c']]], + ['is_5fgamefield_5ftop_5foccupied_63',['is_gamefield_top_occupied',['../gamefield_8c.html#a6f900206350a55e6bfe45852379d557d',1,'gamefield.c']]], + ['is_5frow_5fempty_64',['is_row_empty',['../gamefield_8c.html#a841bbdf803eeda4958b8f0796641b7c8',1,'gamefield.c']]], + ['is_5frow_5ffull_65',['is_row_full',['../gamefield_8c.html#a930ad3ba14a5ee15ef2470e556bf7834',1,'gamefield.c']]], + ['is_5fsafe_5fto_5fplace_5ftet_66',['is_safe_to_place_tet',['../tetrimino_8c.html#aa97c94bc92173b8007be838c012a98d7',1,'tetrimino.c']]] +]; diff --git a/doxygen/html/search/all_8.html b/doxygen/html/search/all_8.html new file mode 100644 index 0000000..7fbb841 --- /dev/null +++ b/doxygen/html/search/all_8.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Caricamento in corso...
    +
    + +
    Ricerca in corso...
    +
    Nessun risultato
    + +
    + + diff --git a/doxygen/html/search/all_8.js b/doxygen/html/search/all_8.js new file mode 100644 index 0000000..c77e0b7 --- /dev/null +++ b/doxygen/html/search/all_8.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['kill_5fwin_67',['kill_win',['../functions_8c.html#a8ef27e7849ed7c5a254209c4411e9d2c',1,'functions.c']]] +]; diff --git a/doxygen/html/search/all_9.html b/doxygen/html/search/all_9.html new file mode 100644 index 0000000..17015c9 --- /dev/null +++ b/doxygen/html/search/all_9.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Caricamento in corso...
    +
    + +
    Ricerca in corso...
    +
    Nessun risultato
    + +
    + + diff --git a/doxygen/html/search/all_9.js b/doxygen/html/search/all_9.js new file mode 100644 index 0000000..3e93919 --- /dev/null +++ b/doxygen/html/search/all_9.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['linear_5frotate_68',['linear_rotate',['../tetrimino_8c.html#a6768a014d0e3a91bbe43db89acb56b17',1,'tetrimino.c']]] +]; diff --git a/doxygen/html/search/all_a.html b/doxygen/html/search/all_a.html new file mode 100644 index 0000000..9c288b1 --- /dev/null +++ b/doxygen/html/search/all_a.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Caricamento in corso...
    +
    + +
    Ricerca in corso...
    +
    Nessun risultato
    + +
    + + diff --git a/doxygen/html/search/all_a.js b/doxygen/html/search/all_a.js new file mode 100644 index 0000000..97d8493 --- /dev/null +++ b/doxygen/html/search/all_a.js @@ -0,0 +1,9 @@ +var searchData= +[ + ['main_69',['main',['../main_8c.html#ae66f6b31b5ad750f1fe042a706a4e3d4',1,'main(): main.c'],['../tester_8c.html#ae66f6b31b5ad750f1fe042a706a4e3d4',1,'main(): tester.c']]], + ['main_2ec_70',['main.c',['../main_8c.html',1,'']]], + ['main_5fmenu_71',['main_menu',['../main_8c.html#a885611589f6294afada89fe88362e863',1,'main.c']]], + ['manage_5fdrop_72',['manage_drop',['../gamefield_8c.html#aa9777a39f3b668311caa35e070a31a03',1,'gamefield.c']]], + ['multiplayer_2ec_73',['multiplayer.c',['../multiplayer_8c.html',1,'']]], + ['mvwprintwrows_74',['mvwprintwrows',['../functions_8c.html#a21fc81a6b2e575af36d296c57ba28220',1,'functions.c']]] +]; diff --git a/doxygen/html/search/all_b.html b/doxygen/html/search/all_b.html new file mode 100644 index 0000000..6a0ce04 --- /dev/null +++ b/doxygen/html/search/all_b.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Caricamento in corso...
    +
    + +
    Ricerca in corso...
    +
    Nessun risultato
    + +
    + + diff --git a/doxygen/html/search/all_b.js b/doxygen/html/search/all_b.js new file mode 100644 index 0000000..dc28e1d --- /dev/null +++ b/doxygen/html/search/all_b.js @@ -0,0 +1,7 @@ +var searchData= +[ + ['new_5fgame_5fsingle_75',['new_game_single',['../singleplayer_8c.html#afd3a73cea32cc9ce8f198c1b7e51388b',1,'singleplayer.c']]], + ['next_5fcircular_76',['next_circular',['../functions_8c.html#ac0614c3c6113c781062cc926c502fdb0',1,'functions.c']]], + ['nickname_77',['nickname',['../structPlayer.html#adb388a66560cbda4033b4003b5553e06',1,'Player']]], + ['no_5ftetriminos_5fleft_78',['no_tetriminos_left',['../tetrimino_8c.html#a2d600579ba00a08b54ac144f23c3d700',1,'tetrimino.c']]] +]; diff --git a/doxygen/html/search/all_c.html b/doxygen/html/search/all_c.html new file mode 100644 index 0000000..56987d6 --- /dev/null +++ b/doxygen/html/search/all_c.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Caricamento in corso...
    +
    + +
    Ricerca in corso...
    +
    Nessun risultato
    + +
    + + diff --git a/doxygen/html/search/all_c.js b/doxygen/html/search/all_c.js new file mode 100644 index 0000000..c2e6add --- /dev/null +++ b/doxygen/html/search/all_c.js @@ -0,0 +1,28 @@ +var searchData= +[ + ['player_79',['Player',['../structPlayer.html',1,'']]], + ['player_2ec_80',['player.c',['../player_8c.html',1,'']]], + ['player_5f1_81',['player_1',['../structPointBoard.html#ad54af4ad6024caa7f494e0e521dba70c',1,'PointBoard']]], + ['player_5f2_82',['player_2',['../structPointBoard.html#a19714dc33a1d1972ff93c52824b2a4a4',1,'PointBoard']]], + ['player_5fadd_5fpoints_83',['player_add_points',['../player_8c.html#a709a98604b0784327e505ac3cf3be68c',1,'player.c']]], + ['player_5ft_84',['player_t',['../player_8c.html#a41ac1fc93ec4c54167ff5d56474950d9',1,'player.c']]], + ['pointboard_85',['PointBoard',['../structPointBoard.html',1,'']]], + ['pointboard_5ft_86',['pointboard_t',['../player_8c.html#af6e7f5332e7bf0fe769ba30f9a699deb',1,'player.c']]], + ['points_87',['points',['../structPlayer.html#a6907670263a13bfd1e57188e170cdff8',1,'Player']]], + ['prev_5fcircular_88',['prev_circular',['../functions_8c.html#a1e8bd4580a6bff3efeddd8a4b541713d',1,'functions.c']]], + ['print_5fcredits_89',['print_credits',['../main_8c.html#a83d01093591f862edbc8dd1351b6de1c',1,'main.c']]], + ['print_5flogo_90',['print_logo',['../main_8c.html#ae8c09f3eb701bb9ef3587d6704a1d277',1,'main.c']]], + ['print_5fmenu_91',['print_menu',['../main_8c.html#ae91d4cbee2dab64187187499dd0eecd4',1,'main.c']]], + ['print_5fmenu_5fstyle_92',['print_menu_style',['../tetrimino_8c.html#a65a81faa216d0c7f95e110656649811c',1,'tetrimino.c']]], + ['print_5ftetrimino_93',['print_tetrimino',['../tetrimino_8c.html#a67a87e51f6d8f929277a533905c12b3c',1,'tetrimino.c']]], + ['pve_5fcontinue_5fgame_94',['pve_continue_game',['../multiplayer_8c.html#ae9848fceb73c869fdb668d967f1122fd',1,'multiplayer.c']]], + ['pve_5finstructions_95',['pve_instructions',['../multiplayer_8c.html#a7f42a9a692f45fd669f9867d145beb5b',1,'multiplayer.c']]], + ['pve_5fnew_5fgame_96',['pve_new_game',['../multiplayer_8c.html#a8bb59a22f947e17a7766abca47c94ee8',1,'multiplayer.c']]], + ['pve_5fwelcome_5ftxt_97',['PVE_WELCOME_TXT',['../constants_8c.html#a1ea3df83da84c5a10e0b0e1850ddc215',1,'constants.c']]], + ['pvp_5fcontinue_5fgame_98',['pvp_continue_game',['../multiplayer_8c.html#a848a70037718eb818b5fc64aae00e8fd',1,'multiplayer.c']]], + ['pvp_5fend_5fgame_99',['pvp_end_game',['../multiplayer_8c.html#a99e773c3947a93434dcd1a169487d76f',1,'multiplayer.c']]], + ['pvp_5fend_5ftxt_100',['PVP_END_TXT',['../constants_8c.html#aeb28a0ac9a3355c636f6da06d74585f4',1,'constants.c']]], + ['pvp_5finstructions_101',['pvp_instructions',['../multiplayer_8c.html#a16528058f7d23b7dfae0e5a1894509e1',1,'multiplayer.c']]], + ['pvp_5fnew_5fgame_102',['pvp_new_game',['../multiplayer_8c.html#a93c73fb49705c0600cfd9448971d0806',1,'multiplayer.c']]], + ['pvp_5fwelcome_5ftxt_103',['PVP_WELCOME_TXT',['../constants_8c.html#a2119313d692bd8c6588641f54a132a61',1,'constants.c']]] +]; diff --git a/doxygen/html/search/all_d.html b/doxygen/html/search/all_d.html new file mode 100644 index 0000000..b9a5093 --- /dev/null +++ b/doxygen/html/search/all_d.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Caricamento in corso...
    +
    + +
    Ricerca in corso...
    +
    Nessun risultato
    + +
    + + diff --git a/doxygen/html/search/all_d.js b/doxygen/html/search/all_d.js new file mode 100644 index 0000000..309bcb1 --- /dev/null +++ b/doxygen/html/search/all_d.js @@ -0,0 +1,12 @@ +var searchData= +[ + ['random_5fcolor_104',['random_color',['../functions_8c.html#ac7132f875351b34e875f66af3984d28c',1,'functions.c']]], + ['refresh_5fgamefield_105',['refresh_gamefield',['../gamefield_8c.html#ac52aeab109c7e818b6e0332afbf9c903',1,'gamefield.c']]], + ['refresh_5fpointboard_106',['refresh_pointboard',['../player_8c.html#aa28d445f1d4cf0ba9b32a68ba94a219d',1,'player.c']]], + ['refresh_5fpool_107',['refresh_pool',['../tetrimino_8c.html#a80b535d33369ab13f4fae4d793df2749',1,'tetrimino.c']]], + ['refresh_5fselector_108',['refresh_selector',['../gamefield_8c.html#aa5697bc18535696c06ec1148688e5ddc',1,'gamefield.c']]], + ['rem_5ftetriminos_109',['rem_tetriminos',['../structTetriminiPool.html#a1b9340580aebe7e26ed9900ed58a4f5c',1,'TetriminiPool']]], + ['remove_5ftetrimino_5ffrom_5fpool_110',['remove_tetrimino_from_pool',['../tetrimino_8c.html#a292112df25f9bb748a1c339713a11d6c',1,'tetrimino.c']]], + ['rotation_111',['rotation',['../structStrategy.html#a7768ccc88635a99d50958437de9dba1b',1,'Strategy']]], + ['rows_112',['rows',['../structTetrimino.html#aa5e086bd8702b97c6dc480e30e17a4d2',1,'Tetrimino']]] +]; diff --git a/doxygen/html/search/all_e.html b/doxygen/html/search/all_e.html new file mode 100644 index 0000000..ca00673 --- /dev/null +++ b/doxygen/html/search/all_e.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Caricamento in corso...
    +
    + +
    Ricerca in corso...
    +
    Nessun risultato
    + +
    + + diff --git a/doxygen/html/search/all_e.js b/doxygen/html/search/all_e.js new file mode 100644 index 0000000..90a4f34 --- /dev/null +++ b/doxygen/html/search/all_e.js @@ -0,0 +1,18 @@ +var searchData= +[ + ['safe_5frotate_5ftetrimino_113',['safe_rotate_tetrimino',['../tetrimino_8c.html#a4d6ea235792204ccc42b18c10ed0328e',1,'tetrimino.c']]], + ['score_114',['score',['../structStrategy.html#aed5f42af6ce46d6b4c8dbaedbba2b788',1,'Strategy']]], + ['select_5fdifficulty_115',['select_difficulty',['../multiplayer_8c.html#a4c1e77194ced6e25ccd1eabad98b11c8',1,'multiplayer.c']]], + ['select_5ftetrimino_116',['select_tetrimino',['../tetrimino_8c.html#a4ad34dc6c6dc1873d3bcd400bfe59329',1,'tetrimino.c']]], + ['set_5fstrategy_117',['set_strategy',['../bot_8c.html#a60717dd1f3bb484dfc1b13dd498b17eb',1,'bot.c']]], + ['single_5fcontinue_5fgame_118',['single_continue_game',['../singleplayer_8c.html#a613b6a54ae12e92d55432c859c41ab18',1,'singleplayer.c']]], + ['single_5fend_5ftxt_119',['SINGLE_END_TXT',['../constants_8c.html#ac80a0fc07983dec9e1ed70661ee6285b',1,'constants.c']]], + ['single_5fwelcome_5ftxt_120',['SINGLE_WELCOME_TXT',['../constants_8c.html#a49db09a7ce1b92a55f76dbadcbdb7b16',1,'constants.c']]], + ['singleplayer_2ec_121',['singleplayer.c',['../singleplayer_8c.html',1,'']]], + ['strategy_122',['Strategy',['../structStrategy.html',1,'']]], + ['strategy_5fcreate_123',['strategy_create',['../bot_8c.html#a87841843a152ca8b0c712f56a122ad79',1,'bot.c']]], + ['strategy_5fdestroy_124',['strategy_destroy',['../bot_8c.html#af2e860e7a30cae75d912813526336b71',1,'bot.c']]], + ['strategy_5ft_125',['strategy_t',['../bot_8c.html#ab9250013b70f0064bd63e8ea002f9a52',1,'bot.c']]], + ['strategy_5fupdate_126',['strategy_update',['../bot_8c.html#ac67bfb8b0b61b708302652ebf8d78f84',1,'bot.c']]], + ['swap_5fcolor_127',['swap_color',['../functions_8c.html#a395adeb77e0ee2e2de1b305272e65c10',1,'functions.c']]] +]; diff --git a/doxygen/html/search/all_f.html b/doxygen/html/search/all_f.html new file mode 100644 index 0000000..f40f2a3 --- /dev/null +++ b/doxygen/html/search/all_f.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Caricamento in corso...
    +
    + +
    Ricerca in corso...
    +
    Nessun risultato
    + +
    + + diff --git a/doxygen/html/search/all_f.js b/doxygen/html/search/all_f.js new file mode 100644 index 0000000..3f3c8b9 --- /dev/null +++ b/doxygen/html/search/all_f.js @@ -0,0 +1,12 @@ +var searchData= +[ + ['tester_2ec_128',['tester.c',['../tester_8c.html',1,'']]], + ['tet_129',['tet',['../structStrategy.html#a1b1e7ace0114fcb433970b09eb6f3b81',1,'Strategy']]], + ['tetrimini_5fpool_5ft_130',['tetrimini_pool_t',['../tetrimino_8c.html#a7f26275d80ade431dd5960eeb81dbf34',1,'tetrimino.c']]], + ['tetriminipool_131',['TetriminiPool',['../structTetriminiPool.html',1,'']]], + ['tetrimino_132',['Tetrimino',['../structTetrimino.html',1,'']]], + ['tetrimino_2ec_133',['tetrimino.c',['../tetrimino_8c.html',1,'']]], + ['tetrimino_5ft_134',['tetrimino_t',['../tetrimino_8c.html#ade3bae78a1873d82e116422adcf445f9',1,'tetrimino.c']]], + ['total_5ftetriminos_135',['total_tetriminos',['../structTetriminiPool.html#a86e70ae5e2672da3e5dc951fd9bc7516',1,'TetriminiPool']]], + ['type_136',['type',['../structTetrimino.html#ad40711c1e62ab324d01b36af214f646c',1,'Tetrimino']]] +]; diff --git a/doxygen/html/search/classes_0.html b/doxygen/html/search/classes_0.html new file mode 100644 index 0000000..a9135e7 --- /dev/null +++ b/doxygen/html/search/classes_0.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Caricamento in corso...
    +
    + +
    Ricerca in corso...
    +
    Nessun risultato
    + +
    + + diff --git a/doxygen/html/search/classes_0.js b/doxygen/html/search/classes_0.js new file mode 100644 index 0000000..9a07902 --- /dev/null +++ b/doxygen/html/search/classes_0.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['gamefield_140',['GameField',['../structGameField.html',1,'']]] +]; diff --git a/doxygen/html/search/classes_1.html b/doxygen/html/search/classes_1.html new file mode 100644 index 0000000..3a33d79 --- /dev/null +++ b/doxygen/html/search/classes_1.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Caricamento in corso...
    +
    + +
    Ricerca in corso...
    +
    Nessun risultato
    + +
    + + diff --git a/doxygen/html/search/classes_1.js b/doxygen/html/search/classes_1.js new file mode 100644 index 0000000..238f700 --- /dev/null +++ b/doxygen/html/search/classes_1.js @@ -0,0 +1,5 @@ +var searchData= +[ + ['player_141',['Player',['../structPlayer.html',1,'']]], + ['pointboard_142',['PointBoard',['../structPointBoard.html',1,'']]] +]; diff --git a/doxygen/html/search/classes_2.html b/doxygen/html/search/classes_2.html new file mode 100644 index 0000000..ee3b873 --- /dev/null +++ b/doxygen/html/search/classes_2.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Caricamento in corso...
    +
    + +
    Ricerca in corso...
    +
    Nessun risultato
    + +
    + + diff --git a/doxygen/html/search/classes_2.js b/doxygen/html/search/classes_2.js new file mode 100644 index 0000000..030a723 --- /dev/null +++ b/doxygen/html/search/classes_2.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['strategy_143',['Strategy',['../structStrategy.html',1,'']]] +]; diff --git a/doxygen/html/search/classes_3.html b/doxygen/html/search/classes_3.html new file mode 100644 index 0000000..2224e54 --- /dev/null +++ b/doxygen/html/search/classes_3.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Caricamento in corso...
    +
    + +
    Ricerca in corso...
    +
    Nessun risultato
    + +
    + + diff --git a/doxygen/html/search/classes_3.js b/doxygen/html/search/classes_3.js new file mode 100644 index 0000000..63ad293 --- /dev/null +++ b/doxygen/html/search/classes_3.js @@ -0,0 +1,5 @@ +var searchData= +[ + ['tetriminipool_144',['TetriminiPool',['../structTetriminiPool.html',1,'']]], + ['tetrimino_145',['Tetrimino',['../structTetrimino.html',1,'']]] +]; diff --git a/doxygen/html/search/close.svg b/doxygen/html/search/close.svg new file mode 100644 index 0000000..a933eea --- /dev/null +++ b/doxygen/html/search/close.svg @@ -0,0 +1,31 @@ + + + + + + image/svg+xml + + + + + + + + diff --git a/doxygen/html/search/defines_0.html b/doxygen/html/search/defines_0.html new file mode 100644 index 0000000..4cb8620 --- /dev/null +++ b/doxygen/html/search/defines_0.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Caricamento in corso...
    +
    + +
    Ricerca in corso...
    +
    Nessun risultato
    + +
    + + diff --git a/doxygen/html/search/defines_0.js b/doxygen/html/search/defines_0.js new file mode 100644 index 0000000..11af6a2 --- /dev/null +++ b/doxygen/html/search/defines_0.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['constants_5fc_279',['CONSTANTS_C',['../constants_8c.html#ab143aaf593ab8bb709f4da31ee844e4a',1,'constants.c']]] +]; diff --git a/doxygen/html/search/files_0.html b/doxygen/html/search/files_0.html new file mode 100644 index 0000000..e7f6b82 --- /dev/null +++ b/doxygen/html/search/files_0.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Caricamento in corso...
    +
    + +
    Ricerca in corso...
    +
    Nessun risultato
    + +
    + + diff --git a/doxygen/html/search/files_0.js b/doxygen/html/search/files_0.js new file mode 100644 index 0000000..2224db3 --- /dev/null +++ b/doxygen/html/search/files_0.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['bot_2ec_146',['bot.c',['../bot_8c.html',1,'']]] +]; diff --git a/doxygen/html/search/files_1.html b/doxygen/html/search/files_1.html new file mode 100644 index 0000000..79d9b67 --- /dev/null +++ b/doxygen/html/search/files_1.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Caricamento in corso...
    +
    + +
    Ricerca in corso...
    +
    Nessun risultato
    + +
    + + diff --git a/doxygen/html/search/files_1.js b/doxygen/html/search/files_1.js new file mode 100644 index 0000000..83678a3 --- /dev/null +++ b/doxygen/html/search/files_1.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['constants_2ec_147',['constants.c',['../constants_8c.html',1,'']]] +]; diff --git a/doxygen/html/search/files_2.html b/doxygen/html/search/files_2.html new file mode 100644 index 0000000..cc7f5ce --- /dev/null +++ b/doxygen/html/search/files_2.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Caricamento in corso...
    +
    + +
    Ricerca in corso...
    +
    Nessun risultato
    + +
    + + diff --git a/doxygen/html/search/files_2.js b/doxygen/html/search/files_2.js new file mode 100644 index 0000000..e7f8ef9 --- /dev/null +++ b/doxygen/html/search/files_2.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['functions_2ec_148',['functions.c',['../functions_8c.html',1,'']]] +]; diff --git a/doxygen/html/search/files_3.html b/doxygen/html/search/files_3.html new file mode 100644 index 0000000..b87cfb0 --- /dev/null +++ b/doxygen/html/search/files_3.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Caricamento in corso...
    +
    + +
    Ricerca in corso...
    +
    Nessun risultato
    + +
    + + diff --git a/doxygen/html/search/files_3.js b/doxygen/html/search/files_3.js new file mode 100644 index 0000000..cf2697c --- /dev/null +++ b/doxygen/html/search/files_3.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['gamefield_2ec_149',['gamefield.c',['../gamefield_8c.html',1,'']]] +]; diff --git a/doxygen/html/search/files_4.html b/doxygen/html/search/files_4.html new file mode 100644 index 0000000..4ffd2ac --- /dev/null +++ b/doxygen/html/search/files_4.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Caricamento in corso...
    +
    + +
    Ricerca in corso...
    +
    Nessun risultato
    + +
    + + diff --git a/doxygen/html/search/files_4.js b/doxygen/html/search/files_4.js new file mode 100644 index 0000000..5e9ffd0 --- /dev/null +++ b/doxygen/html/search/files_4.js @@ -0,0 +1,5 @@ +var searchData= +[ + ['main_2ec_150',['main.c',['../main_8c.html',1,'']]], + ['multiplayer_2ec_151',['multiplayer.c',['../multiplayer_8c.html',1,'']]] +]; diff --git a/doxygen/html/search/files_5.html b/doxygen/html/search/files_5.html new file mode 100644 index 0000000..e34dba9 --- /dev/null +++ b/doxygen/html/search/files_5.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Caricamento in corso...
    +
    + +
    Ricerca in corso...
    +
    Nessun risultato
    + +
    + + diff --git a/doxygen/html/search/files_5.js b/doxygen/html/search/files_5.js new file mode 100644 index 0000000..f951585 --- /dev/null +++ b/doxygen/html/search/files_5.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['player_2ec_152',['player.c',['../player_8c.html',1,'']]] +]; diff --git a/doxygen/html/search/files_6.html b/doxygen/html/search/files_6.html new file mode 100644 index 0000000..b70c956 --- /dev/null +++ b/doxygen/html/search/files_6.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Caricamento in corso...
    +
    + +
    Ricerca in corso...
    +
    Nessun risultato
    + +
    + + diff --git a/doxygen/html/search/files_6.js b/doxygen/html/search/files_6.js new file mode 100644 index 0000000..6d5390a --- /dev/null +++ b/doxygen/html/search/files_6.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['singleplayer_2ec_153',['singleplayer.c',['../singleplayer_8c.html',1,'']]] +]; diff --git a/doxygen/html/search/files_7.html b/doxygen/html/search/files_7.html new file mode 100644 index 0000000..9ddcf30 --- /dev/null +++ b/doxygen/html/search/files_7.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Caricamento in corso...
    +
    + +
    Ricerca in corso...
    +
    Nessun risultato
    + +
    + + diff --git a/doxygen/html/search/files_7.js b/doxygen/html/search/files_7.js new file mode 100644 index 0000000..d918041 --- /dev/null +++ b/doxygen/html/search/files_7.js @@ -0,0 +1,5 @@ +var searchData= +[ + ['tester_2ec_154',['tester.c',['../tester_8c.html',1,'']]], + ['tetrimino_2ec_155',['tetrimino.c',['../tetrimino_8c.html',1,'']]] +]; diff --git a/doxygen/html/search/functions_0.html b/doxygen/html/search/functions_0.html new file mode 100644 index 0000000..c726e08 --- /dev/null +++ b/doxygen/html/search/functions_0.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Caricamento in corso...
    +
    + +
    Ricerca in corso...
    +
    Nessun risultato
    + +
    + + diff --git a/doxygen/html/search/functions_0.js b/doxygen/html/search/functions_0.js new file mode 100644 index 0000000..d62c2f2 --- /dev/null +++ b/doxygen/html/search/functions_0.js @@ -0,0 +1,7 @@ +var searchData= +[ + ['add_5ftetrimino_5ffrom_5fpool_156',['add_tetrimino_from_pool',['../tetrimino_8c.html#ae62d6f2c6861dc72bf09d0f4b16646b0',1,'tetrimino.c']]], + ['add_5ftetrimino_5fto_5ffield_157',['add_tetrimino_to_field',['../gamefield_8c.html#a67a11e444f724efccb602b10db356866',1,'gamefield.c']]], + ['add_5ftetrimino_5fto_5fgamefield_158',['add_tetrimino_to_gamefield',['../gamefield_8c.html#a83c9ef65386319cf06e30033a5fc6c83',1,'gamefield.c']]], + ['are_5ftet_5fequal_159',['are_tet_equal',['../tetrimino_8c.html#ac5cf6efd450c7b69fbb06f6a20a6f779',1,'tetrimino.c']]] +]; diff --git a/doxygen/html/search/functions_1.html b/doxygen/html/search/functions_1.html new file mode 100644 index 0000000..f177bf8 --- /dev/null +++ b/doxygen/html/search/functions_1.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Caricamento in corso...
    +
    + +
    Ricerca in corso...
    +
    Nessun risultato
    + +
    + + diff --git a/doxygen/html/search/functions_1.js b/doxygen/html/search/functions_1.js new file mode 100644 index 0000000..46e0196 --- /dev/null +++ b/doxygen/html/search/functions_1.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['blank_5fcells_160',['blank_cells',['../functions_8c.html#a3a5f938f4f9b4f760f3c10ad83d52b72',1,'functions.c']]] +]; diff --git a/doxygen/html/search/functions_2.html b/doxygen/html/search/functions_2.html new file mode 100644 index 0000000..874402f --- /dev/null +++ b/doxygen/html/search/functions_2.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Caricamento in corso...
    +
    + +
    Ricerca in corso...
    +
    Nessun risultato
    + +
    + + diff --git a/doxygen/html/search/functions_2.js b/doxygen/html/search/functions_2.js new file mode 100644 index 0000000..7df073d --- /dev/null +++ b/doxygen/html/search/functions_2.js @@ -0,0 +1,9 @@ +var searchData= +[ + ['calculate_5fscore_161',['calculate_score',['../bot_8c.html#af1f9847c36f2d28992c1aeec1e0d0124',1,'bot.c']]], + ['check_5ffield_162',['check_field',['../gamefield_8c.html#a77bf733aed6daadcad423c53267a185c',1,'gamefield.c']]], + ['choose_5fstrategy_163',['choose_strategy',['../bot_8c.html#aeee954dc9c077bf79206dd6adc7c12d5',1,'bot.c']]], + ['clear_5ftop_164',['clear_top',['../gamefield_8c.html#a1d7e07c024f849ed99c32a404e208205',1,'gamefield.c']]], + ['clone_5ffield_165',['clone_field',['../gamefield_8c.html#a8816471ebde80e7ae7648f24d14628f5',1,'gamefield.c']]], + ['compare_5ffields_166',['compare_fields',['../functions_8c.html#aba3f65615a485d6d9d6b5123fd044eed',1,'functions.c']]] +]; diff --git a/doxygen/html/search/functions_3.html b/doxygen/html/search/functions_3.html new file mode 100644 index 0000000..c45fceb --- /dev/null +++ b/doxygen/html/search/functions_3.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Caricamento in corso...
    +
    + +
    Ricerca in corso...
    +
    Nessun risultato
    + +
    + + diff --git a/doxygen/html/search/functions_3.js b/doxygen/html/search/functions_3.js new file mode 100644 index 0000000..b0443b1 --- /dev/null +++ b/doxygen/html/search/functions_3.js @@ -0,0 +1,5 @@ +var searchData= +[ + ['delay_167',['delay',['../functions_8c.html#a6a546a532625256f814fafe73f901ad9',1,'functions.c']]], + ['draw_5fcursor_168',['draw_cursor',['../gamefield_8c.html#a016c346c90ad609858e9c4fe71ba1a30',1,'gamefield.c']]] +]; diff --git a/doxygen/html/search/functions_4.html b/doxygen/html/search/functions_4.html new file mode 100644 index 0000000..66ee425 --- /dev/null +++ b/doxygen/html/search/functions_4.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Caricamento in corso...
    +
    + +
    Ricerca in corso...
    +
    Nessun risultato
    + +
    + + diff --git a/doxygen/html/search/functions_4.js b/doxygen/html/search/functions_4.js new file mode 100644 index 0000000..a1cc054 --- /dev/null +++ b/doxygen/html/search/functions_4.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['end_5fgame_169',['end_game',['../singleplayer_8c.html#a917dffd1f9e92514b029649201df79fe',1,'singleplayer.c']]] +]; diff --git a/doxygen/html/search/functions_5.html b/doxygen/html/search/functions_5.html new file mode 100644 index 0000000..b69ec0c --- /dev/null +++ b/doxygen/html/search/functions_5.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Caricamento in corso...
    +
    + +
    Ricerca in corso...
    +
    Nessun risultato
    + +
    + + diff --git a/doxygen/html/search/functions_5.js b/doxygen/html/search/functions_5.js new file mode 100644 index 0000000..110c063 --- /dev/null +++ b/doxygen/html/search/functions_5.js @@ -0,0 +1,11 @@ +var searchData= +[ + ['flip_5fvalues_170',['flip_values',['../gamefield_8c.html#a2e7375a66c65e77646b63db474635eeb',1,'gamefield.c']]], + ['flip_5fvalues_5fin_5frow_171',['flip_values_in_row',['../gamefield_8c.html#adf10c073b190134923207a5871a9809c',1,'gamefield.c']]], + ['form_172',['form',['../functions_8c.html#aee7b9fd8e7a94d7dfd62ffcb7e82570f',1,'functions.c']]], + ['free_5fgamefield_173',['free_gamefield',['../gamefield_8c.html#abfb0772a6365658ab0b88acb32b97f80',1,'gamefield.c']]], + ['free_5fplayer_174',['free_player',['../player_8c.html#a83b575c805cff5723c0f1b218934a479',1,'player.c']]], + ['free_5fpointboard_175',['free_pointboard',['../player_8c.html#aad98f75b691e908467b81cfa4f50394d',1,'player.c']]], + ['free_5fpool_176',['free_pool',['../tetrimino_8c.html#a18a9358b2ccf347d46e375f3e92147c5',1,'tetrimino.c']]], + ['free_5ftetrimino_177',['free_tetrimino',['../tetrimino_8c.html#a3311448078a900a696614a1345455730',1,'tetrimino.c']]] +]; diff --git a/doxygen/html/search/functions_6.html b/doxygen/html/search/functions_6.html new file mode 100644 index 0000000..02bbd9b --- /dev/null +++ b/doxygen/html/search/functions_6.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Caricamento in corso...
    +
    + +
    Ricerca in corso...
    +
    Nessun risultato
    + +
    + + diff --git a/doxygen/html/search/functions_6.js b/doxygen/html/search/functions_6.js new file mode 100644 index 0000000..c320793 --- /dev/null +++ b/doxygen/html/search/functions_6.js @@ -0,0 +1,24 @@ +var searchData= +[ + ['get_5fascii_5fart_5fcols_178',['get_ASCII_art_cols',['../functions_8c.html#a0a32b7ef19af15d7a94704b5d6ffc6dd',1,'functions.c']]], + ['get_5fascii_5fart_5frows_179',['get_ASCII_art_rows',['../functions_8c.html#a3c756f08e3d50e98c77157872d0b67c6',1,'functions.c']]], + ['get_5ffirst_5ffree_5frow_180',['get_first_free_row',['../gamefield_8c.html#a1c3e2c3a634c4ff2d185960ba9ab1941',1,'gamefield.c']]], + ['get_5ffirst_5ffree_5frow_5fin_5ffield_181',['get_first_free_row_in_field',['../gamefield_8c.html#adf50972d64a4f1bcd7aaaa5410ebeb24',1,'gamefield.c']]], + ['get_5fgamefield_182',['get_gamefield',['../gamefield_8c.html#a76852cf02d820b1a4405821eb504b660',1,'gamefield.c']]], + ['get_5fgamefield_5fwin_183',['get_gamefield_win',['../gamefield_8c.html#a9f2757da752cfa98de0c477d035d222d',1,'gamefield.c']]], + ['get_5fplayer_5fnick_184',['get_player_nick',['../player_8c.html#af2dd530b0d8702fbd846e2754522ff22',1,'player.c']]], + ['get_5fplayer_5fpoints_185',['get_player_points',['../player_8c.html#a700c5470b96d6cd83f82745ca74981b2',1,'player.c']]], + ['get_5fpointboard_5fwin_186',['get_pointboard_win',['../player_8c.html#a6e8f7ab5154c9d335ee740f7e2d23d28',1,'player.c']]], + ['get_5fpoints_187',['get_points',['../player_8c.html#aaefe972e916ce0cb7a95bcbe7cd855ae',1,'player.c']]], + ['get_5fpool_5fwin_188',['get_pool_win',['../tetrimino_8c.html#ae42d71f193c4a5e08130b2ba1c6601c7',1,'tetrimino.c']]], + ['get_5fremaining_5ftetriminos_189',['get_remaining_tetriminos',['../tetrimino_8c.html#a9a20ed2c57b693528963d07d2cb20f0b',1,'tetrimino.c']]], + ['get_5fstrategy_5fcursor_190',['get_strategy_cursor',['../bot_8c.html#a1a5dc71a9e367f2316d7f3360fbbe332',1,'bot.c']]], + ['get_5fstrategy_5ftet_5frotation_191',['get_strategy_tet_rotation',['../bot_8c.html#a918677fc8aae2873a3be3b4dfa0a52cb',1,'bot.c']]], + ['get_5fstrategy_5ftet_5ftype_192',['get_strategy_tet_type',['../bot_8c.html#a3e76728fa125c9b5028448bb0aff6209',1,'bot.c']]], + ['get_5ftet_5fcolor_193',['get_tet_color',['../tetrimino_8c.html#a11a3762dd4fda202339da0db5504b6f8',1,'tetrimino.c']]], + ['get_5ftet_5fcols_194',['get_tet_cols',['../tetrimino_8c.html#af051201343001a1176e783bcc191dc73',1,'tetrimino.c']]], + ['get_5ftet_5frows_195',['get_tet_rows',['../tetrimino_8c.html#a5a9cee155fb528f61673a57e3909c3c0',1,'tetrimino.c']]], + ['get_5ftet_5ftype_196',['get_tet_type',['../tetrimino_8c.html#aa714506df9c70df9941dc825dcd43292',1,'tetrimino.c']]], + ['get_5ftet_5fvalues_197',['get_tet_values',['../tetrimino_8c.html#aa436fdf416f645272a14b86168df57de',1,'tetrimino.c']]], + ['get_5ftetrimino_198',['get_tetrimino',['../tetrimino_8c.html#aca18ec1086e88441dc0fe05bf9cc6530',1,'tetrimino.c']]] +]; diff --git a/doxygen/html/search/functions_7.html b/doxygen/html/search/functions_7.html new file mode 100644 index 0000000..93a4577 --- /dev/null +++ b/doxygen/html/search/functions_7.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Caricamento in corso...
    +
    + +
    Ricerca in corso...
    +
    Nessun risultato
    + +
    + + diff --git a/doxygen/html/search/functions_7.js b/doxygen/html/search/functions_7.js new file mode 100644 index 0000000..91a2b12 --- /dev/null +++ b/doxygen/html/search/functions_7.js @@ -0,0 +1,15 @@ +var searchData= +[ + ['init_5fcolors_199',['init_colors',['../main_8c.html#a63790e021bbe6eb4ee0525657d2c8b3f',1,'main.c']]], + ['init_5fmain_5fscreen_200',['init_main_screen',['../main_8c.html#a41b1be9518c4382e524f8248e6dacf07',1,'main.c']]], + ['initialize_5fgamefield_201',['initialize_gamefield',['../gamefield_8c.html#ae52961e906027f24e3770ee8fbed0275',1,'gamefield.c']]], + ['initialize_5fplayer_202',['initialize_player',['../player_8c.html#abe71310071a7e8feeaa5df98c38c006a',1,'player.c']]], + ['initialize_5fpointboard_203',['initialize_pointboard',['../player_8c.html#afe4c670e3af2bf7cf257310b8f1a55a4',1,'player.c']]], + ['initialize_5fpool_204',['initialize_pool',['../tetrimino_8c.html#aa9768773d2f4a879dfbfc4b557e42e16',1,'tetrimino.c']]], + ['instructions_205',['instructions',['../singleplayer_8c.html#aca06f56b37becd914127b7d8e2479b9d',1,'singleplayer.c']]], + ['is_5ffield_5ftop_5foccupied_206',['is_field_top_occupied',['../gamefield_8c.html#aa96825c95023bf04f6e30ee1f22f2a4a',1,'gamefield.c']]], + ['is_5fgamefield_5ftop_5foccupied_207',['is_gamefield_top_occupied',['../gamefield_8c.html#a6f900206350a55e6bfe45852379d557d',1,'gamefield.c']]], + ['is_5frow_5fempty_208',['is_row_empty',['../gamefield_8c.html#a841bbdf803eeda4958b8f0796641b7c8',1,'gamefield.c']]], + ['is_5frow_5ffull_209',['is_row_full',['../gamefield_8c.html#a930ad3ba14a5ee15ef2470e556bf7834',1,'gamefield.c']]], + ['is_5fsafe_5fto_5fplace_5ftet_210',['is_safe_to_place_tet',['../tetrimino_8c.html#aa97c94bc92173b8007be838c012a98d7',1,'tetrimino.c']]] +]; diff --git a/doxygen/html/search/functions_8.html b/doxygen/html/search/functions_8.html new file mode 100644 index 0000000..6d04ef1 --- /dev/null +++ b/doxygen/html/search/functions_8.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Caricamento in corso...
    +
    + +
    Ricerca in corso...
    +
    Nessun risultato
    + +
    + + diff --git a/doxygen/html/search/functions_8.js b/doxygen/html/search/functions_8.js new file mode 100644 index 0000000..ad2727d --- /dev/null +++ b/doxygen/html/search/functions_8.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['kill_5fwin_211',['kill_win',['../functions_8c.html#a8ef27e7849ed7c5a254209c4411e9d2c',1,'functions.c']]] +]; diff --git a/doxygen/html/search/functions_9.html b/doxygen/html/search/functions_9.html new file mode 100644 index 0000000..6482445 --- /dev/null +++ b/doxygen/html/search/functions_9.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Caricamento in corso...
    +
    + +
    Ricerca in corso...
    +
    Nessun risultato
    + +
    + + diff --git a/doxygen/html/search/functions_9.js b/doxygen/html/search/functions_9.js new file mode 100644 index 0000000..2310ada --- /dev/null +++ b/doxygen/html/search/functions_9.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['linear_5frotate_212',['linear_rotate',['../tetrimino_8c.html#a6768a014d0e3a91bbe43db89acb56b17',1,'tetrimino.c']]] +]; diff --git a/doxygen/html/search/functions_a.html b/doxygen/html/search/functions_a.html new file mode 100644 index 0000000..1a5edcf --- /dev/null +++ b/doxygen/html/search/functions_a.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Caricamento in corso...
    +
    + +
    Ricerca in corso...
    +
    Nessun risultato
    + +
    + + diff --git a/doxygen/html/search/functions_a.js b/doxygen/html/search/functions_a.js new file mode 100644 index 0000000..a456394 --- /dev/null +++ b/doxygen/html/search/functions_a.js @@ -0,0 +1,7 @@ +var searchData= +[ + ['main_213',['main',['../main_8c.html#ae66f6b31b5ad750f1fe042a706a4e3d4',1,'main(): main.c'],['../tester_8c.html#ae66f6b31b5ad750f1fe042a706a4e3d4',1,'main(): tester.c']]], + ['main_5fmenu_214',['main_menu',['../main_8c.html#a885611589f6294afada89fe88362e863',1,'main.c']]], + ['manage_5fdrop_215',['manage_drop',['../gamefield_8c.html#aa9777a39f3b668311caa35e070a31a03',1,'gamefield.c']]], + ['mvwprintwrows_216',['mvwprintwrows',['../functions_8c.html#a21fc81a6b2e575af36d296c57ba28220',1,'functions.c']]] +]; diff --git a/doxygen/html/search/functions_b.html b/doxygen/html/search/functions_b.html new file mode 100644 index 0000000..e1bf76e --- /dev/null +++ b/doxygen/html/search/functions_b.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Caricamento in corso...
    +
    + +
    Ricerca in corso...
    +
    Nessun risultato
    + +
    + + diff --git a/doxygen/html/search/functions_b.js b/doxygen/html/search/functions_b.js new file mode 100644 index 0000000..e29c379 --- /dev/null +++ b/doxygen/html/search/functions_b.js @@ -0,0 +1,6 @@ +var searchData= +[ + ['new_5fgame_5fsingle_217',['new_game_single',['../singleplayer_8c.html#afd3a73cea32cc9ce8f198c1b7e51388b',1,'singleplayer.c']]], + ['next_5fcircular_218',['next_circular',['../functions_8c.html#ac0614c3c6113c781062cc926c502fdb0',1,'functions.c']]], + ['no_5ftetriminos_5fleft_219',['no_tetriminos_left',['../tetrimino_8c.html#a2d600579ba00a08b54ac144f23c3d700',1,'tetrimino.c']]] +]; diff --git a/doxygen/html/search/functions_c.html b/doxygen/html/search/functions_c.html new file mode 100644 index 0000000..8f6e917 --- /dev/null +++ b/doxygen/html/search/functions_c.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Caricamento in corso...
    +
    + +
    Ricerca in corso...
    +
    Nessun risultato
    + +
    + + diff --git a/doxygen/html/search/functions_c.js b/doxygen/html/search/functions_c.js new file mode 100644 index 0000000..7e03193 --- /dev/null +++ b/doxygen/html/search/functions_c.js @@ -0,0 +1,17 @@ +var searchData= +[ + ['player_5fadd_5fpoints_220',['player_add_points',['../player_8c.html#a709a98604b0784327e505ac3cf3be68c',1,'player.c']]], + ['prev_5fcircular_221',['prev_circular',['../functions_8c.html#a1e8bd4580a6bff3efeddd8a4b541713d',1,'functions.c']]], + ['print_5fcredits_222',['print_credits',['../main_8c.html#a83d01093591f862edbc8dd1351b6de1c',1,'main.c']]], + ['print_5flogo_223',['print_logo',['../main_8c.html#ae8c09f3eb701bb9ef3587d6704a1d277',1,'main.c']]], + ['print_5fmenu_224',['print_menu',['../main_8c.html#ae91d4cbee2dab64187187499dd0eecd4',1,'main.c']]], + ['print_5fmenu_5fstyle_225',['print_menu_style',['../tetrimino_8c.html#a65a81faa216d0c7f95e110656649811c',1,'tetrimino.c']]], + ['print_5ftetrimino_226',['print_tetrimino',['../tetrimino_8c.html#a67a87e51f6d8f929277a533905c12b3c',1,'tetrimino.c']]], + ['pve_5fcontinue_5fgame_227',['pve_continue_game',['../multiplayer_8c.html#ae9848fceb73c869fdb668d967f1122fd',1,'multiplayer.c']]], + ['pve_5finstructions_228',['pve_instructions',['../multiplayer_8c.html#a7f42a9a692f45fd669f9867d145beb5b',1,'multiplayer.c']]], + ['pve_5fnew_5fgame_229',['pve_new_game',['../multiplayer_8c.html#a8bb59a22f947e17a7766abca47c94ee8',1,'multiplayer.c']]], + ['pvp_5fcontinue_5fgame_230',['pvp_continue_game',['../multiplayer_8c.html#a848a70037718eb818b5fc64aae00e8fd',1,'multiplayer.c']]], + ['pvp_5fend_5fgame_231',['pvp_end_game',['../multiplayer_8c.html#a99e773c3947a93434dcd1a169487d76f',1,'multiplayer.c']]], + ['pvp_5finstructions_232',['pvp_instructions',['../multiplayer_8c.html#a16528058f7d23b7dfae0e5a1894509e1',1,'multiplayer.c']]], + ['pvp_5fnew_5fgame_233',['pvp_new_game',['../multiplayer_8c.html#a93c73fb49705c0600cfd9448971d0806',1,'multiplayer.c']]] +]; diff --git a/doxygen/html/search/functions_d.html b/doxygen/html/search/functions_d.html new file mode 100644 index 0000000..84a90ec --- /dev/null +++ b/doxygen/html/search/functions_d.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Caricamento in corso...
    +
    + +
    Ricerca in corso...
    +
    Nessun risultato
    + +
    + + diff --git a/doxygen/html/search/functions_d.js b/doxygen/html/search/functions_d.js new file mode 100644 index 0000000..1dc8a8b --- /dev/null +++ b/doxygen/html/search/functions_d.js @@ -0,0 +1,9 @@ +var searchData= +[ + ['random_5fcolor_234',['random_color',['../functions_8c.html#ac7132f875351b34e875f66af3984d28c',1,'functions.c']]], + ['refresh_5fgamefield_235',['refresh_gamefield',['../gamefield_8c.html#ac52aeab109c7e818b6e0332afbf9c903',1,'gamefield.c']]], + ['refresh_5fpointboard_236',['refresh_pointboard',['../player_8c.html#aa28d445f1d4cf0ba9b32a68ba94a219d',1,'player.c']]], + ['refresh_5fpool_237',['refresh_pool',['../tetrimino_8c.html#a80b535d33369ab13f4fae4d793df2749',1,'tetrimino.c']]], + ['refresh_5fselector_238',['refresh_selector',['../gamefield_8c.html#aa5697bc18535696c06ec1148688e5ddc',1,'gamefield.c']]], + ['remove_5ftetrimino_5ffrom_5fpool_239',['remove_tetrimino_from_pool',['../tetrimino_8c.html#a292112df25f9bb748a1c339713a11d6c',1,'tetrimino.c']]] +]; diff --git a/doxygen/html/search/functions_e.html b/doxygen/html/search/functions_e.html new file mode 100644 index 0000000..0f3a642 --- /dev/null +++ b/doxygen/html/search/functions_e.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Caricamento in corso...
    +
    + +
    Ricerca in corso...
    +
    Nessun risultato
    + +
    + + diff --git a/doxygen/html/search/functions_e.js b/doxygen/html/search/functions_e.js new file mode 100644 index 0000000..5f6bd67 --- /dev/null +++ b/doxygen/html/search/functions_e.js @@ -0,0 +1,12 @@ +var searchData= +[ + ['safe_5frotate_5ftetrimino_240',['safe_rotate_tetrimino',['../tetrimino_8c.html#a4d6ea235792204ccc42b18c10ed0328e',1,'tetrimino.c']]], + ['select_5fdifficulty_241',['select_difficulty',['../multiplayer_8c.html#a4c1e77194ced6e25ccd1eabad98b11c8',1,'multiplayer.c']]], + ['select_5ftetrimino_242',['select_tetrimino',['../tetrimino_8c.html#a4ad34dc6c6dc1873d3bcd400bfe59329',1,'tetrimino.c']]], + ['set_5fstrategy_243',['set_strategy',['../bot_8c.html#a60717dd1f3bb484dfc1b13dd498b17eb',1,'bot.c']]], + ['single_5fcontinue_5fgame_244',['single_continue_game',['../singleplayer_8c.html#a613b6a54ae12e92d55432c859c41ab18',1,'singleplayer.c']]], + ['strategy_5fcreate_245',['strategy_create',['../bot_8c.html#a87841843a152ca8b0c712f56a122ad79',1,'bot.c']]], + ['strategy_5fdestroy_246',['strategy_destroy',['../bot_8c.html#af2e860e7a30cae75d912813526336b71',1,'bot.c']]], + ['strategy_5fupdate_247',['strategy_update',['../bot_8c.html#ac67bfb8b0b61b708302652ebf8d78f84',1,'bot.c']]], + ['swap_5fcolor_248',['swap_color',['../functions_8c.html#a395adeb77e0ee2e2de1b305272e65c10',1,'functions.c']]] +]; diff --git a/doxygen/html/search/functions_f.html b/doxygen/html/search/functions_f.html new file mode 100644 index 0000000..7500a9f --- /dev/null +++ b/doxygen/html/search/functions_f.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Caricamento in corso...
    +
    + +
    Ricerca in corso...
    +
    Nessun risultato
    + +
    + + diff --git a/doxygen/html/search/functions_f.js b/doxygen/html/search/functions_f.js new file mode 100644 index 0000000..c0efa8f --- /dev/null +++ b/doxygen/html/search/functions_f.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['wprint_5fwith_5fdelay_249',['wprint_with_delay',['../functions_8c.html#acd05e28a06191e00d567509aefc2e6b2',1,'functions.c']]] +]; diff --git a/doxygen/html/search/mag_sel.svg b/doxygen/html/search/mag_sel.svg new file mode 100644 index 0000000..03626f6 --- /dev/null +++ b/doxygen/html/search/mag_sel.svg @@ -0,0 +1,74 @@ + + + + + + + + image/svg+xml + + + + + + + + + + + diff --git a/doxygen/html/search/nomatches.html b/doxygen/html/search/nomatches.html new file mode 100644 index 0000000..f58428c --- /dev/null +++ b/doxygen/html/search/nomatches.html @@ -0,0 +1,13 @@ + + + + + + + + +
    +
    Nessun risultato
    +
    + + diff --git a/doxygen/html/search/search.css b/doxygen/html/search/search.css new file mode 100644 index 0000000..9074198 --- /dev/null +++ b/doxygen/html/search/search.css @@ -0,0 +1,257 @@ +/*---------------- Search Box */ + +#MSearchBox { + white-space : nowrap; + background: white; + border-radius: 0.65em; + box-shadow: inset 0.5px 0.5px 3px 0px #555; + z-index: 102; +} + +#MSearchBox .left { + display: inline-block; + vertical-align: middle; + height: 1.4em; +} + +#MSearchSelect { + display: inline-block; + vertical-align: middle; + height: 1.4em; + padding: 0 0 0 0.3em; + margin: 0; +} + +#MSearchField { + display: inline-block; + vertical-align: middle; + width: 7.5em; + height: 1.1em; + margin: 0 0.15em; + padding: 0; + line-height: 1em; + border:none; + color: #909090; + outline: none; + font-family: Arial, Verdana, sans-serif; + -webkit-border-radius: 0px; + border-radius: 0px; + background: none; +} + + +#MSearchBox .right { + display: inline-block; + vertical-align: middle; + width: 1.4em; + height: 1.4em; +} + +#MSearchClose { + display: none; + font-size: inherit; + background : none; + border: none; + margin: 0; + padding: 0; + outline: none; + +} + +#MSearchCloseImg { + height: 1.4em; + padding: 0.3em; + margin: 0; +} + +.MSearchBoxActive #MSearchField { + color: #000000; +} + +#main-menu > li:last-child { + /* This
  • object is the parent of the search bar */ + display: flex; + justify-content: center; + align-items: center; + height: 36px; + margin-right: 1em; +} + +/*---------------- Search filter selection */ + +#MSearchSelectWindow { + display: none; + position: absolute; + left: 0; top: 0; + border: 1px solid #90A5CE; + background-color: #F9FAFC; + z-index: 10001; + padding-top: 4px; + padding-bottom: 4px; + -moz-border-radius: 4px; + -webkit-border-top-left-radius: 4px; + -webkit-border-top-right-radius: 4px; + -webkit-border-bottom-left-radius: 4px; + -webkit-border-bottom-right-radius: 4px; + -webkit-box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15); +} + +.SelectItem { + font: 8pt Arial, Verdana, sans-serif; + padding-left: 2px; + padding-right: 12px; + border: 0px; +} + +span.SelectionMark { + margin-right: 4px; + font-family: monospace; + outline-style: none; + text-decoration: none; +} + +a.SelectItem { + display: block; + outline-style: none; + color: #000000; + text-decoration: none; + padding-left: 6px; + padding-right: 12px; +} + +a.SelectItem:focus, +a.SelectItem:active { + color: #000000; + outline-style: none; + text-decoration: none; +} + +a.SelectItem:hover { + color: #FFFFFF; + background-color: #3D578C; + outline-style: none; + text-decoration: none; + cursor: pointer; + display: block; +} + +/*---------------- Search results window */ + +iframe#MSearchResults { + width: 60ex; + height: 15em; +} + +#MSearchResultsWindow { + display: none; + position: absolute; + left: 0; top: 0; + border: 1px solid #000; + background-color: #EEF1F7; + z-index:10000; +} + +/* ----------------------------------- */ + + +#SRIndex { + clear:both; + padding-bottom: 15px; +} + +.SREntry { + font-size: 10pt; + padding-left: 1ex; +} + +.SRPage .SREntry { + font-size: 8pt; + padding: 1px 5px; +} + +body.SRPage { + margin: 5px 2px; +} + +.SRChildren { + padding-left: 3ex; padding-bottom: .5em +} + +.SRPage .SRChildren { + display: none; +} + +.SRSymbol { + font-weight: bold; + color: #425E97; + font-family: Arial, Verdana, sans-serif; + text-decoration: none; + outline: none; +} + +a.SRScope { + display: block; + color: #425E97; + font-family: Arial, Verdana, sans-serif; + text-decoration: none; + outline: none; +} + +a.SRSymbol:focus, a.SRSymbol:active, +a.SRScope:focus, a.SRScope:active { + text-decoration: underline; +} + +span.SRScope { + padding-left: 4px; + font-family: Arial, Verdana, sans-serif; +} + +.SRPage .SRStatus { + padding: 2px 5px; + font-size: 8pt; + font-style: italic; + font-family: Arial, Verdana, sans-serif; +} + +.SRResult { + display: none; +} + +div.searchresults { + margin-left: 10px; + margin-right: 10px; +} + +/*---------------- External search page results */ + +.searchresult { + background-color: #F0F3F8; +} + +.pages b { + color: white; + padding: 5px 5px 3px 5px; + background-image: url("../tab_a.png"); + background-repeat: repeat-x; + text-shadow: 0 1px 1px #000000; +} + +.pages { + line-height: 17px; + margin-left: 4px; + text-decoration: none; +} + +.hl { + font-weight: bold; +} + +#searchresults { + margin-bottom: 20px; +} + +.searchpages { + margin-top: 10px; +} + diff --git a/doxygen/html/search/search.js b/doxygen/html/search/search.js new file mode 100644 index 0000000..fb226f7 --- /dev/null +++ b/doxygen/html/search/search.js @@ -0,0 +1,816 @@ +/* + @licstart The following is the entire license notice for the JavaScript code in this file. + + The MIT License (MIT) + + Copyright (C) 1997-2020 by Dimitri van Heesch + + Permission is hereby granted, free of charge, to any person obtaining a copy of this software + and associated documentation files (the "Software"), to deal in the Software without restriction, + including without limitation the rights to use, copy, modify, merge, publish, distribute, + sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in all copies or + substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING + BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, + DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + + @licend The above is the entire license notice for the JavaScript code in this file + */ +function convertToId(search) +{ + var result = ''; + for (i=0;i do a search + { + this.Search(); + } + } + + this.OnSearchSelectKey = function(evt) + { + var e = (evt) ? evt : window.event; // for IE + if (e.keyCode==40 && this.searchIndex0) // Up + { + this.searchIndex--; + this.OnSelectItem(this.searchIndex); + } + else if (e.keyCode==13 || e.keyCode==27) + { + this.OnSelectItem(this.searchIndex); + this.CloseSelectionWindow(); + this.DOMSearchField().focus(); + } + return false; + } + + // --------- Actions + + // Closes the results window. + this.CloseResultsWindow = function() + { + this.DOMPopupSearchResultsWindow().style.display = 'none'; + this.DOMSearchClose().style.display = 'none'; + this.Activate(false); + } + + this.CloseSelectionWindow = function() + { + this.DOMSearchSelectWindow().style.display = 'none'; + } + + // Performs a search. + this.Search = function() + { + this.keyTimeout = 0; + + // strip leading whitespace + var searchValue = this.DOMSearchField().value.replace(/^ +/, ""); + + var code = searchValue.toLowerCase().charCodeAt(0); + var idxChar = searchValue.substr(0, 1).toLowerCase(); + if ( 0xD800 <= code && code <= 0xDBFF && searchValue > 1) // surrogate pair + { + idxChar = searchValue.substr(0, 2); + } + + var resultsPage; + var resultsPageWithSearch; + var hasResultsPage; + + var idx = indexSectionsWithContent[this.searchIndex].indexOf(idxChar); + if (idx!=-1) + { + var hexCode=idx.toString(16); + resultsPage = this.resultsPath + '/' + indexSectionNames[this.searchIndex] + '_' + hexCode + this.extension; + resultsPageWithSearch = resultsPage+'?'+escape(searchValue); + hasResultsPage = true; + } + else // nothing available for this search term + { + resultsPage = this.resultsPath + '/nomatches' + this.extension; + resultsPageWithSearch = resultsPage; + hasResultsPage = false; + } + + window.frames.MSearchResults.location = resultsPageWithSearch; + var domPopupSearchResultsWindow = this.DOMPopupSearchResultsWindow(); + + if (domPopupSearchResultsWindow.style.display!='block') + { + var domSearchBox = this.DOMSearchBox(); + this.DOMSearchClose().style.display = 'inline-block'; + if (this.insideFrame) + { + var domPopupSearchResults = this.DOMPopupSearchResults(); + domPopupSearchResultsWindow.style.position = 'relative'; + domPopupSearchResultsWindow.style.display = 'block'; + var width = document.body.clientWidth - 8; // the -8 is for IE :-( + domPopupSearchResultsWindow.style.width = width + 'px'; + domPopupSearchResults.style.width = width + 'px'; + } + else + { + var domPopupSearchResults = this.DOMPopupSearchResults(); + var left = getXPos(domSearchBox) + 150; // domSearchBox.offsetWidth; + var top = getYPos(domSearchBox) + 20; // domSearchBox.offsetHeight + 1; + domPopupSearchResultsWindow.style.display = 'block'; + left -= domPopupSearchResults.offsetWidth; + domPopupSearchResultsWindow.style.top = top + 'px'; + domPopupSearchResultsWindow.style.left = left + 'px'; + } + } + + this.lastSearchValue = searchValue; + this.lastResultsPage = resultsPage; + } + + // -------- Activation Functions + + // Activates or deactivates the search panel, resetting things to + // their default values if necessary. + this.Activate = function(isActive) + { + if (isActive || // open it + this.DOMPopupSearchResultsWindow().style.display == 'block' + ) + { + this.DOMSearchBox().className = 'MSearchBoxActive'; + + var searchField = this.DOMSearchField(); + + if (searchField.value == this.searchLabel) // clear "Search" term upon entry + { + searchField.value = ''; + this.searchActive = true; + } + } + else if (!isActive) // directly remove the panel + { + this.DOMSearchBox().className = 'MSearchBoxInactive'; + this.DOMSearchField().value = this.searchLabel; + this.searchActive = false; + this.lastSearchValue = '' + this.lastResultsPage = ''; + } + } +} + +// ----------------------------------------------------------------------- + +// The class that handles everything on the search results page. +function SearchResults(name) +{ + // The number of matches from the last run of . + this.lastMatchCount = 0; + this.lastKey = 0; + this.repeatOn = false; + + // Toggles the visibility of the passed element ID. + this.FindChildElement = function(id) + { + var parentElement = document.getElementById(id); + var element = parentElement.firstChild; + + while (element && element!=parentElement) + { + if (element.nodeName.toLowerCase() == 'div' && element.className == 'SRChildren') + { + return element; + } + + if (element.nodeName.toLowerCase() == 'div' && element.hasChildNodes()) + { + element = element.firstChild; + } + else if (element.nextSibling) + { + element = element.nextSibling; + } + else + { + do + { + element = element.parentNode; + } + while (element && element!=parentElement && !element.nextSibling); + + if (element && element!=parentElement) + { + element = element.nextSibling; + } + } + } + } + + this.Toggle = function(id) + { + var element = this.FindChildElement(id); + if (element) + { + if (element.style.display == 'block') + { + element.style.display = 'none'; + } + else + { + element.style.display = 'block'; + } + } + } + + // Searches for the passed string. If there is no parameter, + // it takes it from the URL query. + // + // Always returns true, since other documents may try to call it + // and that may or may not be possible. + this.Search = function(search) + { + if (!search) // get search word from URL + { + search = window.location.search; + search = search.substring(1); // Remove the leading '?' + search = unescape(search); + } + + search = search.replace(/^ +/, ""); // strip leading spaces + search = search.replace(/ +$/, ""); // strip trailing spaces + search = search.toLowerCase(); + search = convertToId(search); + + var resultRows = document.getElementsByTagName("div"); + var matches = 0; + + var i = 0; + while (i < resultRows.length) + { + var row = resultRows.item(i); + if (row.className == "SRResult") + { + var rowMatchName = row.id.toLowerCase(); + rowMatchName = rowMatchName.replace(/^sr\d*_/, ''); // strip 'sr123_' + + if (search.length<=rowMatchName.length && + rowMatchName.substr(0, search.length)==search) + { + row.style.display = 'block'; + matches++; + } + else + { + row.style.display = 'none'; + } + } + i++; + } + document.getElementById("Searching").style.display='none'; + if (matches == 0) // no results + { + document.getElementById("NoMatches").style.display='block'; + } + else // at least one result + { + document.getElementById("NoMatches").style.display='none'; + } + this.lastMatchCount = matches; + return true; + } + + // return the first item with index index or higher that is visible + this.NavNext = function(index) + { + var focusItem; + while (1) + { + var focusName = 'Item'+index; + focusItem = document.getElementById(focusName); + if (focusItem && focusItem.parentNode.parentNode.style.display=='block') + { + break; + } + else if (!focusItem) // last element + { + break; + } + focusItem=null; + index++; + } + return focusItem; + } + + this.NavPrev = function(index) + { + var focusItem; + while (1) + { + var focusName = 'Item'+index; + focusItem = document.getElementById(focusName); + if (focusItem && focusItem.parentNode.parentNode.style.display=='block') + { + break; + } + else if (!focusItem) // last element + { + break; + } + focusItem=null; + index--; + } + return focusItem; + } + + this.ProcessKeys = function(e) + { + if (e.type == "keydown") + { + this.repeatOn = false; + this.lastKey = e.keyCode; + } + else if (e.type == "keypress") + { + if (!this.repeatOn) + { + if (this.lastKey) this.repeatOn = true; + return false; // ignore first keypress after keydown + } + } + else if (e.type == "keyup") + { + this.lastKey = 0; + this.repeatOn = false; + } + return this.lastKey!=0; + } + + this.Nav = function(evt,itemIndex) + { + var e = (evt) ? evt : window.event; // for IE + if (e.keyCode==13) return true; + if (!this.ProcessKeys(e)) return false; + + if (this.lastKey==38) // Up + { + var newIndex = itemIndex-1; + var focusItem = this.NavPrev(newIndex); + if (focusItem) + { + var child = this.FindChildElement(focusItem.parentNode.parentNode.id); + if (child && child.style.display == 'block') // children visible + { + var n=0; + var tmpElem; + while (1) // search for last child + { + tmpElem = document.getElementById('Item'+newIndex+'_c'+n); + if (tmpElem) + { + focusItem = tmpElem; + } + else // found it! + { + break; + } + n++; + } + } + } + if (focusItem) + { + focusItem.focus(); + } + else // return focus to search field + { + parent.document.getElementById("MSearchField").focus(); + } + } + else if (this.lastKey==40) // Down + { + var newIndex = itemIndex+1; + var focusItem; + var item = document.getElementById('Item'+itemIndex); + var elem = this.FindChildElement(item.parentNode.parentNode.id); + if (elem && elem.style.display == 'block') // children visible + { + focusItem = document.getElementById('Item'+itemIndex+'_c0'); + } + if (!focusItem) focusItem = this.NavNext(newIndex); + if (focusItem) focusItem.focus(); + } + else if (this.lastKey==39) // Right + { + var item = document.getElementById('Item'+itemIndex); + var elem = this.FindChildElement(item.parentNode.parentNode.id); + if (elem) elem.style.display = 'block'; + } + else if (this.lastKey==37) // Left + { + var item = document.getElementById('Item'+itemIndex); + var elem = this.FindChildElement(item.parentNode.parentNode.id); + if (elem) elem.style.display = 'none'; + } + else if (this.lastKey==27) // Escape + { + parent.searchBox.CloseResultsWindow(); + parent.document.getElementById("MSearchField").focus(); + } + else if (this.lastKey==13) // Enter + { + return true; + } + return false; + } + + this.NavChild = function(evt,itemIndex,childIndex) + { + var e = (evt) ? evt : window.event; // for IE + if (e.keyCode==13) return true; + if (!this.ProcessKeys(e)) return false; + + if (this.lastKey==38) // Up + { + if (childIndex>0) + { + var newIndex = childIndex-1; + document.getElementById('Item'+itemIndex+'_c'+newIndex).focus(); + } + else // already at first child, jump to parent + { + document.getElementById('Item'+itemIndex).focus(); + } + } + else if (this.lastKey==40) // Down + { + var newIndex = childIndex+1; + var elem = document.getElementById('Item'+itemIndex+'_c'+newIndex); + if (!elem) // last child, jump to parent next parent + { + elem = this.NavNext(itemIndex+1); + } + if (elem) + { + elem.focus(); + } + } + else if (this.lastKey==27) // Escape + { + parent.searchBox.CloseResultsWindow(); + parent.document.getElementById("MSearchField").focus(); + } + else if (this.lastKey==13) // Enter + { + return true; + } + return false; + } +} + +function setKeyActions(elem,action) +{ + elem.setAttribute('onkeydown',action); + elem.setAttribute('onkeypress',action); + elem.setAttribute('onkeyup',action); +} + +function setClassAttr(elem,attr) +{ + elem.setAttribute('class',attr); + elem.setAttribute('className',attr); +} + +function createResults() +{ + var results = document.getElementById("SRResults"); + for (var e=0; e + + + + + + + + + +
    +
    Caricamento in corso...
    +
    + +
    Ricerca in corso...
    +
    Nessun risultato
    + +
    + + diff --git a/doxygen/html/search/typedefs_0.js b/doxygen/html/search/typedefs_0.js new file mode 100644 index 0000000..7cd5937 --- /dev/null +++ b/doxygen/html/search/typedefs_0.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['gamefield_5ft_273',['gamefield_t',['../gamefield_8c.html#a6048f95a643402d01e0ede801448198a',1,'gamefield.c']]] +]; diff --git a/doxygen/html/search/typedefs_1.html b/doxygen/html/search/typedefs_1.html new file mode 100644 index 0000000..27de3bf --- /dev/null +++ b/doxygen/html/search/typedefs_1.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Caricamento in corso...
    +
    + +
    Ricerca in corso...
    +
    Nessun risultato
    + +
    + + diff --git a/doxygen/html/search/typedefs_1.js b/doxygen/html/search/typedefs_1.js new file mode 100644 index 0000000..1c1fc68 --- /dev/null +++ b/doxygen/html/search/typedefs_1.js @@ -0,0 +1,5 @@ +var searchData= +[ + ['player_5ft_274',['player_t',['../player_8c.html#a41ac1fc93ec4c54167ff5d56474950d9',1,'player.c']]], + ['pointboard_5ft_275',['pointboard_t',['../player_8c.html#af6e7f5332e7bf0fe769ba30f9a699deb',1,'player.c']]] +]; diff --git a/doxygen/html/search/typedefs_2.html b/doxygen/html/search/typedefs_2.html new file mode 100644 index 0000000..0728f7a --- /dev/null +++ b/doxygen/html/search/typedefs_2.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Caricamento in corso...
    +
    + +
    Ricerca in corso...
    +
    Nessun risultato
    + +
    + + diff --git a/doxygen/html/search/typedefs_2.js b/doxygen/html/search/typedefs_2.js new file mode 100644 index 0000000..b39e45d --- /dev/null +++ b/doxygen/html/search/typedefs_2.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['strategy_5ft_276',['strategy_t',['../bot_8c.html#ab9250013b70f0064bd63e8ea002f9a52',1,'bot.c']]] +]; diff --git a/doxygen/html/search/typedefs_3.html b/doxygen/html/search/typedefs_3.html new file mode 100644 index 0000000..debe54b --- /dev/null +++ b/doxygen/html/search/typedefs_3.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Caricamento in corso...
    +
    + +
    Ricerca in corso...
    +
    Nessun risultato
    + +
    + + diff --git a/doxygen/html/search/typedefs_3.js b/doxygen/html/search/typedefs_3.js new file mode 100644 index 0000000..a9f9a51 --- /dev/null +++ b/doxygen/html/search/typedefs_3.js @@ -0,0 +1,5 @@ +var searchData= +[ + ['tetrimini_5fpool_5ft_277',['tetrimini_pool_t',['../tetrimino_8c.html#a7f26275d80ade431dd5960eeb81dbf34',1,'tetrimino.c']]], + ['tetrimino_5ft_278',['tetrimino_t',['../tetrimino_8c.html#ade3bae78a1873d82e116422adcf445f9',1,'tetrimino.c']]] +]; diff --git a/doxygen/html/search/variables_0.html b/doxygen/html/search/variables_0.html new file mode 100644 index 0000000..4630c6e --- /dev/null +++ b/doxygen/html/search/variables_0.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Caricamento in corso...
    +
    + +
    Ricerca in corso...
    +
    Nessun risultato
    + +
    + + diff --git a/doxygen/html/search/variables_0.js b/doxygen/html/search/variables_0.js new file mode 100644 index 0000000..1d34bd4 --- /dev/null +++ b/doxygen/html/search/variables_0.js @@ -0,0 +1,5 @@ +var searchData= +[ + ['art_5fgame_5fover_250',['ART_GAME_OVER',['../constants_8c.html#a7a0d0206e173acb869d5cdc53d15cfe4',1,'constants.c']]], + ['art_5flogo_251',['ART_LOGO',['../constants_8c.html#aa528716657af1ddb536d6e59ba31743c',1,'constants.c']]] +]; diff --git a/doxygen/html/search/variables_1.html b/doxygen/html/search/variables_1.html new file mode 100644 index 0000000..cb96c99 --- /dev/null +++ b/doxygen/html/search/variables_1.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Caricamento in corso...
    +
    + +
    Ricerca in corso...
    +
    Nessun risultato
    + +
    + + diff --git a/doxygen/html/search/variables_1.js b/doxygen/html/search/variables_1.js new file mode 100644 index 0000000..39fbe1e --- /dev/null +++ b/doxygen/html/search/variables_1.js @@ -0,0 +1,5 @@ +var searchData= +[ + ['cols_252',['cols',['../structTetrimino.html#ab4c71bb75a4c24cece4caf7518e54f98',1,'Tetrimino']]], + ['cursor_253',['cursor',['../structStrategy.html#a0a99fe73a3eeab4361e231fc2f803639',1,'Strategy']]] +]; diff --git a/doxygen/html/search/variables_2.html b/doxygen/html/search/variables_2.html new file mode 100644 index 0000000..12e6435 --- /dev/null +++ b/doxygen/html/search/variables_2.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Caricamento in corso...
    +
    + +
    Ricerca in corso...
    +
    Nessun risultato
    + +
    + + diff --git a/doxygen/html/search/variables_2.js b/doxygen/html/search/variables_2.js new file mode 100644 index 0000000..3105e62 --- /dev/null +++ b/doxygen/html/search/variables_2.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['field_254',['field',['../structStrategy.html#ae87ec2fd0e852be895bea0c38940ab0b',1,'Strategy::field()'],['../structGameField.html#a781130b9360b6587e643206ccf2941df',1,'GameField::field()']]] +]; diff --git a/doxygen/html/search/variables_3.html b/doxygen/html/search/variables_3.html new file mode 100644 index 0000000..b92e40c --- /dev/null +++ b/doxygen/html/search/variables_3.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Caricamento in corso...
    +
    + +
    Ricerca in corso...
    +
    Nessun risultato
    + +
    + + diff --git a/doxygen/html/search/variables_3.js b/doxygen/html/search/variables_3.js new file mode 100644 index 0000000..83d87c0 --- /dev/null +++ b/doxygen/html/search/variables_3.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['nickname_255',['nickname',['../structPlayer.html#adb388a66560cbda4033b4003b5553e06',1,'Player']]] +]; diff --git a/doxygen/html/search/variables_4.html b/doxygen/html/search/variables_4.html new file mode 100644 index 0000000..4b3cab9 --- /dev/null +++ b/doxygen/html/search/variables_4.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Caricamento in corso...
    +
    + +
    Ricerca in corso...
    +
    Nessun risultato
    + +
    + + diff --git a/doxygen/html/search/variables_4.js b/doxygen/html/search/variables_4.js new file mode 100644 index 0000000..fca44ec --- /dev/null +++ b/doxygen/html/search/variables_4.js @@ -0,0 +1,9 @@ +var searchData= +[ + ['player_5f1_256',['player_1',['../structPointBoard.html#ad54af4ad6024caa7f494e0e521dba70c',1,'PointBoard']]], + ['player_5f2_257',['player_2',['../structPointBoard.html#a19714dc33a1d1972ff93c52824b2a4a4',1,'PointBoard']]], + ['points_258',['points',['../structPlayer.html#a6907670263a13bfd1e57188e170cdff8',1,'Player']]], + ['pve_5fwelcome_5ftxt_259',['PVE_WELCOME_TXT',['../constants_8c.html#a1ea3df83da84c5a10e0b0e1850ddc215',1,'constants.c']]], + ['pvp_5fend_5ftxt_260',['PVP_END_TXT',['../constants_8c.html#aeb28a0ac9a3355c636f6da06d74585f4',1,'constants.c']]], + ['pvp_5fwelcome_5ftxt_261',['PVP_WELCOME_TXT',['../constants_8c.html#a2119313d692bd8c6588641f54a132a61',1,'constants.c']]] +]; diff --git a/doxygen/html/search/variables_5.html b/doxygen/html/search/variables_5.html new file mode 100644 index 0000000..72bdb76 --- /dev/null +++ b/doxygen/html/search/variables_5.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Caricamento in corso...
    +
    + +
    Ricerca in corso...
    +
    Nessun risultato
    + +
    + + diff --git a/doxygen/html/search/variables_5.js b/doxygen/html/search/variables_5.js new file mode 100644 index 0000000..a6ae9d5 --- /dev/null +++ b/doxygen/html/search/variables_5.js @@ -0,0 +1,6 @@ +var searchData= +[ + ['rem_5ftetriminos_262',['rem_tetriminos',['../structTetriminiPool.html#a1b9340580aebe7e26ed9900ed58a4f5c',1,'TetriminiPool']]], + ['rotation_263',['rotation',['../structStrategy.html#a7768ccc88635a99d50958437de9dba1b',1,'Strategy']]], + ['rows_264',['rows',['../structTetrimino.html#aa5e086bd8702b97c6dc480e30e17a4d2',1,'Tetrimino']]] +]; diff --git a/doxygen/html/search/variables_6.html b/doxygen/html/search/variables_6.html new file mode 100644 index 0000000..9ff0b86 --- /dev/null +++ b/doxygen/html/search/variables_6.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Caricamento in corso...
    +
    + +
    Ricerca in corso...
    +
    Nessun risultato
    + +
    + + diff --git a/doxygen/html/search/variables_6.js b/doxygen/html/search/variables_6.js new file mode 100644 index 0000000..be3f629 --- /dev/null +++ b/doxygen/html/search/variables_6.js @@ -0,0 +1,6 @@ +var searchData= +[ + ['score_265',['score',['../structStrategy.html#aed5f42af6ce46d6b4c8dbaedbba2b788',1,'Strategy']]], + ['single_5fend_5ftxt_266',['SINGLE_END_TXT',['../constants_8c.html#ac80a0fc07983dec9e1ed70661ee6285b',1,'constants.c']]], + ['single_5fwelcome_5ftxt_267',['SINGLE_WELCOME_TXT',['../constants_8c.html#a49db09a7ce1b92a55f76dbadcbdb7b16',1,'constants.c']]] +]; diff --git a/doxygen/html/search/variables_7.html b/doxygen/html/search/variables_7.html new file mode 100644 index 0000000..3e20d60 --- /dev/null +++ b/doxygen/html/search/variables_7.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Caricamento in corso...
    +
    + +
    Ricerca in corso...
    +
    Nessun risultato
    + +
    + + diff --git a/doxygen/html/search/variables_7.js b/doxygen/html/search/variables_7.js new file mode 100644 index 0000000..aae445c --- /dev/null +++ b/doxygen/html/search/variables_7.js @@ -0,0 +1,6 @@ +var searchData= +[ + ['tet_268',['tet',['../structStrategy.html#a1b1e7ace0114fcb433970b09eb6f3b81',1,'Strategy']]], + ['total_5ftetriminos_269',['total_tetriminos',['../structTetriminiPool.html#a86e70ae5e2672da3e5dc951fd9bc7516',1,'TetriminiPool']]], + ['type_270',['type',['../structTetrimino.html#ad40711c1e62ab324d01b36af214f646c',1,'Tetrimino']]] +]; diff --git a/doxygen/html/search/variables_8.html b/doxygen/html/search/variables_8.html new file mode 100644 index 0000000..083f93e --- /dev/null +++ b/doxygen/html/search/variables_8.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Caricamento in corso...
    +
    + +
    Ricerca in corso...
    +
    Nessun risultato
    + +
    + + diff --git a/doxygen/html/search/variables_8.js b/doxygen/html/search/variables_8.js new file mode 100644 index 0000000..536760c --- /dev/null +++ b/doxygen/html/search/variables_8.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['values_271',['values',['../structTetrimino.html#a082e818a1c54c22e38982f2d9d91c105',1,'Tetrimino']]] +]; diff --git a/doxygen/html/search/variables_9.html b/doxygen/html/search/variables_9.html new file mode 100644 index 0000000..65277ea --- /dev/null +++ b/doxygen/html/search/variables_9.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Caricamento in corso...
    +
    + +
    Ricerca in corso...
    +
    Nessun risultato
    + +
    + + diff --git a/doxygen/html/search/variables_9.js b/doxygen/html/search/variables_9.js new file mode 100644 index 0000000..f4e0bdd --- /dev/null +++ b/doxygen/html/search/variables_9.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['win_272',['win',['../structGameField.html#a6418953d5b7628f69e17588838c59082',1,'GameField::win()'],['../structPointBoard.html#a32f69dccfa00b957bbd9506c9a21a73e',1,'PointBoard::win()'],['../structTetriminiPool.html#a3a7d968487a873a6427c34e6162a2d7f',1,'TetriminiPool::win()']]] +]; diff --git a/doxygen/html/singleplayer_8c.html b/doxygen/html/singleplayer_8c.html new file mode 100644 index 0000000..7d46268 --- /dev/null +++ b/doxygen/html/singleplayer_8c.html @@ -0,0 +1,287 @@ + + + + + + + +Tetrix: Riferimenti per il file src/singleplayer.c + + + + + + + + + +
    +
    + + + + + + + +
    +
    Tetrix +  1.0.0 +
    +
    Tetrix by Davide Antonio Amodio, Luca Boffo, Alvise Favero
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    + +
    +
    Riferimenti per il file singleplayer.c
    +
    +
    +
    #include <ncurses.h>
    +#include <string.h>
    +#include <stdlib.h>
    +#include <time.h>
    +#include "../include/player.h"
    +#include "../include/gamefield.h"
    +#include "../include/tetrimino.h"
    +#include "../include/functions.h"
    +#include "../include/constants.h"
    +
    +Grafo delle dipendenze di inclusione per singleplayer.c:
    +
    +
    + + + + + + + + + + + + +
    +
    + + + + + + + + + + + + + +

    +Funzioni

    void single_continue_game (player_t *player, gamefield_t *gameField, tetrimini_pool_t *pool, pointboard_t *points)
     corpo principale del gioco che si alterna fra scelta blocco e drop dello stesso controllando eventuali perdite, righe riempite ecc... Continua...
     
    void end_game (gamefield_t *gameField, tetrimini_pool_t *pool, pointboard_t *points, player_t *player, unsigned int start_time, int moves)
     gestisce la fine della partita e dealloca tutto ció che é stato usato. Continua...
     
    void new_game_single ()
     inizia una partita in single player Continua...
     
    void instructions (char *nickname)
     stampa le istruzioni per la partita in singleplayer. Continua...
     
    +

    Documentazione delle funzioni

    + +

    ◆ end_game()

    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    void end_game (gamefield_tgameField,
    tetrimini_pool_tpool,
    pointboard_tpoints,
    player_tplayer,
    unsigned int start_time,
    int moves 
    )
    +
    + +

    gestisce la fine della partita e dealloca tutto ció che é stato usato.

    +
    Parametri
    + + + + + + + +
    [in]gameFieldIl puntatore al campo da gioco del giocatore.
    [in]poolLa pool usata in partita con i tetramini rimanenti. (serve per deallocarla)
    [in]pointsIl puntatore al punteggio del giocatore.
    [in]playerIl puntatore al giocatore.
    [in]start_timetimestamp di inizio della partita.
    [in]movesIl numero di mosse effettuate.
    +
    +
    + +
    +
    + +

    ◆ instructions()

    + +
    +
    + + + + + + + + +
    void instructions (char * nickname)
    +
    + +

    stampa le istruzioni per la partita in singleplayer.

    +
    Parametri
    + + +
    [in]nicknamepuntatore al nome del giocatore.
    +
    +
    + +
    +
    + +

    ◆ new_game_single()

    + +
    +
    + + + + + + + +
    void new_game_single ()
    +
    + +

    inizia una partita in single player

    + +
    +
    + +

    ◆ single_continue_game()

    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    void single_continue_game (player_tplayer,
    gamefield_tgameField,
    tetrimini_pool_tpool,
    pointboard_tpoints 
    )
    +
    + +

    corpo principale del gioco che si alterna fra scelta blocco e drop dello stesso controllando eventuali perdite, righe riempite ecc...

    +
    Parametri
    + + + + + +
    [in]playerIl puntatore al giocatore.
    [in]gameFieldIl puntatore al campo da gioco del giocatore.
    [in]poolLa pool usata in partita con i tetramini rimanenti.
    [in]pointsIl puntatore al punteggio del giocatore.
    +
    +
    + +
    +
    +
    + + + + diff --git a/doxygen/html/singleplayer_8c__incl.md5 b/doxygen/html/singleplayer_8c__incl.md5 new file mode 100644 index 0000000..1bc2035 --- /dev/null +++ b/doxygen/html/singleplayer_8c__incl.md5 @@ -0,0 +1 @@ +17bb9bc7a48306c0d27f2ef8053f5c66 \ No newline at end of file diff --git a/doxygen/html/singleplayer_8c__incl.png b/doxygen/html/singleplayer_8c__incl.png new file mode 100644 index 0000000..4e9e22a Binary files /dev/null and b/doxygen/html/singleplayer_8c__incl.png differ diff --git a/doxygen/html/splitbar.png b/doxygen/html/splitbar.png new file mode 100644 index 0000000..fe895f2 Binary files /dev/null and b/doxygen/html/splitbar.png differ diff --git a/doxygen/html/structGameField-members.html b/doxygen/html/structGameField-members.html new file mode 100644 index 0000000..48f374a --- /dev/null +++ b/doxygen/html/structGameField-members.html @@ -0,0 +1,82 @@ + + + + + + + +Tetrix: Elenco dei membri + + + + + + + + + +
    +
    + + + + + + + +
    +
    Tetrix +  1.0.0 +
    +
    Tetrix by Davide Antonio Amodio, Luca Boffo, Alvise Favero
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + +
    +
    +
    +
    GameField Elenco dei membri
    +
    +
    + +

    Questo è l'elenco completo di tutti i membri di GameField, inclusi tutti i membri ereditati.

    + + + +
    fieldGameField
    winGameField
    + + + + diff --git a/doxygen/html/structGameField.html b/doxygen/html/structGameField.html new file mode 100644 index 0000000..8b9a0af --- /dev/null +++ b/doxygen/html/structGameField.html @@ -0,0 +1,125 @@ + + + + + + + +Tetrix: Riferimenti per la struct GameField + + + + + + + + + +
    +
    + + + + + + + +
    +
    Tetrix +  1.0.0 +
    +
    Tetrix by Davide Antonio Amodio, Luca Boffo, Alvise Favero
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + +
    +
    + +
    +
    Riferimenti per la struct GameField
    +
    +
    + +

    struct contentente il puntatore alla matrice del campo di gioco e il puntatore alla finestra di ncurses. + Continua...

    + + + + + + +

    +Attributi pubblici

    int * field
     
    WINDOW * win
     
    +

    Descrizione dettagliata

    +

    struct contentente il puntatore alla matrice del campo di gioco e il puntatore alla finestra di ncurses.

    +

    Documentazione dei membri dato

    + +

    ◆ field

    + +
    +
    + + + + +
    int* GameField::field
    +
    + +
    +
    + +

    ◆ win

    + +
    +
    + + + + +
    WINDOW* GameField::win
    +
    + +
    +
    +
    La documentazione per questa struct è stata generata a partire dal seguente file: +
    + + + + diff --git a/doxygen/html/structPlayer-members.html b/doxygen/html/structPlayer-members.html new file mode 100644 index 0000000..e718c15 --- /dev/null +++ b/doxygen/html/structPlayer-members.html @@ -0,0 +1,82 @@ + + + + + + + +Tetrix: Elenco dei membri + + + + + + + + + +
    +
    + + + + + + + +
    +
    Tetrix +  1.0.0 +
    +
    Tetrix by Davide Antonio Amodio, Luca Boffo, Alvise Favero
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + +
    +
    +
    +
    Player Elenco dei membri
    +
    +
    + +

    Questo è l'elenco completo di tutti i membri di Player, inclusi tutti i membri ereditati.

    + + + +
    nicknamePlayer
    pointsPlayer
    + + + + diff --git a/doxygen/html/structPlayer.html b/doxygen/html/structPlayer.html new file mode 100644 index 0000000..c9b3445 --- /dev/null +++ b/doxygen/html/structPlayer.html @@ -0,0 +1,120 @@ + + + + + + + +Tetrix: Riferimenti per la struct Player + + + + + + + + + +
    +
    + + + + + + + +
    +
    Tetrix +  1.0.0 +
    +
    Tetrix by Davide Antonio Amodio, Luca Boffo, Alvise Favero
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + +
    +
    + +
    +
    Riferimenti per la struct Player
    +
    +
    + + + + + + +

    +Attributi pubblici

    unsigned int points
     
    char * nickname
     
    +

    Documentazione dei membri dato

    + +

    ◆ nickname

    + +
    +
    + + + + +
    char* Player::nickname
    +
    + +
    +
    + +

    ◆ points

    + +
    +
    + + + + +
    unsigned int Player::points
    +
    + +
    +
    +
    La documentazione per questa struct è stata generata a partire dal seguente file: +
    + + + + diff --git a/doxygen/html/structPointBoard-members.html b/doxygen/html/structPointBoard-members.html new file mode 100644 index 0000000..3ddb3a7 --- /dev/null +++ b/doxygen/html/structPointBoard-members.html @@ -0,0 +1,83 @@ + + + + + + + +Tetrix: Elenco dei membri + + + + + + + + + +
    +
    + + + + + + + +
    +
    Tetrix +  1.0.0 +
    +
    Tetrix by Davide Antonio Amodio, Luca Boffo, Alvise Favero
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + +
    +
    +
    +
    PointBoard Elenco dei membri
    +
    +
    + +

    Questo è l'elenco completo di tutti i membri di PointBoard, inclusi tutti i membri ereditati.

    + + + + +
    player_1PointBoard
    player_2PointBoard
    winPointBoard
    + + + + diff --git a/doxygen/html/structPointBoard.html b/doxygen/html/structPointBoard.html new file mode 100644 index 0000000..616e67d --- /dev/null +++ b/doxygen/html/structPointBoard.html @@ -0,0 +1,150 @@ + + + + + + + +Tetrix: Riferimenti per la struct PointBoard + + + + + + + + + +
    +
    + + + + + + + +
    +
    Tetrix +  1.0.0 +
    +
    Tetrix by Davide Antonio Amodio, Luca Boffo, Alvise Favero
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + +
    +
    + +
    +
    Riferimenti per la struct PointBoard
    +
    +
    + +

    struct della tabella dei punti, contiene la finestra di ncurses e il/i puntatore/i al/ai player. + Continua...

    +
    +Diagramma di collaborazione per PointBoard:
    +
    +
    Collaboration graph
    + + + + +
    [legenda]
    + + + + + + + + +

    +Attributi pubblici

    WINDOW * win
     
    player_tplayer_1
     
    player_tplayer_2
     
    +

    Descrizione dettagliata

    +

    struct della tabella dei punti, contiene la finestra di ncurses e il/i puntatore/i al/ai player.

    +

    Documentazione dei membri dato

    + +

    ◆ player_1

    + +
    +
    + + + + +
    player_t* PointBoard::player_1
    +
    + +
    +
    + +

    ◆ player_2

    + +
    +
    + + + + +
    player_t* PointBoard::player_2
    +
    + +
    +
    + +

    ◆ win

    + +
    +
    + + + + +
    WINDOW* PointBoard::win
    +
    + +
    +
    +
    La documentazione per questa struct è stata generata a partire dal seguente file: +
    + + + + diff --git a/doxygen/html/structPointBoard__coll__graph.md5 b/doxygen/html/structPointBoard__coll__graph.md5 new file mode 100644 index 0000000..3fe6cb4 --- /dev/null +++ b/doxygen/html/structPointBoard__coll__graph.md5 @@ -0,0 +1 @@ +cb62ffa27caff98bcb7ce9ebad1028e8 \ No newline at end of file diff --git a/doxygen/html/structPointBoard__coll__graph.png b/doxygen/html/structPointBoard__coll__graph.png new file mode 100644 index 0000000..b978843 Binary files /dev/null and b/doxygen/html/structPointBoard__coll__graph.png differ diff --git a/doxygen/html/structStrategy-members.html b/doxygen/html/structStrategy-members.html new file mode 100644 index 0000000..2438bec --- /dev/null +++ b/doxygen/html/structStrategy-members.html @@ -0,0 +1,85 @@ + + + + + + + +Tetrix: Elenco dei membri + + + + + + + + + +
    +
    + + + + + + + +
    +
    Tetrix +  1.0.0 +
    +
    Tetrix by Davide Antonio Amodio, Luca Boffo, Alvise Favero
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + +
    +
    +
    +
    Strategy Elenco dei membri
    +
    +
    + +

    Questo è l'elenco completo di tutti i membri di Strategy, inclusi tutti i membri ereditati.

    + + + + + + +
    cursorStrategy
    fieldStrategy
    rotationStrategy
    scoreStrategy
    tetStrategy
    + + + + diff --git a/doxygen/html/structStrategy.html b/doxygen/html/structStrategy.html new file mode 100644 index 0000000..149aab5 --- /dev/null +++ b/doxygen/html/structStrategy.html @@ -0,0 +1,173 @@ + + + + + + + +Tetrix: Riferimenti per la struct Strategy + + + + + + + + + +
    +
    + + + + + + + +
    +
    Tetrix +  1.0.0 +
    +
    Tetrix by Davide Antonio Amodio, Luca Boffo, Alvise Favero
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + +
    +
    + +
    +
    Riferimenti per la struct Strategy
    +
    +
    + +

    struct della strategia di gioco, contentiene il suo campo da gioco e il "punteggio" della strategia. + Continua...

    + + + + + + + + + + + + +

    +Attributi pubblici

    int score
     
    int tet
     
    int rotation
     
    int cursor
     
    int * field
     
    +

    Descrizione dettagliata

    +

    struct della strategia di gioco, contentiene il suo campo da gioco e il "punteggio" della strategia.

    +

    Documentazione dei membri dato

    + +

    ◆ cursor

    + +
    +
    + + + + +
    int Strategy::cursor
    +
    + +
    +
    + +

    ◆ field

    + +
    +
    + + + + +
    int* Strategy::field
    +
    + +
    +
    + +

    ◆ rotation

    + +
    +
    + + + + +
    int Strategy::rotation
    +
    + +
    +
    + +

    ◆ score

    + +
    +
    + + + + +
    int Strategy::score
    +
    + +
    +
    + +

    ◆ tet

    + +
    +
    + + + + +
    int Strategy::tet
    +
    + +
    +
    +
    La documentazione per questa struct è stata generata a partire dal seguente file: +
    + + + + diff --git a/doxygen/html/structTetriminiPool-members.html b/doxygen/html/structTetriminiPool-members.html new file mode 100644 index 0000000..95df266 --- /dev/null +++ b/doxygen/html/structTetriminiPool-members.html @@ -0,0 +1,83 @@ + + + + + + + +Tetrix: Elenco dei membri + + + + + + + + + +
    +
    + + + + + + + +
    +
    Tetrix +  1.0.0 +
    +
    Tetrix by Davide Antonio Amodio, Luca Boffo, Alvise Favero
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + +
    +
    +
    +
    TetriminiPool Elenco dei membri
    +
    +
    + +

    Questo è l'elenco completo di tutti i membri di TetriminiPool, inclusi tutti i membri ereditati.

    + + + + +
    rem_tetriminosTetriminiPool
    total_tetriminosTetriminiPool
    winTetriminiPool
    + + + + diff --git a/doxygen/html/structTetriminiPool.html b/doxygen/html/structTetriminiPool.html new file mode 100644 index 0000000..c89fa62 --- /dev/null +++ b/doxygen/html/structTetriminiPool.html @@ -0,0 +1,141 @@ + + + + + + + +Tetrix: Riferimenti per la struct TetriminiPool + + + + + + + + + +
    +
    + + + + + + + +
    +
    Tetrix +  1.0.0 +
    +
    Tetrix by Davide Antonio Amodio, Luca Boffo, Alvise Favero
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + +
    +
    + +
    +
    Riferimenti per la struct TetriminiPool
    +
    +
    + +

    La struct della finestra con tutti i pezzi dei tetramini rimanenti. + Continua...

    + + + + + + + + +

    +Attributi pubblici

    WINDOW * win
     
    int * rem_tetriminos
     
    int total_tetriminos
     
    +

    Descrizione dettagliata

    +

    La struct della finestra con tutti i pezzi dei tetramini rimanenti.

    +

    Documentazione dei membri dato

    + +

    ◆ rem_tetriminos

    + +
    +
    + + + + +
    int* TetriminiPool::rem_tetriminos
    +
    + +
    +
    + +

    ◆ total_tetriminos

    + +
    +
    + + + + +
    int TetriminiPool::total_tetriminos
    +
    + +
    +
    + +

    ◆ win

    + +
    +
    + + + + +
    WINDOW* TetriminiPool::win
    +
    + +
    +
    +
    La documentazione per questa struct è stata generata a partire dal seguente file: +
    + + + + diff --git a/doxygen/html/structTetrimino-members.html b/doxygen/html/structTetrimino-members.html new file mode 100644 index 0000000..0a1ec50 --- /dev/null +++ b/doxygen/html/structTetrimino-members.html @@ -0,0 +1,84 @@ + + + + + + + +Tetrix: Elenco dei membri + + + + + + + + + +
    +
    + + + + + + + +
    +
    Tetrix +  1.0.0 +
    +
    Tetrix by Davide Antonio Amodio, Luca Boffo, Alvise Favero
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + +
    +
    +
    +
    Tetrimino Elenco dei membri
    +
    +
    + +

    Questo è l'elenco completo di tutti i membri di Tetrimino, inclusi tutti i membri ereditati.

    + + + + + +
    colsTetrimino
    rowsTetrimino
    typeTetrimino
    valuesTetrimino
    + + + + diff --git a/doxygen/html/structTetrimino.html b/doxygen/html/structTetrimino.html new file mode 100644 index 0000000..50b73f6 --- /dev/null +++ b/doxygen/html/structTetrimino.html @@ -0,0 +1,159 @@ + + + + + + + +Tetrix: Riferimenti per la struct Tetrimino + + + + + + + + + +
    +
    + + + + + + + +
    +
    Tetrix +  1.0.0 +
    +
    Tetrix by Davide Antonio Amodio, Luca Boffo, Alvise Favero
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + +
    +
    + +
    +
    Riferimenti per la struct Tetrimino
    +
    +
    + +

    Non è un typo, in inglese si scrive così. + Continua...

    + + + + + + + + + + +

    +Attributi pubblici

    int * values
     
    int cols
     
    int rows
     
    tetrimino_type_t type
     
    +

    Descrizione dettagliata

    +

    Non è un typo, in inglese si scrive così.

    +

    L'idea è di salvare ogni tetramino in una matrice e salvarci affianco la larghezza, l'altezza e il tipo, in questo modo diventa più facile gestire la caduta dall'alto, i bordi del campo e la rotazione.

    +

    Inoltre il valore assegnato ad ogni campo della matrice si riferisce al colore. ATTENZIONE: ricordarsi ogni volta di deallocare il tetramino

    +

    Documentazione dei membri dato

    + +

    ◆ cols

    + +
    +
    + + + + +
    int Tetrimino::cols
    +
    + +
    +
    + +

    ◆ rows

    + +
    +
    + + + + +
    int Tetrimino::rows
    +
    + +
    +
    + +

    ◆ type

    + +
    +
    + + + + +
    tetrimino_type_t Tetrimino::type
    +
    + +
    +
    + +

    ◆ values

    + +
    +
    + + + + +
    int* Tetrimino::values
    +
    + +
    +
    +
    La documentazione per questa struct è stata generata a partire dal seguente file: +
    + + + + diff --git a/doxygen/html/sync_off.png b/doxygen/html/sync_off.png new file mode 100644 index 0000000..3b443fc Binary files /dev/null and b/doxygen/html/sync_off.png differ diff --git a/doxygen/html/sync_on.png b/doxygen/html/sync_on.png new file mode 100644 index 0000000..e08320f Binary files /dev/null and b/doxygen/html/sync_on.png differ diff --git a/doxygen/html/tab_a.png b/doxygen/html/tab_a.png new file mode 100644 index 0000000..3b725c4 Binary files /dev/null and b/doxygen/html/tab_a.png differ diff --git a/doxygen/html/tab_b.png b/doxygen/html/tab_b.png new file mode 100644 index 0000000..e2b4a86 Binary files /dev/null and b/doxygen/html/tab_b.png differ diff --git a/doxygen/html/tab_h.png b/doxygen/html/tab_h.png new file mode 100644 index 0000000..fd5cb70 Binary files /dev/null and b/doxygen/html/tab_h.png differ diff --git a/doxygen/html/tab_s.png b/doxygen/html/tab_s.png new file mode 100644 index 0000000..ab478c9 Binary files /dev/null and b/doxygen/html/tab_s.png differ diff --git a/doxygen/html/tabs.css b/doxygen/html/tabs.css new file mode 100644 index 0000000..85a0cd5 --- /dev/null +++ b/doxygen/html/tabs.css @@ -0,0 +1 @@ +.sm{position:relative;z-index:9999}.sm,.sm ul,.sm li{display:block;list-style:none;margin:0;padding:0;line-height:normal;direction:ltr;text-align:left;-webkit-tap-highlight-color:rgba(0,0,0,0)}.sm-rtl,.sm-rtl ul,.sm-rtl li{direction:rtl;text-align:right}.sm>li>h1,.sm>li>h2,.sm>li>h3,.sm>li>h4,.sm>li>h5,.sm>li>h6{margin:0;padding:0}.sm ul{display:none}.sm li,.sm a{position:relative}.sm a{display:block}.sm a.disabled{cursor:not-allowed}.sm:after{content:"\00a0";display:block;height:0;font:0/0 serif;clear:both;visibility:hidden;overflow:hidden}.sm,.sm *,.sm *:before,.sm *:after{-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box}.sm-dox{background-image:url("tab_b.png")}.sm-dox a,.sm-dox a:focus,.sm-dox a:hover,.sm-dox a:active{padding:0 12px;padding-right:43px;font-family:"Lucida Grande","Geneva","Helvetica",Arial,sans-serif;font-size:13px;font-weight:bold;line-height:36px;text-decoration:none;text-shadow:0 1px 1px rgba(255,255,255,0.9);color:#283a5d;outline:0}.sm-dox a:hover{background-image:url("tab_a.png");background-repeat:repeat-x;color:white;text-shadow:0 1px 1px black}.sm-dox a.current{color:#d23600}.sm-dox a.disabled{color:#bbb}.sm-dox a span.sub-arrow{position:absolute;top:50%;margin-top:-14px;left:auto;right:3px;width:28px;height:28px;overflow:hidden;font:bold 12px/28px monospace!important;text-align:center;text-shadow:none;background:rgba(255,255,255,0.5);-moz-border-radius:5px;-webkit-border-radius:5px;border-radius:5px}.sm-dox a.highlighted span.sub-arrow:before{display:block;content:'-'}.sm-dox>li:first-child>a,.sm-dox>li:first-child>:not(ul) a{-moz-border-radius:5px 5px 0 0;-webkit-border-radius:5px;border-radius:5px 5px 0 0}.sm-dox>li:last-child>a,.sm-dox>li:last-child>*:not(ul) a,.sm-dox>li:last-child>ul,.sm-dox>li:last-child>ul>li:last-child>a,.sm-dox>li:last-child>ul>li:last-child>*:not(ul) a,.sm-dox>li:last-child>ul>li:last-child>ul,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>a,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>*:not(ul) a,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>a,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>*:not(ul) a,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>a,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>*:not(ul) a,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul{-moz-border-radius:0 0 5px 5px;-webkit-border-radius:0;border-radius:0 0 5px 5px}.sm-dox>li:last-child>a.highlighted,.sm-dox>li:last-child>*:not(ul) a.highlighted,.sm-dox>li:last-child>ul>li:last-child>a.highlighted,.sm-dox>li:last-child>ul>li:last-child>*:not(ul) a.highlighted,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>a.highlighted,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>*:not(ul) a.highlighted,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>a.highlighted,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>*:not(ul) a.highlighted,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>a.highlighted,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>*:not(ul) a.highlighted{-moz-border-radius:0;-webkit-border-radius:0;border-radius:0}.sm-dox ul{background:rgba(162,162,162,0.1)}.sm-dox ul a,.sm-dox ul a:focus,.sm-dox ul a:hover,.sm-dox ul a:active{font-size:12px;border-left:8px solid transparent;line-height:36px;text-shadow:none;background-color:white;background-image:none}.sm-dox ul a:hover{background-image:url("tab_a.png");background-repeat:repeat-x;color:white;text-shadow:0 1px 1px black}.sm-dox ul ul a,.sm-dox ul ul a:hover,.sm-dox ul ul a:focus,.sm-dox ul ul a:active{border-left:16px solid transparent}.sm-dox ul ul ul a,.sm-dox ul ul ul a:hover,.sm-dox ul ul ul a:focus,.sm-dox ul ul ul a:active{border-left:24px solid transparent}.sm-dox ul ul ul ul a,.sm-dox ul ul ul ul a:hover,.sm-dox ul ul ul ul a:focus,.sm-dox ul ul ul ul a:active{border-left:32px solid transparent}.sm-dox ul ul ul ul ul a,.sm-dox ul ul ul ul ul a:hover,.sm-dox ul ul ul ul ul a:focus,.sm-dox ul ul ul ul ul a:active{border-left:40px solid transparent}@media(min-width:768px){.sm-dox ul{position:absolute;width:12em}.sm-dox li{float:left}.sm-dox.sm-rtl li{float:right}.sm-dox ul li,.sm-dox.sm-rtl ul li,.sm-dox.sm-vertical li{float:none}.sm-dox a{white-space:nowrap}.sm-dox ul a,.sm-dox.sm-vertical a{white-space:normal}.sm-dox .sm-nowrap>li>a,.sm-dox .sm-nowrap>li>:not(ul) a{white-space:nowrap}.sm-dox{padding:0 10px;background-image:url("tab_b.png");line-height:36px}.sm-dox a span.sub-arrow{top:50%;margin-top:-2px;right:12px;width:0;height:0;border-width:4px;border-style:solid dashed dashed dashed;border-color:#283a5d transparent transparent transparent;background:transparent;-moz-border-radius:0;-webkit-border-radius:0;border-radius:0}.sm-dox a,.sm-dox a:focus,.sm-dox a:active,.sm-dox a:hover,.sm-dox a.highlighted{padding:0 12px;background-image:url("tab_s.png");background-repeat:no-repeat;background-position:right;-moz-border-radius:0!important;-webkit-border-radius:0;border-radius:0!important}.sm-dox a:hover{background-image:url("tab_a.png");background-repeat:repeat-x;color:white;text-shadow:0 1px 1px black}.sm-dox a:hover span.sub-arrow{border-color:white transparent transparent transparent}.sm-dox a.has-submenu{padding-right:24px}.sm-dox li{border-top:0}.sm-dox>li>ul:before,.sm-dox>li>ul:after{content:'';position:absolute;top:-18px;left:30px;width:0;height:0;overflow:hidden;border-width:9px;border-style:dashed dashed solid dashed;border-color:transparent transparent #bbb transparent}.sm-dox>li>ul:after{top:-16px;left:31px;border-width:8px;border-color:transparent transparent #fff transparent}.sm-dox ul{border:1px solid #bbb;padding:5px 0;background:#fff;-moz-border-radius:5px!important;-webkit-border-radius:5px;border-radius:5px!important;-moz-box-shadow:0 5px 9px rgba(0,0,0,0.2);-webkit-box-shadow:0 5px 9px rgba(0,0,0,0.2);box-shadow:0 5px 9px rgba(0,0,0,0.2)}.sm-dox ul a span.sub-arrow{right:8px;top:50%;margin-top:-5px;border-width:5px;border-color:transparent transparent transparent #555;border-style:dashed dashed dashed solid}.sm-dox ul a,.sm-dox ul a:hover,.sm-dox ul a:focus,.sm-dox ul a:active,.sm-dox ul a.highlighted{color:#555;background-image:none;border:0!important;color:#555;background-image:none}.sm-dox ul a:hover{background-image:url("tab_a.png");background-repeat:repeat-x;color:white;text-shadow:0 1px 1px black}.sm-dox ul a:hover span.sub-arrow{border-color:transparent transparent transparent white}.sm-dox span.scroll-up,.sm-dox span.scroll-down{position:absolute;display:none;visibility:hidden;overflow:hidden;background:#fff;height:36px}.sm-dox span.scroll-up:hover,.sm-dox span.scroll-down:hover{background:#eee}.sm-dox span.scroll-up:hover span.scroll-up-arrow,.sm-dox span.scroll-up:hover span.scroll-down-arrow{border-color:transparent transparent #d23600 transparent}.sm-dox span.scroll-down:hover span.scroll-down-arrow{border-color:#d23600 transparent transparent transparent}.sm-dox span.scroll-up-arrow,.sm-dox span.scroll-down-arrow{position:absolute;top:0;left:50%;margin-left:-6px;width:0;height:0;overflow:hidden;border-width:6px;border-style:dashed dashed solid dashed;border-color:transparent transparent #555 transparent}.sm-dox span.scroll-down-arrow{top:8px;border-style:solid dashed dashed dashed;border-color:#555 transparent transparent transparent}.sm-dox.sm-rtl a.has-submenu{padding-right:12px;padding-left:24px}.sm-dox.sm-rtl a span.sub-arrow{right:auto;left:12px}.sm-dox.sm-rtl.sm-vertical a.has-submenu{padding:10px 20px}.sm-dox.sm-rtl.sm-vertical a span.sub-arrow{right:auto;left:8px;border-style:dashed solid dashed dashed;border-color:transparent #555 transparent transparent}.sm-dox.sm-rtl>li>ul:before{left:auto;right:30px}.sm-dox.sm-rtl>li>ul:after{left:auto;right:31px}.sm-dox.sm-rtl ul a.has-submenu{padding:10px 20px!important}.sm-dox.sm-rtl ul a span.sub-arrow{right:auto;left:8px;border-style:dashed solid dashed dashed;border-color:transparent #555 transparent transparent}.sm-dox.sm-vertical{padding:10px 0;-moz-border-radius:5px;-webkit-border-radius:5px;border-radius:5px}.sm-dox.sm-vertical a{padding:10px 20px}.sm-dox.sm-vertical a:hover,.sm-dox.sm-vertical a:focus,.sm-dox.sm-vertical a:active,.sm-dox.sm-vertical a.highlighted{background:#fff}.sm-dox.sm-vertical a.disabled{background-image:url("tab_b.png")}.sm-dox.sm-vertical a span.sub-arrow{right:8px;top:50%;margin-top:-5px;border-width:5px;border-style:dashed dashed dashed solid;border-color:transparent transparent transparent #555}.sm-dox.sm-vertical>li>ul:before,.sm-dox.sm-vertical>li>ul:after{display:none}.sm-dox.sm-vertical ul a{padding:10px 20px}.sm-dox.sm-vertical ul a:hover,.sm-dox.sm-vertical ul a:focus,.sm-dox.sm-vertical ul a:active,.sm-dox.sm-vertical ul a.highlighted{background:#eee}.sm-dox.sm-vertical ul a.disabled{background:#fff}} \ No newline at end of file diff --git a/doxygen/html/tester_8c.html b/doxygen/html/tester_8c.html new file mode 100644 index 0000000..2aa48fb --- /dev/null +++ b/doxygen/html/tester_8c.html @@ -0,0 +1,123 @@ + + + + + + + +Tetrix: Riferimenti per il file src/tester.c + + + + + + + + + +
    +
    + + + + + + + +
    +
    Tetrix +  1.0.0 +
    +
    Tetrix by Davide Antonio Amodio, Luca Boffo, Alvise Favero
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    + +
    +
    Riferimenti per il file tester.c
    +
    +
    +
    #include <stdio.h>
    +#include <ncurses.h>
    +#include <functions.h>
    +#include <tetrimino.h>
    +
    +Grafo delle dipendenze di inclusione per tester.c:
    +
    +
    + + + + + + + +
    +
    + + + +

    +Funzioni

    int main ()
     
    +

    Documentazione delle funzioni

    + +

    ◆ main()

    + +
    +
    + + + + + + + +
    int main ()
    +
    + +
    +
    +
    + + + + diff --git a/doxygen/html/tester_8c__incl.md5 b/doxygen/html/tester_8c__incl.md5 new file mode 100644 index 0000000..2733ae4 --- /dev/null +++ b/doxygen/html/tester_8c__incl.md5 @@ -0,0 +1 @@ +aede9b7592d8323f30e7d5c56f84ebc1 \ No newline at end of file diff --git a/doxygen/html/tester_8c__incl.png b/doxygen/html/tester_8c__incl.png new file mode 100644 index 0000000..08de03e Binary files /dev/null and b/doxygen/html/tester_8c__incl.png differ diff --git a/doxygen/html/tetrimino_8c.html b/doxygen/html/tetrimino_8c.html new file mode 100644 index 0000000..ba5f31c --- /dev/null +++ b/doxygen/html/tetrimino_8c.html @@ -0,0 +1,942 @@ + + + + + + + +Tetrix: Riferimenti per il file src/tetrimino.c + + + + + + + + + +
    +
    + + + + + + + +
    +
    Tetrix +  1.0.0 +
    +
    Tetrix by Davide Antonio Amodio, Luca Boffo, Alvise Favero
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    + +
    +
    Riferimenti per il file tetrimino.c
    +
    +
    +
    #include <ncurses.h>
    +#include <malloc.h>
    +#include "../include/tetrimino.h"
    +#include "../include/gamefield.h"
    +#include "../include/constants.h"
    +#include "../include/functions.h"
    +
    +Grafo delle dipendenze di inclusione per tetrimino.c:
    +
    +
    + + + + + + + + + +
    +
    + + + + + + + +

    +Composti

    struct  Tetrimino
     Non è un typo, in inglese si scrive così. Continua...
     
    struct  TetriminiPool
     La struct della finestra con tutti i pezzi dei tetramini rimanenti. Continua...
     
    + + + + + + + +

    +Ridefinizioni di tipo (typedef)

    typedef struct Tetrimino tetrimino_t
     Non è un typo, in inglese si scrive così. Continua...
     
    typedef struct TetriminiPool tetrimini_pool_t
     La struct della finestra con tutti i pezzi dei tetramini rimanenti. Continua...
     
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

    +Funzioni

    tetrimino_tget_tetrimino (int type)
     Genera il tetramino dato il suo enum. Continua...
     
    void free_tetrimino (tetrimino_t *t)
     Libera la memoria allocata dal tetrimino. Continua...
     
    void print_tetrimino (WINDOW *w, tetrimino_t *t, int y, int x)
     funzione che printa i tetramini, ATTENZIONE: SI PARTE A PRINTARE DA X0 Y0 DEL TETRAMINO. Continua...
     
    tetrimini_pool_tinitialize_pool (int y, int x)
     funzione per inizializzare la pool dove sono presenti tutti i tetramini rimasti. Continua...
     
    void free_pool (tetrimini_pool_t *p)
     free della pool di tetramini. Continua...
     
    void print_menu_style (int i, tetrimini_pool_t *pool)
     Funzione STUB che stampa i tetramini in modalitá "menu". Continua...
     
    int select_tetrimino (tetrimini_pool_t *pool)
     permette di accedere al metodo di selezione dei tetramini. Continua...
     
    void linear_rotate (tetrimino_t *t, int dir)
     Semplice algoritmo per ruotare un tetramino, sviluppato attraverso l'algebra lineare. Le posizioni dei blocchi vengono trattate come dei vettori e l'algoritmo è una applicazione lineare. Lo spazio vettoriale è $ V= \mathbb{R}^2 $ con base. Continua...
     
    int safe_rotate_tetrimino (tetrimino_t *t, int cur_pos, int dir)
     Stub di rotateLinear che verifica la fattibilitá della rotazione altrimenti non ruota. Continua...
     
    void refresh_pool (tetrimini_pool_t *p)
     refresh della pool. Continua...
     
    void remove_tetrimino_from_pool (int i, tetrimini_pool_t *p)
     rimuove un'unitá di un tetramino dalla pool. Continua...
     
    void add_tetrimino_from_pool (int i, tetrimini_pool_t *p)
     aggiunge un'unitá di un tetramino dalla pool. Continua...
     
    int no_tetriminos_left (tetrimini_pool_t *pool)
     controlla se ci sono tetramini rimanenti. Continua...
     
    WINDOW * get_pool_win (tetrimini_pool_t *t)
     restituisce la finestra della pool di tetramini. Continua...
     
    int get_remaining_tetriminos (tetrimini_pool_t *pool, tetrimino_type_t type)
     Restituisce il numero di tetramini rimasti per il tipo passato per parametro. Continua...
     
    int get_tet_rows (tetrimino_t *t)
     restituisce il numero di righe di un tetramino. Continua...
     
    int get_tet_cols (tetrimino_t *t)
     restituisce il numero di colonne di un tetramino. Continua...
     
    int * get_tet_values (tetrimino_t *t)
     restituisce l'array di valori di un tetramino. Continua...
     
    int get_tet_type (tetrimino_t *t)
     restituisce il tipo di tetramino. Continua...
     
    int get_tet_color (tetrimino_t *t)
     restituisce il colore del tetramino. Continua...
     
    int is_safe_to_place_tet (tetrimino_t *t)
     funzione stub che ci permette di capire se il tetramino che vogliamo piazzare ha celle vuote sotto. ES: il tet T_T piazzato a testa in giú blocca automaticamente almeno due celle. Continua...
     
    int are_tet_equal (tetrimino_t *f, tetrimino_t *s)
     confronta pezzo per pezzo due tetramini per stabilire se sono uguali. Continua...
     
    +

    Documentazione delle ridefinizioni di tipo (typedef)

    + +

    ◆ tetrimini_pool_t

    + +
    +
    + + + + +
    typedef struct TetriminiPool tetrimini_pool_t
    +
    + +

    La struct della finestra con tutti i pezzi dei tetramini rimanenti.

    + +
    +
    + +

    ◆ tetrimino_t

    + +
    +
    + + + + +
    typedef struct Tetrimino tetrimino_t
    +
    + +

    Non è un typo, in inglese si scrive così.

    +

    L'idea è di salvare ogni tetramino in una matrice e salvarci affianco la larghezza, l'altezza e il tipo, in questo modo diventa più facile gestire la caduta dall'alto, i bordi del campo e la rotazione.

    +

    Inoltre il valore assegnato ad ogni campo della matrice si riferisce al colore. ATTENZIONE: ricordarsi ogni volta di deallocare il tetramino

    + +
    +
    +

    Documentazione delle funzioni

    + +

    ◆ add_tetrimino_from_pool()

    + +
    +
    + + + + + + + + + + + + + + + + + + +
    void add_tetrimino_from_pool (int i,
    tetrimini_pool_tp 
    )
    +
    + +

    aggiunge un'unitá di un tetramino dalla pool.

    +
    Parametri
    + + + +
    [in]iil tipo di tetramino dalla quale aggiungere un'unitá.
    [in]pla pool di tetramini.
    +
    +
    + +
    +
    + +

    ◆ are_tet_equal()

    + +
    +
    + + + + + + + + + + + + + + + + + + +
    int are_tet_equal (tetrimino_tf,
    tetrimino_ts 
    )
    +
    + +

    confronta pezzo per pezzo due tetramini per stabilire se sono uguali.

    +
    Parametri
    + + + +
    [in]fil puntatore al primo tetramino.
    [in]sil puntatore al secondo tetramino.
    +
    +
    +
    Restituisce
    0 se sono diversi, 1 altrimenti.
    + +
    +
    + +

    ◆ free_pool()

    + +
    +
    + + + + + + + + +
    void free_pool (tetrimini_pool_tp)
    +
    + +

    free della pool di tetramini.

    +
    Parametri
    + + +
    [in]pLa pool.
    +
    +
    + +
    +
    + +

    ◆ free_tetrimino()

    + +
    +
    + + + + + + + + +
    void free_tetrimino (tetrimino_tt)
    +
    + +

    Libera la memoria allocata dal tetrimino.

    +
    Parametri
    + + +
    [in]tIl tetrimino da deallocare.
    +
    +
    + +
    +
    + +

    ◆ get_pool_win()

    + +
    +
    + + + + + + + + +
    WINDOW* get_pool_win (tetrimini_pool_tt)
    +
    + +

    restituisce la finestra della pool di tetramini.

    +
    Parametri
    + + +
    [in]tla pool di tetramini.
    +
    +
    +
    Restituisce
    win la finestra ncurses della pool.
    + +
    +
    + +

    ◆ get_remaining_tetriminos()

    + +
    +
    + + + + + + + + + + + + + + + + + + +
    int get_remaining_tetriminos (tetrimini_pool_tpool,
    tetrimino_type_t type 
    )
    +
    + +

    Restituisce il numero di tetramini rimasti per il tipo passato per parametro.

    +
    Parametri
    + + +
    [in]typeIl tipo di tetrimino.
    +
    +
    +
    Restituisce
    Il numero di tetramini rimasti.
    + +
    +
    + +

    ◆ get_tet_color()

    + +
    +
    + + + + + + + + +
    int get_tet_color (tetrimino_tt)
    +
    + +

    restituisce il colore del tetramino.

    +
    Parametri
    + + +
    [in]til tetramino.
    +
    +
    +
    Restituisce
    color il numero che identifica il colore del tetramino.
    + +
    +
    + +

    ◆ get_tet_cols()

    + +
    +
    + + + + + + + + +
    int get_tet_cols (tetrimino_tt)
    +
    + +

    restituisce il numero di colonne di un tetramino.

    +
    Parametri
    + + +
    [in]til tetramino.
    +
    +
    +
    Restituisce
    cols il numero di colonne di cui é composto il tetramino.
    + +
    +
    + +

    ◆ get_tet_rows()

    + +
    +
    + + + + + + + + +
    int get_tet_rows (tetrimino_tt)
    +
    + +

    restituisce il numero di righe di un tetramino.

    +
    Parametri
    + + +
    [in]til tetramino.
    +
    +
    +
    Restituisce
    rows il numero di righe di cui é composto il tetramino.
    + +
    +
    + +

    ◆ get_tet_type()

    + +
    +
    + + + + + + + + +
    int get_tet_type (tetrimino_tt)
    +
    + +

    restituisce il tipo di tetramino.

    +
    Parametri
    + + +
    [in]til tetramino.
    +
    +
    +
    Restituisce
    type l'intero che identifica il tipo di tetramino.
    + +
    +
    + +

    ◆ get_tet_values()

    + +
    +
    + + + + + + + + +
    int* get_tet_values (tetrimino_tt)
    +
    + +

    restituisce l'array di valori di un tetramino.

    +
    Parametri
    + + +
    [in]til tetramino.
    +
    +
    +
    Restituisce
    values il puntatore all'array di valori del tetramino.
    + +
    +
    + +

    ◆ get_tetrimino()

    + +
    +
    + + + + + + + + +
    tetrimino_t* get_tetrimino (int type)
    +
    + +

    Genera il tetramino dato il suo enum.

    +
    Parametri
    + + +
    [in]typela sua codifica.
    +
    +
    +
    Restituisce
    Il tetramino allocato. È vuoto se il valore passato non è valido.
    + +
    +
    + +

    ◆ initialize_pool()

    + +
    +
    + + + + + + + + + + + + + + + + + + +
    tetrimini_pool_t* initialize_pool (int y,
    int x 
    )
    +
    + +

    funzione per inizializzare la pool dove sono presenti tutti i tetramini rimasti.

    +
    Parametri
    + + + +
    [in]yLa riga da dalla quale deve iniziare a posizionare la finestra.
    [in]xLa colonna da dalla quale deve iniziare a posizionare la finestra.
    +
    +
    +
    Restituisce
    Lo struct della pool istanziato.
    + +
    +
    + +

    ◆ is_safe_to_place_tet()

    + +
    +
    + + + + + + + + +
    int is_safe_to_place_tet (tetrimino_tt)
    +
    + +

    funzione stub che ci permette di capire se il tetramino che vogliamo piazzare ha celle vuote sotto. ES: il tet T_T piazzato a testa in giú blocca automaticamente almeno due celle.

    +
    Parametri
    + + +
    [in]tIl puntatore al tetramino.
    +
    +
    +
    Restituisce
    0 se ci sono celle bloccate, 1 altrimenti.
    + +
    +
    + +

    ◆ linear_rotate()

    + +
    +
    + + + + + + + + + + + + + + + + + + +
    void linear_rotate (tetrimino_tt,
    int dir 
    )
    +
    + +

    Semplice algoritmo per ruotare un tetramino, sviluppato attraverso l'algebra lineare. Le posizioni dei blocchi vengono trattate come dei vettori e l'algoritmo è una applicazione lineare. Lo spazio vettoriale è $ V= \mathbb{R}^2 $ con base.

    +

    +\[ \mathcal{B} = \left\{ \begin{pmatrix} 1 \\ 0 \end{pmatrix}, \begin{pmatrix} 0 \\ -1 \end{pmatrix} \right\} \] +

    +

    e l'applicazione lineare $ T: V \rightarrow V $:

    +\[ T(v)= \begin{pmatrix} -v_2 \\ v_1 \end{pmatrix} \] +

    +

    con $v = (v_1, v_2)^T \in V$.

    +

    L'applicazione lineare ha come risultato dei vettori ruotati di 90° che corrispondono alle posizioni del tetramino ruotato. Dato che però in realtà si parla di indici di array bisogna sommare all'indice della colonna il numero totale di colonne - 1. Senza questa operazione il tetramino risulterebbe "fuori" dalle celle e avrebbe indici negativi.

    +
    Parametri
    + + + +
    [in]tIl tetramino da ruotare.
    [in]dirLa direzione in cui ruotare il tetramino. 0 sta per destra, qualsiasi altro valore sinistra.
    +
    +
    + +
    +
    + +

    ◆ no_tetriminos_left()

    + +
    +
    + + + + + + + + +
    int no_tetriminos_left (tetrimini_pool_tpool)
    +
    + +

    controlla se ci sono tetramini rimanenti.

    +
    Parametri
    + + +
    [in]poolla pool di tetramini selezionabili.
    +
    +
    +
    Restituisce
    i ritorna 0 se c'é almeno un tetramino di qualsiasi tipo, 1 altrimenti.
    + +
    +
    + +

    ◆ print_menu_style()

    + +
    +
    + + + + + + + + + + + + + + + + + + +
    void print_menu_style (int i,
    tetrimini_pool_tpool 
    )
    +
    + +

    Funzione STUB che stampa i tetramini in modalitá "menu".

    +
    Parametri
    + + + +
    [in]il'indice del menu.
    [in]poolla pool nella quale stampare.
    +
    +
    + +
    +
    + +

    ◆ print_tetrimino()

    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    void print_tetrimino (WINDOW * w,
    tetrimino_tt,
    int y,
    int x 
    )
    +
    + +

    funzione che printa i tetramini, ATTENZIONE: SI PARTE A PRINTARE DA X0 Y0 DEL TETRAMINO.

    +
    Parametri
    + + + + + +
    [in]wla finestra dove printarlo.
    [in]tIl tetramino da printare.
    [in]yla y relativa della finestra.
    [in]xla x relativa della finestra.
    +
    +
    + +
    +
    + +

    ◆ refresh_pool()

    + +
    +
    + + + + + + + + +
    void refresh_pool (tetrimini_pool_tp)
    +
    + +

    refresh della pool.

    +
    Parametri
    + + +
    [in]pla pool.
    +
    +
    + +
    +
    + +

    ◆ remove_tetrimino_from_pool()

    + +
    +
    + + + + + + + + + + + + + + + + + + +
    void remove_tetrimino_from_pool (int i,
    tetrimini_pool_tp 
    )
    +
    + +

    rimuove un'unitá di un tetramino dalla pool.

    +
    Parametri
    + + + +
    [in]iil tipo di tetramino dalla quale togliere un'unitá.
    [in]pla pool di tetramini.
    +
    +
    + +
    +
    + +

    ◆ safe_rotate_tetrimino()

    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + +
    int safe_rotate_tetrimino (tetrimino_tt,
    int cur_pos,
    int dir 
    )
    +
    + +

    Stub di rotateLinear che verifica la fattibilitá della rotazione altrimenti non ruota.

    +
    Parametri
    + + + + +
    [in]tTetramino da ruotare.
    [in]cur_posPosizione del cursore.
    [in]dirDirezione di rotazione.
    +
    +
    +
    Restituisce
    1 se è riuscito a ruotare, 0 altrimenti.
    + +
    +
    + +

    ◆ select_tetrimino()

    + +
    +
    + + + + + + + + +
    int select_tetrimino (tetrimini_pool_tpool)
    +
    + +

    permette di accedere al metodo di selezione dei tetramini.

    +
    Parametri
    + + +
    [in]wFinestra della pool da cui selezionare il pezzo.
    +
    +
    +
    Restituisce
    Il numero della codifica del tetramino, -1 se non ci sono più tetramini.
    + +
    +
    +
    + + + + diff --git a/doxygen/html/tetrimino_8c__incl.md5 b/doxygen/html/tetrimino_8c__incl.md5 new file mode 100644 index 0000000..e8c42f0 --- /dev/null +++ b/doxygen/html/tetrimino_8c__incl.md5 @@ -0,0 +1 @@ +df2145b108eb73d2cc5eb23b3a66e5b6 \ No newline at end of file diff --git a/doxygen/html/tetrimino_8c__incl.png b/doxygen/html/tetrimino_8c__incl.png new file mode 100644 index 0000000..19e4094 Binary files /dev/null and b/doxygen/html/tetrimino_8c__incl.png differ diff --git a/include/gamefield.h b/include/gamefield.h index 04b8763..f0c7f70 100644 --- a/include/gamefield.h +++ b/include/gamefield.h @@ -29,8 +29,6 @@ int is_field_top_occupied(int *f); int* get_gamefield(gamefield_t *g); -void set_field(gamefield_t *g, int *field); - WINDOW* get_gamefield_win(gamefield_t *g); int is_row_full(int *field, int row); diff --git a/src/bot.c b/src/bot.c index b1d79fc..1555333 100644 --- a/src/bot.c +++ b/src/bot.c @@ -61,6 +61,7 @@ void strategy_destroy(strategy_t *strategy) * @brief funzione che ritorna il cursore della strategia passata come parametro. * * @param[in] s il puntatore alla strategia. + * * @return il cursore sul campo. */ int get_strategy_cursor(strategy_t *s) @@ -72,6 +73,7 @@ int get_strategy_cursor(strategy_t *s) * @brief funzione che ritorna il tipo di tetramino usato dalla strategia passata come parametro. * * @param[in] s il puntatore alla strategia. + * * @return il tipo di tetramino usato dalla strategia. */ int get_strategy_tet_type(strategy_t *s) @@ -83,6 +85,7 @@ int get_strategy_tet_type(strategy_t *s) * @brief funzione che ritorna la rotazione del tetramino usato della strategia passata come parametro. * * @param[in] s il puntatore alla strategia. + * * @return la rotazione del tetramino. */ int get_strategy_tet_rotation(strategy_t *s) @@ -256,7 +259,7 @@ int calculate_score(strategy_t *s, int *old, tetrimino_t *tet, tetrimino_t *last /* se fa finire il gioco semplicemente fa schifo come opzione */ if (!drops) { - return -100000; /* immagina ricevere -1000 punti LMAO */ + return -FIELD_COLS*FIELD_ROWS*1000; /* immagina ricevere -1000 punti LMAO */ } cur_diff = last_cursor - s->cursor; @@ -306,7 +309,6 @@ int calculate_score(strategy_t *s, int *old, tetrimino_t *tet, tetrimino_t *last if (!is_row_full(s->field, i)) { for (j = 0; j < FIELD_COLS; j++) - ; { if (s->field[i * FIELD_COLS + j] != 0) { diff --git a/src/functions.c b/src/functions.c index 768f8e1..ff27289 100644 --- a/src/functions.c +++ b/src/functions.c @@ -10,10 +10,12 @@ void kill_win(WINDOW *w); /** * @brief Funzione per creare un form al centro dello schermo - * la risposta viene caricata in un array di char (allocata dal caller) + * la risposta viene caricata in un array di char + * ATTENZIONE: la memoria viene allocata all'interno della funzione! * * @param[in] m_size dimensione massima della risposta che si vuole ricevere. * @param[in] title titolo della finestra. + * * @return L'array contenente la stringa, di dimensione m_size + 1. */ char *form(int m_size, char title[]) @@ -107,9 +109,10 @@ char *form(int m_size, char title[]) /** * @brief Conta il numero di righe di una - * ASCII art rettangolare importata in C attraverso xxd. + * ASCII art rettangolare importata in C generando i bytes con xxd. * * @param[in] ascii La stringa contenente la ASCII art. + * * @return Il numero di righe. */ int get_ASCII_art_rows(const unsigned char ascii[]) @@ -128,8 +131,10 @@ int get_ASCII_art_rows(const unsigned char ascii[]) /** * @brief Conta il numero di colonne di una - * ASCII art rettangolare importata in C attraverso xxd. + * ASCII art rettangolare importata in C generando i bytes con xxd. + * * @param[in] ascii La stringa contenente la ASCII art. + * * @return Il numero di colonne */ int get_ASCII_art_cols(const unsigned char ascii[]) @@ -192,6 +197,7 @@ void wprint_with_delay(WINDOW *w, int d, const 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. @@ -226,6 +232,7 @@ void mvwprintwrows(WINDOW *w, int y, int x, const char *c) * trasformeremo un colore di sfondo in un colore del testo. * * @param[in] c colore sotto forma numerica. + * * @return c colore sotto forma numerica. */ int swap_color(int c) @@ -252,6 +259,7 @@ int random_color() * * @param[in] i L'indice attuale. * @param[in] max La dimensione della struttura dati. + * * @return L'indice dell'elemento successivo. */ int next_circular(int i, int size) @@ -269,6 +277,7 @@ int next_circular(int i, int size) * * @param[in] i L'indice attuale. * @param[in] max La dimensione della struttura dati. + * * @return L'indice dell'elemento successivo. */ int prev_circular(int i, int size) @@ -284,6 +293,7 @@ int prev_circular(int i, int size) * * @param[in] first il puntatore al primo campo da gioco. * @param[in] second il puntatore al secondo campo da gioco. + * * @return la prima riga diversa. */ int compare_fields(int *first, int *second) @@ -308,6 +318,7 @@ int compare_fields(int *first, int *second) * @param[in] mat La matrice da controllare. * @param[in] rows Il numero di righe della matrice. * @param[in] cols Il numero di colonne della matrice. + * * @return 0 se la matrice non ha celle bloccate, altrimenti restituisce * $ r \times c $, con $r$ il numero di righe bloccate, $c$ le colonne bloccate. */ diff --git a/src/gamefield.c b/src/gamefield.c index 71892c1..031c00a 100644 --- a/src/gamefield.c +++ b/src/gamefield.c @@ -22,6 +22,7 @@ typedef struct GameField * * @param[in] y_pos La posizione Y iniziale in cui posizionare la finestra. * @param[in] x_pos La posizione X iniziale in cui posizionare la finestra. + * * @return Lo struct del gamefield istanziato. */ gamefield_t *initialize_gamefield(int y, int x) @@ -69,7 +70,13 @@ void clear_top(gamefield_t *g) } wrefresh(g->win); } - +/** + * @brief stampa l'ombra del tetramino dove questo verrá droppato. + * + * @param[in] g il puntatore al campo da gioco. + * @param[in] t il puntatore al tetramino. + * @param[in] cur_pos la posizione del cursore. + */ void draw_cursor(gamefield_t *g, tetrimino_t *t, int cur_pos) { int free = get_first_free_row(g->field, t, cur_pos); @@ -138,9 +145,10 @@ void refresh_selector(gamefield_t *g, tetrimino_t *t, int cur_pos) /** * @brief Gestisce l'input del drop del tetramino. * - * @param gameField Il campo dove bisogna droppare il tetramino. - * @param t Il tetramino da droppare. - * @return + * @param[in] gameField Il campo dove bisogna droppare il tetramino. + * @param[in] t Il tetramino da droppare. + * + * @return il cursore dove droppare il tetramino. */ int manage_drop(gamefield_t *gameField, tetrimino_t *t) { @@ -203,7 +211,7 @@ int manage_drop(gamefield_t *gameField, tetrimino_t *t) * @brief Da chiamare per visualizzare * le modifiche al campo del giocatore. * - * @param[in, out] g Il campo da gioco di cui bisogna aggiornare lo schermo. + * @param[in] g Il campo da gioco di cui bisogna aggiornare lo schermo. */ void refresh_gamefield(gamefield_t *g) { @@ -232,7 +240,8 @@ void refresh_gamefield(gamefield_t *g) * @param[in] g Il campo da gioco da controllare. * @param[in] t Il tetramino da incastrare. * @param[in] cur_pos La posizione del cursore e quindi la prima colonna di discesa del tetramino. - * @param[out] row La posizione nella matrice della prima riga libera. + * + * @return row La posizione nella matrice della prima riga libera. */ int get_first_free_row(int *f, tetrimino_t *t, int cur_pos) { @@ -289,7 +298,8 @@ int get_first_free_row(int *f, tetrimino_t *t, int cur_pos) * @param[in] g Il campo da gioco da controllare. * @param[in] t Il tetramino da incastrare. * @param[in] cur_pos La posizione del cursore e quindi la prima colonna di discesa del tetramino. - * @param[out] row La posizione nella matrice della prima riga libera. + * + * @return row La posizione nella matrice della prima riga libera. */ int get_first_free_row_in_field(int *f, int cur_pos) { @@ -313,6 +323,7 @@ int get_first_free_row_in_field(int *f, int cur_pos) * @param[in] g campo di gioco. * @param[in] t tetramino da piazzare. * @param[in] cur_pos posizione del cursore. + * * @return 1 se il tetramino si è incastrato, 0 se il * campo era pieno e non è riuscito. */ @@ -330,6 +341,7 @@ int add_tetrimino_to_gamefield(gamefield_t *g, tetrimino_t *t, int cur_pos) * @param[in] f matrice di gioco (quella dove sono salvati i tetramini). * @param[in] t tetramino da piazzare. * @param[in] cur_pos posizione del cursore. + * * @return 1 se il tetramino si è incastrato, 0 se il * campo era pieno e non è riuscito. */ @@ -373,9 +385,11 @@ int add_tetrimino_to_field(int *f, tetrimino_t *t, int cur_pos) /** * @brief controlla se il gamefield é stato - * saturato in almeno un blocco. - * @param[in] g gamefield da controllare - * @return int + * saturato in almeno un blocco (funzione stub). + * + * @param[in] g gamefield da controllare. + * + * @return 1 se é pieno, 0 altrimenti. */ int is_gamefield_top_occupied(gamefield_t *g) { @@ -385,8 +399,10 @@ int is_gamefield_top_occupied(gamefield_t *g) /** * @brief controlla se il field é stato * saturato in almeno un blocco. + * * @param[in] f la matrice campo da gioco - * @return int + * + * @return 1 se é pieno, 0 altrimenti. */ int is_field_top_occupied(int *f) { @@ -397,6 +413,7 @@ int is_field_top_occupied(int *f) * @brief metodo getter per ricevere la matrice con i tetramini. * * @param[in] g puntatore alla struct del campo da gioco. + * * @return field la matrice di interi che rappresenta la matrice con i tetramini. */ int *get_gamefield(gamefield_t *g) @@ -404,17 +421,12 @@ int *get_gamefield(gamefield_t *g) return g->field; } -void set_field(gamefield_t *g, int *field) -{ - free(g->field); - g->field = field; -} - /** * @brief metodo getter per ricevere la finestra ncurses del campo da gioco. * * @param[in] g puntatore alla struct del campo da gioco. - * @param[out] win la finestra di ncurses del campo da gioco. + * + * @return win la finestra di ncurses del campo da gioco. */ WINDOW *get_gamefield_win(gamefield_t *g) { @@ -425,10 +437,11 @@ WINDOW *get_gamefield_win(gamefield_t *g) * @brief Controlla se la riga del campo, entrambi specificati * via parametro, è piena. * - * @param field Il campo su cui controllare la riga - * @param row La riga da controllare + * @param[in] field Il campo su cui controllare la riga. + * @param[in] row La riga da controllare. + * * @return 1 se la riga è piena, 0 se ha almeno una cella vuota, -1 se la riga - * è fuori dal campo + * è fuori dal campo. */ int is_row_full(int *field, int row) { @@ -447,10 +460,11 @@ int is_row_full(int *field, int row) * @brief Controlla se la riga del campo, entrambi specificati * via parametro, è vuota. * - * @param field Il campo su cui controllare la riga - * @param row La riga da controllare + * @param[in] field Il campo su cui controllare la riga + * @param[in] row La riga da controllare. + * * @return 1 se la riga è vuota, 0 se ha almeno una cella piena, -1 se la riga - * è fuori dal campo + * è fuori dal campo. */ int is_row_empty(int *field, int row) { @@ -469,7 +483,8 @@ int is_row_empty(int *field, int row) * @brief Controlla il campo se è pieno o se ha * righe piene. * - * @param gameField Il campo da controllare. + * @param[in] gameField Il campo da controllare. + * * @return Il numero di righe che il giocatore ha riempito. */ int check_field(gamefield_t *gameField) @@ -502,8 +517,8 @@ int check_field(gamefield_t *gameField) * @brief Inverte il numero di righe specificate nel * campo specificato. * - * @param field Il campo su cui invertire le righe. - * @param rows Il numero di righe. + * @param[in] field Il campo su cui invertire le righe. + * @param[in] rows Il numero di righe. */ void flip_values(gamefield_t *field, int rows) { @@ -517,8 +532,8 @@ void flip_values(gamefield_t *field, int rows) /** * @brief inverte i valori in una riga del campo da gioco. * - * @param[in] field il campo da gioco - * @param[in] row la riga dove effettuare l'operazione + * @param[in] field il campo da gioco. + * @param[in] row la riga dove effettuare l'operazione. */ void flip_values_in_row(gamefield_t *field, int row) { @@ -543,7 +558,8 @@ void flip_values_in_row(gamefield_t *field, int row) /** * @brief Clona il field e restituisce il puntatore. - * @param f Il field da clonare. + * + * @param[in] f Il field da clonare. * @return La matrice clonata. */ int *clone_field(int *f) diff --git a/src/multiplayer.c b/src/multiplayer.c index 0afba7d..6992192 100644 --- a/src/multiplayer.c +++ b/src/multiplayer.c @@ -60,7 +60,7 @@ void pvp_instructions(char *nickname1, char *nickname2) } /** - * @brief Inizia la partita in multiplayer + * @brief Inizia la partita in PvP */ void pvp_new_game() { @@ -396,6 +396,11 @@ int select_difficulty() return diff; } +/** + * @brief stampa le istruzioni per la partita in pvp + * + * @param[in] nickname puntatore al nome del giocatore + */ void pve_instructions(char *nickname) { WINDOW *instructions_win; @@ -429,6 +434,9 @@ void pve_instructions(char *nickname) return; } +/** + * @brief Inizia la partita in PvCPU + */ void pve_new_game() { player_t **players = (player_t **)malloc(sizeof(player_t *) * 2); @@ -463,6 +471,16 @@ void pve_new_game() pve_continue_game(players, gameFields, pool, points, diff); } +/** + * @brief corpo principale del gioco che si alterna fra scelta blocco e drop dello stesso fra il giocatore e la CPU + * 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. + * @param[in] difficulty La difficoltá del BOT. + */ void pve_continue_game(player_t **players, gamefield_t **gameFields, tetrimini_pool_t *pool, pointboard_t *points, int difficulty) { tetrimino_type_t selected_i; @@ -510,7 +528,7 @@ void pve_continue_game(player_t **players, gamefield_t **gameFields, tetrimini_p free_tetrimino(tet); t = rand() % N_tetrimini; tet = get_tetrimino(t); - /* ↓ altro errore di 1 */ + /* ↓ altro errore di 1 */ c = rand() % (FIELD_COLS - get_tet_cols(tet) + 1); for (r = 0; r < rand() % 4; r++) { diff --git a/src/player.c b/src/player.c index 7b5a91c..62c934f 100644 --- a/src/player.c +++ b/src/player.c @@ -16,7 +16,8 @@ typedef struct Player * passato e con cursore e punti a 0. * * @param[in] nick Il nome del giocatore. - * @param[out] p Lo struct giocatore istanziato. + * + * @return p Lo struct giocatore istanziato. */ player_t *initialize_player(char *nick) { @@ -59,7 +60,8 @@ void refresh_pointboard(pointboard_t *board); * @param[in] x L'asse x in cui posizionare la point board. * @param[in] player_1 Il giocatore 1. * @param[in] player_2 Il giocatore 2. In caso di giocatore singolo deve essere NULL. - * @param[out] pointboard_t La point board inizializzata. + * + * @return pointboard_t La point board inizializzata. */ pointboard_t *initialize_pointboard(int y, int x, player_t *player_1, player_t *player_2) { @@ -117,7 +119,8 @@ void refresh_pointboard(pointboard_t *board) * @brief metodo getter per ricevere la finestra ncurses della finestra di punti. * * @param[in] p puntatore alla struct della pointboard. - * @param[out] win la finestra di ncurses del campo da gioco. + * + * @return win la finestra di ncurses del campo da gioco. */ WINDOW *get_pointboard_win(pointboard_t *p) { @@ -141,7 +144,8 @@ void player_add_points(player_t *p, pointboard_t *board, int points) * @brief ritorna il nickname di un player. * * @param[in] p Struct del giocatore. - * @param[out] nickname stringa con il nickname del giocatore. + * + * @return nickname stringa con il nickname del giocatore. */ char *get_player_nick(player_t *p) { @@ -152,7 +156,8 @@ char *get_player_nick(player_t *p) * @brief ritorna i punti di un player. * * @param[in] p Struct del giocatore. - * @param[out] points punti del giocatore. + * + * @return points punti del giocatore. */ unsigned int get_player_points(player_t *p) { @@ -163,7 +168,8 @@ unsigned int get_player_points(player_t *p) * @brief Restituisce il numero di punti corrispondenti * alle righe riempite. * - * @param deletedRows Le righe riempite. + * @param[in] deletedRows Le righe riempite. + * * @return I punti. */ int get_points(int deletedRows) diff --git a/src/singleplayer.c b/src/singleplayer.c index bb072fd..8575086 100644 --- a/src/singleplayer.c +++ b/src/singleplayer.c @@ -13,9 +13,9 @@ void single_continue_game(player_t *player, gamefield_t *gameField, tetrimini_po 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 + * @brief stampa le istruzioni per la partita in singleplayer. * - * @param[in] nickname puntatore al nome del giocatore + * @param[in] nickname puntatore al nome del giocatore. */ void instructions(char *nickname) { @@ -67,11 +67,11 @@ void new_game_single() nickname = form(16, " Nome: "); refresh(); - #ifndef DEBUG +#ifndef DEBUG instructions(nickname); - #endif +#endif player = initialize_player(nickname); /* @@ -79,9 +79,9 @@ void new_game_single() a spostarsi troppo sotto quando il terminale è troppo piccolo */ gameField = initialize_gamefield( - (LINES + logo_rows - FIELD_W_ROWS - 15) / 2, // prima era: (LINES + logo_rows - FIELD_W_ROWS - 3) / 2 + (LINES + logo_rows - FIELD_W_ROWS - 15) / 2, (COLS + POOL_COLS - POINTBOARD_COLS - FIELD_W_COLS) / 2); - pool = initialize_pool((LINES + logo_rows - POOL_ROWS - 3) / 2, 0); // prima era: (LINES + logo_rows - POOL_ROWS) / 2, 0 + pool = initialize_pool((LINES + logo_rows - POOL_ROWS - 3) / 2, 0); points = initialize_pointboard(10, COLS - POINTBOARD_COLS, player, NULL); single_continue_game(player, gameField, pool, points); return; @@ -141,7 +141,7 @@ void single_continue_game(player_t *player, gamefield_t *gameField, tetrimini_po } /** - * @brief gestisce la fine della partita e dealloca tutto ció che é stato usato + * @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) diff --git a/src/tester.c b/src/tester.c index 6e940e6..98c8642 100644 --- a/src/tester.c +++ b/src/tester.c @@ -7,21 +7,17 @@ int main() { int a[2][3] = { {1, 1, 1}, - {0, 0, 1} - }; + {0, 0, 1}}; int b[1][4] = { - {1, 1, 1, 1} - }; + {1, 1, 1, 1}}; int c[3][3] = { {1, 1, 1}, {1, 0, 1}, - {1, 1, 1} - }; + {1, 1, 1}}; int d[3][5] = { 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, - 0, 0, 0, 0, 1 - }; + 0, 0, 0, 0, 1}; int safe1 = blank_cells(&a[0][0], 2, 3); int safe2 = blank_cells(&b[0][0], 1, 4); int safe3 = blank_cells(&c[0][0], 3, 3); diff --git a/src/tetrimino.c b/src/tetrimino.c index d03b3f1..3f9eed2 100644 --- a/src/tetrimino.c +++ b/src/tetrimino.c @@ -34,6 +34,7 @@ typedef struct Tetrimino * @brief Genera il tetramino dato il suo enum. * * @param[in] type la sua codifica. + * * @return Il tetramino allocato. È vuoto se il valore passato non è valido. */ tetrimino_t *get_tetrimino(int type) @@ -140,7 +141,7 @@ tetrimino_t *get_tetrimino(int type) /** * @brief Libera la memoria allocata dal tetrimino. * - * @param[in, out] t Il tetrimino da deallocare. + * @param[in] t Il tetrimino da deallocare. */ void free_tetrimino(tetrimino_t *t) { @@ -149,11 +150,12 @@ void free_tetrimino(tetrimino_t *t) } /** - * @brief funzione che printa i tetramini, ATTENZIONE: SI PARTE A PRINTARE DA X0 Y0 DEL TETRAMINO - * @param[in] w la finestra dove printarlo - * @param[in] t Il tetramino da printare - * @param[in] y la y relativa della finestra - * @param[in] x la x relativa della finestra + * @brief funzione che printa i tetramini, ATTENZIONE: SI PARTE A PRINTARE DA X0 Y0 DEL TETRAMINO. + * + * @param[in] w la finestra dove printarlo. + * @param[in] t Il tetramino da printare. + * @param[in] y la y relativa della finestra. + * @param[in] x la x relativa della finestra. */ void print_tetrimino(WINDOW *w, tetrimino_t *t, int y, int x) { @@ -195,6 +197,7 @@ typedef struct TetriminiPool * * @param[in] y La riga da dalla quale deve iniziare a posizionare la finestra. * @param[in] x La colonna da dalla quale deve iniziare a posizionare la finestra. + * * @return Lo struct della pool istanziato. */ tetrimini_pool_t *initialize_pool(int y, int x) @@ -250,7 +253,8 @@ void print_menu_style(int i, tetrimini_pool_t *pool) /** * @brief permette di accedere al metodo di selezione dei tetramini. * - * @param [in] w Finestra della pool da cui selezionare il pezzo. + * @param[in] w Finestra della pool da cui selezionare il pezzo. + * * @return Il numero della codifica del tetramino, -1 se non ci sono * più tetramini. */ @@ -390,6 +394,7 @@ void linear_rotate(tetrimino_t *t, int dir) * @param[in] t Tetramino da ruotare. * @param[in] cur_pos Posizione del cursore. * @param[in] dir Direzione di rotazione. + * * @return 1 se è riuscito a ruotare, 0 altrimenti. */ int safe_rotate_tetrimino(tetrimino_t *t, int cur_pos, int dir) @@ -449,7 +454,7 @@ void add_tetrimino_from_pool(int i, tetrimini_pool_t *p) * * @param[in] pool la pool di tetramini selezionabili. * - * @param[out] i ritorna 0 se c'é almeno un tetramino di qualsiasi tipo, 1 altrimenti + * @return i ritorna 0 se c'é almeno un tetramino di qualsiasi tipo, 1 altrimenti. */ int no_tetriminos_left(tetrimini_pool_t *pool) { @@ -466,7 +471,8 @@ int no_tetriminos_left(tetrimini_pool_t *pool) * @brief restituisce la finestra della pool di tetramini. * * @param[in] t la pool di tetramini. - * @param[out] win la finestra ncurses della pool. + * + * @return win la finestra ncurses della pool. */ WINDOW *get_pool_win(tetrimini_pool_t *t) { @@ -477,7 +483,8 @@ WINDOW *get_pool_win(tetrimini_pool_t *t) * @brief Restituisce il numero di tetramini rimasti * per il tipo passato per parametro. * - * @param type Il tipo di tetrimino. + * @param[in] type Il tipo di tetrimino. + * * @return Il numero di tetramini rimasti. */ int get_remaining_tetriminos(tetrimini_pool_t *pool, tetrimino_type_t type) @@ -489,7 +496,8 @@ int get_remaining_tetriminos(tetrimini_pool_t *pool, tetrimino_type_t type) * @brief restituisce il numero di righe di un tetramino. * * @param[in] t il tetramino. - * @param[out] rows il numero di righe di cui é composto il tetramino. + * + * @return rows il numero di righe di cui é composto il tetramino. */ int get_tet_rows(tetrimino_t *t) { @@ -500,7 +508,8 @@ int get_tet_rows(tetrimino_t *t) * @brief restituisce il numero di colonne di un tetramino. * * @param[in] t il tetramino. - * @param[out] cols il numero di colonne di cui é composto il tetramino. + * + * @return cols il numero di colonne di cui é composto il tetramino. */ int get_tet_cols(tetrimino_t *t) { @@ -511,7 +520,8 @@ int get_tet_cols(tetrimino_t *t) * @brief restituisce l'array di valori di un tetramino. * * @param[in] t il tetramino. - * @param[out] values il puntatore all'array di valori del tetramino. + * + * @return values il puntatore all'array di valori del tetramino. */ int *get_tet_values(tetrimino_t *t) { @@ -522,7 +532,8 @@ int *get_tet_values(tetrimino_t *t) * @brief restituisce il tipo di tetramino. * * @param[in] t il tetramino. - * @param[out] type l'intero che identifica il tipo di tetramino. + * + * @return type l'intero che identifica il tipo di tetramino. * */ int get_tet_type(tetrimino_t *t) @@ -533,7 +544,8 @@ int get_tet_type(tetrimino_t *t) * @brief restituisce il colore del tetramino. * * @param[in] t il tetramino. - * @param[out] color il numero che identifica il colore del tetramino. + * + * @return color il numero che identifica il colore del tetramino. */ int get_tet_color(tetrimino_t *t) { @@ -546,58 +558,37 @@ int get_tet_color(tetrimino_t *t) } } +/** + * @brief funzione stub che ci permette di capire se il tetramino che vogliamo piazzare ha celle vuote sotto. + * ES: il tet T_T piazzato a testa in giú blocca automaticamente almeno due celle. + * + * @param[in] t Il puntatore al tetramino. + * + * @return 0 se ci sono celle bloccate, 1 altrimenti. + */ int is_safe_to_place_tet(tetrimino_t *t) { return !blank_cells(t->values, t->rows, t->cols); } -/* -int is_safe_to_place_tet(tetrimino_t *t) +/** + * @brief confronta pezzo per pezzo due tetramini per stabilire se sono uguali. + * + * @param[in] f il puntatore al primo tetramino. + * @param[in] s il puntatore al secondo tetramino. + * + * @return 0 se sono diversi, 1 altrimenti. + */ +int are_tet_equal(tetrimino_t *f, tetrimino_t *s) { - int i, j, k; - int cols, rows; - int *values; - - cols = get_tet_cols(t); - rows = get_tet_rows(t); - values = get_tet_values(t); - - /* - PROMEMORIA: - accedere a matrice[i][j] significa accedere alla locazione di memoria in posizione COLS ∗ 𝑖 + 𝑗 - int a[10][20]; => a[3][8] == a[3 * 20 + 8]; - - for (j = cols - 1; j >= 0; --j) + int i, j; + if (f->cols == s->cols && f->rows == s->rows) { - int found_free = 0; - for (i = rows - 1; i >= 0; --i) - { - - if (values[cols * i + j] == 0) - { - if (!found_free) - found_free = 1; - } - else - { - if (found_free) - return 0; - } - } - } - return 1; -} -*/ - -int are_tet_equal(tetrimino_t* f,tetrimino_t* s) -{ - int i,j; - if(f->cols == s->cols && f->rows == s->rows){ - for(i=0;irows;++i) + for (i = 0; i < f->rows; ++i) { - for(j=0;jcols;++j) + for (j = 0; j < f->cols; ++j) { - if(f->values[f->cols*i+j] != s->values[s->cols*i+j]) + if (f->values[f->cols * i + j] != s->values[s->cols * i + j]) { return 0; }