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

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