~ubuntu-branches/ubuntu/oneiric/libclaw/oneiric

« back to all changes in this revision

Viewing changes to examples/ia_jeux/morpion_console/morpion_main.cpp

  • Committer: Bazaar Package Importer
  • Author(s): Julien Jorge
  • Date: 2010-12-23 20:55:14 UTC
  • mfrom: (4.2.1 sid)
  • Revision ID: james.westby@ubuntu.com-20101223205514-s10m6ywla7s4ttqf
Tags: 1.6.1-3
Upload in sid

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
 
/**
2
 
 * \file morpion_main.cpp
3
 
 * \brief Impl�mentation de la classe morpion_main.
4
 
 * \author Julien Jorge
5
 
 */
6
 
#include "morpion_main.hpp"
7
 
#include "morpion.hpp"
8
 
 
9
 
#include <iostream>
10
 
 
11
 
/*---------------------------------------------------------------------------*/
12
 
/**
13
 
 * \brief Constructeur. Lance le jeu.
14
 
 */
15
 
morpion_main::morpion_main()
16
 
{
17
 
  int  difficulte = 0;
18
 
  char commencer = 'o';
19
 
 
20
 
  std::cout << "Difficult� [1..9] : ";
21
 
  std::cin >> difficulte;
22
 
 
23
 
  std::cout << "Vous commencez ? (o/n) : ";
24
 
  std::cin >> commencer;
25
 
 
26
 
  if ( (commencer=='o') || (commencer=='O') )
27
 
    jouer_humain_premier(difficulte);
28
 
  else
29
 
    jouer_ordi_premier(difficulte);
30
 
} // morpion_main() [constructeur]
31
 
 
32
 
 
33
 
 
34
 
/*================================== private ================================*/
35
 
 
36
 
 
37
 
 
38
 
 
39
 
/*---------------------------------------------------------------------------*/
40
 
/**
41
 
 * \brief Joue un coup, de l'ordinateur.
42
 
 * \param etat Etat du jeu.
43
 
 * \param difficulte Niveau de difficult�.
44
 
 * \return vrai si la partie est termin�e.
45
 
 */
46
 
bool morpion_main::jouer_ordi(etat_morpion& etat, int difficulte)
47
 
{
48
 
  claw::ai::game::select_random_action< claw::ai::game::alpha_beta<etat_morpion> >
49
 
    select;
50
 
 
51
 
  int action = 0;
52
 
 
53
 
  select(difficulte, etat, action, true);
54
 
        
55
 
  if (etat.jouer(action))
56
 
    return true;
57
 
  else if (etat.plein())
58
 
    return true;
59
 
  else
60
 
    return false;
61
 
} // jouer_ordi()
62
 
 
63
 
/*---------------------------------------------------------------------------*/
64
 
/**
65
 
 * \brief Joue un coup, de l'humain.
66
 
 * \param etat Etat du jeu.
67
 
 * \return vrai si la partie est termin�e.
68
 
 */
69
 
bool morpion_main::jouer_humain(etat_morpion& etat)
70
 
{
71
 
  unsigned int c;
72
 
  std::cin >> c;
73
 
 
74
 
  if (c >= 9)
75
 
    return true;
76
 
  else if (etat.jouer(c))
77
 
    return true;
78
 
  else if (etat.plein())
79
 
    return true;
80
 
  else
81
 
    return false;
82
 
} // jouer_humain()
83
 
 
84
 
/*---------------------------------------------------------------------------*/
85
 
/**
86
 
 * \brief Lance le jeu, l'humain joue en premier.
87
 
 * \param difficulte Niveau de difficult�.
88
 
 */
89
 
void morpion_main::jouer_humain_premier( int difficulte )
90
 
{
91
 
  etat_morpion etat(EM_CROIX);
92
 
  etat.symbole_ordi(EM_ROND);
93
 
 
94
 
  std::cout << etat << std::endl;
95
 
 
96
 
  bool fini = jouer_humain(etat);
97
 
 
98
 
  while ( !fini )
99
 
    {
100
 
      std::cout << etat << std::endl;
101
 
      fini = jouer_ordi( etat, difficulte );
102
 
 
103
 
      if ( !fini )
104
 
        {
105
 
          std::cout << etat << std::endl;
106
 
          fini = jouer_humain(etat);
107
 
        }
108
 
    }
109
 
 
110
 
  std::cout << etat << std::endl;
111
 
} // jouer_humain_premier()
112
 
 
113
 
/*---------------------------------------------------------------------------*/
114
 
/**
115
 
 * \brief Lance le jeu, l'ordinateur joue en premier.
116
 
 * \param difficulte Niveau de difficult�.
117
 
 */
118
 
void morpion_main::jouer_ordi_premier( int difficulte )
119
 
{
120
 
  etat_morpion etat(EM_ROND);
121
 
  etat.symbole_ordi(EM_ROND);
122
 
 
123
 
  std::cout << etat << std::endl;
124
 
 
125
 
  bool fini = jouer_ordi( etat, difficulte );
126
 
 
127
 
  while ( !fini )
128
 
    {
129
 
      std::cout << etat << std::endl;
130
 
      fini = jouer_humain(etat);;
131
 
 
132
 
      if ( !fini )
133
 
        {
134
 
          std::cout << etat << std::endl;
135
 
          fini = jouer_ordi(etat, difficulte);
136
 
        }
137
 
    }
138
 
 
139
 
  std::cout << etat << std::endl;
140
 
} // jouer_ordi_premier()
141