/*
  Copyright (C) 2008 Alessandro Bugatti (alessandro.bugatti@istruzione.it)

  This program is free software; you can redistribute it and/or
  modify it under the terms of the GNU General Public License
  as published by the Free Software Foundation; either version 2
  of the License, or (at your option) any later version.

  This program is distributed in the hope that it will be useful,
  but WITHOUT ANY WARRANTY; without even the implied warranty of
  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  GNU General Public License for more details.

  You should have received a copy of the GNU General Public License
  along with this program; if not, write to the Free Software
  Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
*/

/*! \file
 *  \brief Classe per gestire il gioco dell'impiccato
 *  \author Alessandro Bugatti
 *
 *  \version 0.2
 *  \date  Creazione  22/10/2006
 *  \date  Ultima modifica 15/11/2008
 *
 */


/*
  Name: giocoimpiccato.cpp
  Copyright: GPL
  Author: Alessandro Bugatti
  Date: 22/10/06 14.30
  Last change: 13/11/07 00.08
  Description: classe per gestire il gioco dell'impiccato
*/

#ifndef GIOCOIMPICCATO_H
#define GIOCOIMPICCATO_H

#include <string>
#include <iostream>

using namespace std;

/*!
 *  \brief Classe per gestire il gioco dell'impiccato
 *  \author Alessandro Bugatti
 *
 *  \version 0.2
 *  \date  Creazione  22/10/2006
 *  \date  Ultima modifica 15/11/2008
 *
 */

class giocoImpiccato
{
public:
    /**
    *   \brief Construttore
    */
    giocoImpiccato();
    /**
     \brief Questo metodo inserisce in parola la lettera scelta dall'utente
     * se presente in parolaSegreta
     \param lettera La lettera scelta
     \return Ritorna -1 se la lettera è già stata scelta \n
     * 0 se la lettera non è presente nella parola segreta \n
     * 1 se la lettera è contenuta nella parola segreta
     */
    int inserisciCarattere(char lettera);
    /**
    *   \brief Stampa lo stato del gioco disegnando l'impiccato in testo
    */
    void stampaStato() const;
    /**
    *   \brief Inserisce il valore della parola da indovinare
    *   che ovviamente sarò pescata casualmente da una sorgente di parole
    */
    void setParolaSegreta(const stringparola);
    /**
     *  \brief Controlla lo stato del gioco
     *  \return Ritorna 0 se hai perso \n
     *  ritorna 1 se hai vinto \n
     *  ritorna 2 se il gioco puo continuare
     */
    int controlloVittoria() const;
    /**
    *   \brief Restituisce la parola segreta per permettere
    *   di sapere qual era una volta perso il gioco
    *   \return La parola segreta
    */
    string getParolaSegreta() const;
    /**
    *   \brief Stampa una stringa con le lettere usate separate da una virgola
    */
    void stampaLettereUsate() const;
private:
    int contaErrori;///< conta gli errori commessi per indovinare la parola (a 8 perdi)
    string parolaSegreta///< contiene la parola da indovinare
    string parola///< la parola dove si inseriranno le lettere scelte dall'utente e gli underscore dove non ci sono i caratteri
    char lettereUsate[26];  ///< Contiene le lettere già usate nel gioco
    int contaLettereUsate///< Conta le lettere usate già nel gioco
};

#endif // GIOCOIMPICCATO_H