source: liacs/pm/nim-v2/nimMain.cc@ 3

Last change on this file since 3 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.