Source Code in C++
1: #include <iostream>
2: #include <cstdlib>
3: 4: using namespace std;
5: //------------------------------------------------------ 6: class Summetexon
7: { 8: private:
9: int itsid; 10: int itsthesi;
11: public: 12: Summetexon(){;}
13: ~Summetexon(){;} 14: Summetexon *next;
15: void set_Summetexon(int id,int thesi); 16: void set_thesi(int thesi){itsthesi = thesi ;}
17: int get_thesi(){return itsthesi;} 18: int get_id(){return itsid;}
19: }; 20:
21: class Alusida 22: {
23: private: 24: int itsmegethos;
25: int itsdiagrafon_node; 26: int itsdiagrafon_thesi;
27: int itsnode_arxis; 28: Summetexon *arxi;
29: public: 30: Alusida(int megethos);
31: ~Alusida(){;} 32: Summetexon *nodes;
33: void hit(); 34: void stop_tune();
35: void resume(); 36: void print_chain();
37: int game_over(); 38: void winner();
39: 40: };
41: 42: //----------------------------------------------------
43: 44: void Summetexon::set_Summetexon(int id,int thesi)
45: { 46: itsid=id;
47: itsthesi=thesi; 48: }
49: 50: //-----------------------------------------------------
51: 52: Alusida::Alusida(int megethos)
53: { 54: int i,id;
55: itsmegethos=megethos; 56: nodes = new Summetexon[megethos];
57: id=rand(); 58: for(i=0;i<itsmegethos;i++)
59: { 60: if(i==itsmegethos -1)
61: { 62: nodes[i].set_Summetexon(id++,i+1);
63: break; 64: }
65: nodes[i].set_Summetexon(id++,i+1); 66: }
67: for(i=0;i<itsmegethos;i++) 68: {
69: if(i==itsmegethos -1) 70: {
71: nodes[i].next = &nodes[0]; 72: break;
73: } 74: nodes[i].next = &nodes[i+1];
75: } 76: arxi = &nodes[0];
77: itsnode_arxis = 0; 78: }
79: 80: void Alusida::hit()
81: { 82: int i,thesi;
83: for(i=0;i<itsmegethos;i++) 84: {
85: if(nodes[i].get_thesi() == 1) 86: {
87: nodes[i].set_thesi(itsmegethos); 88: i++;
89: } 90: thesi = nodes[i].get_thesi();
91: nodes[i].set_thesi(--thesi); 92: }
93: for(i=0;i<itsmegethos;i++) 94: {
95: if(nodes[i].get_thesi() == 1) 96: {
97: arxi=&nodes[i]; 98: itsnode_arxis = i;
99: } 100: }
101: } 102:
103: void Alusida::stop_tune() 104: {
105: itsdiagrafon_node = rand() % itsmegethos; 106: cout<<"Diagrafike o Summetexon me id:" << nodes[itsdiagrafon_node].get_id() << "\n\n";
107: itsdiagrafon_thesi = nodes[itsdiagrafon_node].get_thesi(); 108:
109: itsmegethos--; 110: if(itsdiagrafon_thesi == 1)
111: { 112: arxi = &nodes[itsdiagrafon_node + 1];
113: itsnode_arxis=itsdiagrafon_node + 1; 114: }
115: } 116:
117: void Alusida::resume() 118: {
119: 120: int i=0,j=0,thesi=1;
121: Summetexon *buf = new Summetexon[itsmegethos]; 122: if(itsdiagrafon_thesi == 1)
123: { 124:
125: for(i=itsdiagrafon_node + 1;i<itsmegethos + 1;i++) 126: {
127: buf[j] = nodes[i]; 128: buf[j].set_thesi(thesi++);
129: j++; 130: }
131: for(i=0;i<itsdiagrafon_node;i++) 132: {
133: buf[j] = nodes[i]; 134: buf[j].set_thesi(thesi++);
135: j++; 136: }
137: for(i=0;i<itsmegethos;i++) 138: {
139: if(i == itsmegethos -1) 140: {
141: buf[i].next = &buf[0]; 142: break;
143: } 144: buf[i].next = &buf[i+1];
145: } 146: }
147: if(itsdiagrafon_thesi == itsmegethos + 1) 148: {
149: for(i=itsdiagrafon_node + 1;i<itsmegethos+1;i++) 150: {
151: buf[j] = nodes[i]; 152: j++;
153: } 154: for(i=0;i<itsdiagrafon_node;i++)
155: { 156: buf[j] = nodes[i];
157: j++; 158: }
159: for(i=0;i<itsmegethos;i++) 160: {
161: if(i == itsmegethos - 1) 162: {
163: buf[i].next = &buf[0]; 164: break;
165: } 166: buf[i].next = &buf[i+1];
167: } 168: }
169: 170: if(itsdiagrafon_thesi != itsmegethos + 1 && itsdiagrafon_thesi != 1)
171: { 172: for(i=itsnode_arxis;i<itsmegethos + 1 && i<itsdiagrafon_node;i++)
173: { 174: buf[j] = nodes[i];
175: buf[j].set_thesi(thesi++); 176: j++;
177: } 178: if(i==itsnode_arxis)
179: { 180: for(i=i;i<itsmegethos + 1;i++)
181: { 182: buf[j] = nodes[i];
183: buf[j].set_thesi(thesi++); 184: j++;
185: } 186: for(i=0;i<itsdiagrafon_node;i++)
187: { 188: buf[j]=nodes[i];
189: buf[j].set_thesi(thesi++); 190: j++;
191: } 192: for(i=itsdiagrafon_node+1;i<itsnode_arxis;i++)
193: { 194: buf[j]=nodes[i];
195: buf[j].set_thesi(thesi++); 196: j++;
197: } 198:
199: } 200: if(i==itsmegethos+1)
201: { 202: for(i=0;i<itsdiagrafon_node;i++)
203: { 204: buf[j]=nodes[i];
205: buf[j].set_thesi(thesi++); 206: j++;
207: } 208: for(i=itsdiagrafon_node+1;i<itsnode_arxis;i++)
209: { 210: buf[j]=nodes[i];
211: buf[j].set_thesi(thesi++); 212: j++;
213: } 214: }
215: else if(i==itsdiagrafon_node) 216: {
217: for(i=itsdiagrafon_node+1;i<itsmegethos +1;i++) 218: {
219: buf[j]=nodes[i]; 220: buf[j].set_thesi(thesi++);
221: j++; 222: }
223: for(i=0;i<itsnode_arxis;i++) 224: {
225: buf[j]=nodes[i]; 226: buf[j].set_thesi(thesi++);
227: j++; 228: }
229: 230: }
231: for(i=0;i<itsmegethos;i++) 232: {
233: if(i == itsmegethos -1) 234: {
235: buf[i].next = &buf[0]; 236: break;
237: } 238: buf[i].next = &buf[i+1];
239: } 240: }
241: 242: for(i=0;i<itsmegethos;i++)
243: { 244: nodes[i] = buf[i];
245: } 246:
247: arxi = &nodes[0]; 248: itsnode_arxis = 0;
249: } 250:
251: int Alusida::game_over() 252: {
253: if(itsmegethos == 1) 254: return 1;
255: else 256: return 0;
257: } 258:
259: void Alusida::print_chain() 260: {
261: int i; 262: for(i=0;i<itsmegethos;i++)
263: { 264: cout << "Summetexon stin thesi "<<nodes[i].get_thesi()<<" me id: "<<nodes[i].get_id()<<"\n";
265: } 266: }
267: 268: void Alusida::winner()
269: { 270: if(game_over() == 1)
271: cout <<"To paixnidi teleiose!\n********************\nThe Winner is Summetexon with ID:"<<nodes[0].get_id()<<"\n********************\n\n"; 272: else
273: cout<<"To paixnidi den teleiose akoma!\n\n"; 274: }
275: 276:
277: 278: /********************************************************************/
279: 280: void main(void)
281: { 282: int i,k,plithos;
283: cout << "Doste to plithos ton summetexonton:\n"; 284: cin >> plithos;
285: Alusida myAlusida(plithos); 286: cout << "ARXIKH ALYSIDA.\n";
287: myAlusida.print_chain(); 288: cout << "***************\n\n";
289: for(i=0;i<plithos-1;i++) 290: {
291: for(k=0;k<rand() % 10;k++) 292: {
293: cout<<"->HIT\n"; 294: myAlusida.hit();
295: myAlusida.print_chain(); 296: cout << "\n";
297: } 298: cout << "->STOP TUNE\n";
299: myAlusida.stop_tune(); 300: cout << "->RESUME\n";
301: myAlusida.resume(); 302: myAlusida.print_chain();
303: cout << "\n"; 304: }
305: myAlusida.winner(); 306:
307: }
.csharpcode, .csharpcode pre { font-size: small; color: black; font-family: consolas, “Courier New”, courier, monospace; background-color: #ffffff; /*white-space: pre;*/ } .csharpcode pre { margin: 0em; } .csharpcode .rem { color: #008000; } .csharpcode .kwrd { color: #0000ff; } .csharpcode .str { color: #006080; } .csharpcode .op { color: #0000c0; } .csharpcode .preproc { color: #cc6633; } .csharpcode .asp { background-color: #ffff00; } .csharpcode .html { color: #800000; } .csharpcode .attr { color: #ff0000; } .csharpcode .alt { background-color: #f4f4f4; width: 100%; margin: 0em; } .csharpcode .lnum { color: #606060; }