source: liacs/pm/Nim_MakeFile/NimSpel.cc@ 2

Last change on this file since 2 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: 3.9 KB
Line 
1#include "NimSpel.h"
2#include <iostream>
3#include <cstdlib>
4
5using namespace std;
6
7NimSpel::NimSpel( ){
8 LaatsteZet_pt = NULL;
9 AantalZetten = 0;
10
11 for(int i = 0; i < MaxStapels; i++) {
12 Stapels[i] = 0;
13 } //end for
14
15 //Bedacht en getest algoritme
16 WinstArray[0][0] = 1;
17 WinstArray[0][1] = 0;
18 WinstArray[0][2] = 1;
19 WinstArray[1][0] = 1;
20 WinstArray[1][1] = 1;
21 WinstArray[1][2] = 0;
22 WinstArray[2][0] = 1;
23 WinstArray[2][1] = 1;
24 WinstArray[2][2] = 0;
25 for(int i = 3; i < MaxAantal + 1; i++){
26 WinstArray[i][0] = WinstArray[i-1][0] + WinstArray[i-2][0];
27 WinstArray[i][1] = WinstArray[i-1][2] + WinstArray[i-2][2];
28 WinstArray[i][2] = WinstArray[i][0] - WinstArray[i][1];
29 }
30} //end NimSpel::NimSpel
31
32
33
34void NimSpel::BeginWaarden(int StapelNummer, int Aantal) {
35 for (int i = 0; i < StapelNummer; i++) {
36 Stapels[i] = Aantal;
37 } //end for
38} //end NimSpel::BeginWaardes
39
40
41
42void NimSpel::PakWeg(int StapelNummer, int Aantal){
43 NimStapel * temp_pt; //
44 temp_pt = new NimStapel; //
45 temp_pt->VorigeZet_pt = LaatsteZet_pt; //Zetten onthouden
46 LaatsteZet_pt = temp_pt; //
47 LaatsteZet_pt->StapelNummer = StapelNummer; //
48 LaatsteZet_pt->AantalEraf = Aantal; //
49 AantalZetten++; //Max Zetten bijhouden
50 Stapels[StapelNummer] = Stapels[StapelNummer] - Aantal;
51} //end NimSpel::NimSpel
52
53
54
55void NimSpel::ZetTerug(int AantalBeurten) {
56 int AantalStappen = AantalBeurten * 2;
57 NimStapel * temp_pt;
58 for(int i = 0; i < AantalStappen; i++) {
59 temp_pt = LaatsteZet_pt;
60 Stapels[temp_pt->StapelNummer] = Stapels[temp_pt->StapelNummer] + temp_pt->AantalEraf;
61 AantalZetten--;
62 LaatsteZet_pt = temp_pt->VorigeZet_pt;
63 delete temp_pt;
64 } //end for
65} //end NimSpel::ZetTerug
66
67void NimSpel::Winnend(int * StapelNummer, int * Aantal) {
68 *StapelNummer = -1;
69 *Aantal = -1;
70 double KansMax, KansMet1, KansMet2 = 0; //tempvariablen, voor het bepalen van de max
71 for(int i = 0; i < MaxStapels; i++) {
72 if (Stapels[i] > 0) {
73 KansMet1 = WinstArray[Stapels[i]-1][2] / WinstArray[Stapels[i]-2][0];
74 }
75 else {
76 KansMet1 = 0;
77 }//end if
78
79 if (Stapels[i] > 1) {
80 KansMet2 = WinstArray[Stapels[i]-2][2] / WinstArray[Stapels[i]-2][0];
81 }
82 else {
83 KansMet2 = 0;
84 }//end if
85
86 if(KansMet1 > KansMax) {
87 *Aantal = 1;
88 *StapelNummer = i;
89 KansMax = KansMet1;
90 }//end if
91
92 if(KansMet2 > KansMax) {
93 *Aantal = 2;
94 *StapelNummer = i;
95 KansMax = KansMet2;
96 }//end if
97 }//end for
98}// end NimSpel::Winnnend
99
100void NimSpel::RandomZet(const int AantalStapels, int * StapelNummer, int * Aantal) {
101 do {
102 *StapelNummer = int( double(AantalStapels) * rand()/(RAND_MAX+1.0) );
103 *Aantal = 1 + int( double(2) * rand()/(RAND_MAX+1.0) );
104 } //end do
105 while(Stapels[*StapelNummer] - *Aantal < 0);
106}//end NimSpel::RandomZet
107
108
109void NimSpel::DrukAfConsole( ){
110 system("clear"); //OS Dependent Line, for windows use 'system("cls");' instead.
111 cout << endl << " : ";
112 for(int i = 0; i < MaxStapels; i++) {
113 if (i < 10) {cout << " " << i << " | ";} else { cout << i << " | ";}
114 }//end for
115 for(int i = 1; i <= MaxAantal; i++) {
116 cout << endl;
117 if (i < 10) {cout << " " << i << " : ";} else { cout << i << " : ";}
118 for(int j = 0; j < MaxStapels; j++) {
119 if (i <= Stapels[j]) { cout << "XX | ";} else { cout << " | ";}
120 }//end for
121 }//end for
122 cout << endl << endl;
123}//end NimSpelDrukAf
124
125bool NimSpel::ZetOnmogelijk(int StapelNummer, int AantalEraf) {
126 if ((Stapels[StapelNummer] - AantalEraf) < 0) {
127 return true;
128 }
129 else {
130 return false;
131 }
132} //end NimSpel::ZettMogelijk
133
134bool NimSpel::Afgelopen( ){
135 for(int i = 0; i < MaxStapels; i++) {
136 if (Stapels[i] > 0) { //als er nog ergens waardes aanwezig zijn
137 return (false);
138 }//end if
139 }//end if
140 return (true);
141}//end NimSpel::Afgelopen
142
Note: See TracBrowser for help on using the repository browser.