source: liacs/pm/nim-v4/nimMain.cc@ 104

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