source: liacs/pm/nim-v4/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: 6.2 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 << "N.B. Dit treedt pas in werking " << endl
54 << "als het aantal stokjes minder " << endl
55 << "als " << START_WINNEND << " bedraagt" << endl
56 << "0) Nee " << endl
57 << "1) Ja " << endl
58 << "Keuze: "; winnendeZet = VoerInGetal( 0, 1 );
59 spelletje.beginWaarden( aantalStapels, aantalStokjes );
60} //end InvoerVariablen
61
62
63
64//Spelers Invoer, voor stapel en aantal
65void spelerKeuze( int & stapel, int & stokjes ){
66 bool zetMogelijk = false;
67 int maxKiesbareStapels = ( spelletje.actieveStapels() - 1 );
68 int tmpStapel = 0;
69 int tmpStokjes = 0;
70 do {
71 cout << "Speler aan de beurt" << endl;
72 cout << "Welke stapel [0-" << maxKiesbareStapels << "] : ";
73 tmpStapel = VoerInGetal( 0, maxKiesbareStapels );
74 cout << "Hoeveel [1-2] : ";
75 tmpStokjes = VoerInGetal( 1, 2 );
76 zetMogelijk = spelletje.zetMogelijk( tmpStapel, tmpStokjes );
77 if( zetMogelijk == false ) {
78 cout << "Geen Geldige Combinatie, probeer opnieuw" << endl;
79 } //end if
80 } //end do
81 while( zetMogelijk == false );
82 stapel = tmpStapel;
83 stokjes = tmpStokjes;
84} //end spelerKeuze
85
86
87
88//Druk computerkeuze af
89void DrukComputerKeuzeAf( const int stapel, const int stokjes ) {
90 char wait; //om 'hold' te kunnen realiseren
91 cout << endl
92 << "Computer Keuze" << endl
93 << "Stapel: " << stapel << endl
94 << "Aantal: " << stokjes << endl;
95 cout << "Druk op ENTER...";
96 cin.clear( );
97 cin.ignore( 10000, '\n' );
98 cin.get( wait );
99} //end DrukComputerKeuzeAf
100
101
102
103//druk winnende keuze af
104void DrukWinnendAf( ) {
105 int tmpStapel = 0;
106 int tmpStokjes = 0;
107 if ( spelletje.winnendEnable() ) {
108 spelletje.winnend( tmpStapel, tmpStokjes );
109 cout << endl
110 << "Winnende Zet: " << endl
111 << "Stapel: " << tmpStapel << endl
112 << "Aantal: " << tmpStokjes << endl << endl;
113 }
114 else {
115 cout << "Winnende Zet nog niet mogelijk," << endl
116 << "aantal is nog niet beneden de " << START_WINNEND <<endl;
117 } //end if
118} //end DrukWinnendAf
119
120
121//Druk netjes het bord af
122void DrukBordAf( ) {
123 cout << endl << "==== Beurt " << spelletje.aantalBeurten()
124 << " ====" << endl;
125 for( int i = 0; i < spelletje.actieveStapels(); i++ ) {
126 cout << "Spel " << setw(2) << i << " = "
127 << setw(2) << spelletje.aantalOpStapel( i ) << endl;
128 } //end for
129} //end DrukBordAf
130
131//spel spelen op console
132int main( ) {
133 srand( time(0) ); //elke keer andere random begin waarde
134 //init variabelen (een keer instellen, niet meer aankomen)
135 bool winnend = false; //Winnende zet laten zien
136 bool compWinnend = false; //Computer winnend laten spelen
137 //spel variabelen
138 bool spelerAanBeurt = false; //True=speler is aan de beurt
139 int stapel = 0; //tijdelijke opslag StapelNummer
140 int stokjes = 0; //tijdelijke opslag stokjesAantal
141
142 //variabelen invoeren
143 InvoerVariabelen( winnend, compWinnend );
144
145 //spel beginnen
146 while( true ) { //Eeuwige Loop
147 spelerAanBeurt = not( spelerAanBeurt ); //speler wisselen
148 DrukBordAf( ); //Druk bord af
149 if( spelerAanBeurt == true ) { //speler aan de beurt
150 if( winnend == true ){ // druk winnend af indien
151 DrukWinnendAf(); // gewenst
152 }
153 spelerKeuze( stapel, stokjes);
154 }
155 else { //computer aan de beurt
156 spelletje.computerZet( compWinnend, stapel, stokjes );
157 DrukComputerKeuzeAf( stapel, stokjes );
158 }
159 spelletje.pakWeg( stapel, stokjes ); //zet verwerken
160 if( spelletje.afgelopen( ) ) { //als spel afgelopen
161 if( spelerAanBeurt ) {
162 cout << "Voila uw heeft GEWONNEN" << endl;
163 }
164 else {
165 cout << "DE COMPUTER IS DE BESTE !!!" <<endl;
166 } //end if
167 return( 0 );
168 }
169 else if( spelerAanBeurt == false ){ //als computerzet gedaan
170 //keuze van zetten terug
171 DrukBordAf( );
172 cout << endl
173 << "Maximaal terug te zetten beurten: "
174 << (spelletje.aantalBeurten()) << endl
175 << "'0' om gewoon door te gaan" << endl
176 << "Aantal beurten: " ;
177 spelletje.zetTerug( VoerInGetal( 0, spelletje.aantalBeurten() ) );
178 } //end if
179 } //end while
180} //end main
181
Note: See TracBrowser for help on using the repository browser.