source: liacs/pm/nim-v3/nimMain.cc@ 23

Last change on this file since 23 was 2, checked in by Rick van der Zwet, 15 years ago

Initial import of data of old repository ('data') worth keeping (e.g. tracking
means of URL access statistics)

  • Property svn:executable set to *
File size: 5.8 KB
Line 
1#include "nimSpel.h"
2#include <ctime> // Voor het creeren van een random begingetal
3 // die de random computer elke keer weer andere
4 // zetten laat doen
5#include <iostream> // Zorgen dat in- en uitvoer van de console mogelijk
6 // is
7#include <iomanip> // Voor het netjes weergeven van de uitvoer
8#include "const.h" // Constanten waarden
9
10using namespace std;
11
12NimSpel spelletje; // Data module voor het spel
13
14//Zorgt dat de gebruiker enkel Min <= getallen <= Max in kan voeren
15int VoerInGetal( const int Min, const int Max ){
16 int x = 0;
17 do {
18 if( (cin >> x) == false ) {
19 cout << "Enkel Cijfers aub" << endl;
20 cin.clear();
21 cin.ignore(10000,'\n');
22 }
23 else if( x > Max ) {
24 cout << "Te groot getal" << endl;
25 }
26 else if( x < Min ) {
27 cout << "Te klein getal" << endl;
28 }// end if
29 } // end do
30 while( (x < Min) or (x > Max) );
31 return x;
32} //end VoerInGetal
33
34
35
36//Invoeren van variabelen voor soort spelkeuze
37void InvoerVariabelen( bool & winnendeZet, bool & compWinnend) {
38 int aantalStapels = MAX_STAPELS;
39 int aantalStokjes = MAX_STOKJES;
40 cout << "Hoeveel stapels wilt u?" << endl
41 << "Aantal: "; aantalStapels = VoerInGetal( 1, MAX_STAPELS );
42
43 cout << "Hoeveel stokjes wilt u?" << endl
44 << "Aantal: "; aantalStokjes = VoerInGetal( 1, MAX_STOKJES );
45
46 cout << "Geef het niveau van de computer aan" << endl
47 << "0) Random " << endl
48 << "1) Winnend Spelen " << endl
49 << "Keuze: "; compWinnend = VoerInGetal( 0, 1 );
50
51 cout << endl
52 << "Wilt u de winnende zetten zien?" << endl
53 << "0) Nee " << endl
54 << "1) Ja " << endl
55 << "Keuze: "; winnendeZet = VoerInGetal( 0, 1 );
56 spelletje.beginWaarden( aantalStapels, aantalStokjes );
57} //end InvoerVariablen
58
59
60
61//Spelers Invoer, voor stapel en aantal
62void spelerKeuze( int & stapel, int & stokjes ){
63 bool zetMogelijk = false;
64 int maxKiesbareStapels = ( spelletje.actieveStapels() - 1 );
65 int tmpStapel = 0;
66 int tmpStokjes = 0;
67 do {
68 cout << "Speler aan de beurt" << endl;
69 cout << "Welke stapel [0-" << maxKiesbareStapels << "] : ";
70 tmpStapel = VoerInGetal( 0, maxKiesbareStapels );
71 cout << "Hoeveel [1-2] : ";
72 tmpStokjes = VoerInGetal( 1, 2 );
73 zetMogelijk = spelletje.zetMogelijk( tmpStapel, tmpStokjes );
74 if( zetMogelijk == false ) {
75 cout << "Geen Geldige Combinatie, probeer opnieuw" << endl;
76 } //end if
77 } //end do
78 while( zetMogelijk == false );
79 stapel = tmpStapel;
80 stokjes = tmpStokjes;
81} //end spelerKeuze
82
83
84
85//Druk computerkeuze af
86void DrukComputerKeuzeAf( const int stapel, const int stokjes ) {
87 char wait; //om 'hold' te kunnen realiseren
88 cout << endl
89 << "Computer Keuze" << endl
90 << "Stapel: " << stapel << endl
91 << "Aantal: " << stokjes << endl;
92 cout << "Druk op ENTER...";
93 cin.clear( );
94 cin.ignore( 10000, '\n' );
95 cin.get( wait );
96} //end DrukComputerKeuzeAf
97
98
99
100//druk winnende keuze af
101void DrukWinnendAf( ) {
102 int tmpStapel = 0;
103 int tmpStokjes = 0;
104 spelletje.winnend( tmpStapel, tmpStokjes );
105 cout << endl
106 << "Winnende Zet: " << endl
107 << "Stapel: " << tmpStapel << endl
108 << "Aantal: " << tmpStokjes << endl << endl;
109} //end DrukWinnendAf
110
111
112//Druk netjes het bord af
113void DrukBordAf( ) {
114 cout << endl << "==== Beurt " << spelletje.aantalBeurten()
115 << " ====" << endl;
116 for( int i = 0; i < spelletje.actieveStapels(); i++ ) {
117 cout << "Spel " << setw(2) << i << " = "
118 << setw(2) << spelletje.aantalOpStapel( i ) << endl;
119 } //end for
120} //end DrukBordAf
121
122//spel spelen op console
123int main( ) {
124 srand( time(0) ); //elke keer andere random begin waarde
125 //init variabelen (een keer instellen, niet meer aankomen)
126 bool winnend = false; //Winnende zet laten zien
127 bool compWinnend = false; //Computer winnend laten spelen
128 //spel variabelen
129 bool spelerAanBeurt = false; //True=speler is aan de beurt
130 int stapel = 0; //tijdelijke opslag StapelNummer
131 int stokjes = 0; //tijdelijke opslag stokjesAantal
132
133 //variabelen invoeren
134 InvoerVariabelen( winnend, compWinnend );
135
136 //spel beginnen
137 while( true ) { //Eeuwige Loop
138 spelerAanBeurt = not( spelerAanBeurt ); //speler wisselen
139 DrukBordAf( ); //Druk bord af
140 if( spelerAanBeurt == true ) { //speler aan de beurt
141 if( winnend == true ){ // druk winnend af indien
142 DrukWinnendAf(); // gewenst
143 }
144 spelerKeuze( stapel, stokjes);
145 }
146 else { //computer aan de beurt
147 spelletje.computerZet( compWinnend, stapel, stokjes );
148 DrukComputerKeuzeAf( stapel, stokjes );
149 }
150 spelletje.pakWeg( stapel, stokjes ); //zet verwerken
151 if( spelletje.afgelopen( ) ) { //als spel afgelopen
152 if( spelerAanBeurt ) {
153 cout << "Voila uw heeft GEWONNEN" << endl;
154 }
155 else {
156 cout << "DE COMPUTER IS DE BESTE !!!" <<endl;
157 } //end if
158 return( 0 );
159 }
160 else if( spelerAanBeurt == false ){ //als computerzet gedaan
161 //keuze van zetten terug
162 DrukBordAf( );
163 cout << endl
164 << "Maximaal terug te zetten beurten: "
165 << (spelletje.aantalBeurten()) << endl
166 << "'0' om gewoon door te gaan" << endl
167 << "Aantal beurten: " ;
168 spelletje.zetTerug( VoerInGetal( 0, spelletje.aantalBeurten() ) );
169 } //end if
170 } //end while
171} //end main
172
Note: See TracBrowser for help on using the repository browser.