1 /* ScummVM - Graphic Adventure Engine 2 * 3 * ScummVM is the legal property of its developers, whose names 4 * are too numerous to list here. Please refer to the COPYRIGHT 5 * file distributed with this source distribution. 6 * 7 * This program is free software; you can redistribute it and/or 8 * modify it under the terms of the GNU General Public License 9 * as published by the Free Software Foundation; either version 2 10 * of the License, or (at your option) any later version. 11 * 12 * This program is distributed in the hope that it will be useful, 13 * but WITHOUT ANY WARRANTY; without even the implied warranty of 14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 15 * GNU General Public License for more details. 16 * 17 * You should have received a copy of the GNU General Public License 18 * along with this program; if not, write to the Free Software 19 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. 20 * 21 */ 22 23 /* 24 * This code is based on the original source code of Lord Avalot d'Argent version 1.3. 25 * Copyright (c) 1994-1995 Mike, Mark and Thomas Thurman. 26 */ 27 28 #ifndef AVALANCHE_NIM_H 29 #define AVALANCHE_NIM_H 30 31 namespace Avalanche { 32 33 class Nim { 34 public: 35 Nim(AvalancheEngine *vm); 36 void resetVariables(); 37 void synchronize(Common::Serializer &sz); 38 void playNim(); 39 40 private: 41 AvalancheEngine *_vm; 42 43 static const char * const kNames[2]; 44 45 byte _old[3]; 46 byte _stones[3]; 47 byte _turns; 48 bool _dogfoodsTurn; 49 byte _stonesLeft; 50 bool _clicked; 51 int8 _row; 52 byte _number; 53 bool _squeak; 54 byte _playedNim; // How many times you've played Nim. 55 56 // Inner variables for dogFood(), find() and findAp(). 57 bool _inAp[3]; 58 bool _lmo; // Let Me Out! 59 byte _r[3]; 60 61 void chalk(int x, int y, Common::String text); 62 void setup(); 63 void board(); 64 void startMove(); 65 void showChanges(); 66 void blip(); 67 void findNextUp(); // Inner function for checkInput(). 68 void findNextDown(); // Same as above. 69 bool checkInput(); // It returns TRUE if the player confirmed his selection of stones either by pressing RETURN or by clicking on a stone. 70 void takeSome(); 71 void endOfGame(); 72 bool find(byte x); // This gives TRUE if there's a pile with x stones in. 73 void findAp(byte start, byte stepSize); 74 void dogFood(); // AI procedure to play the game. 75 }; 76 77 } // End of namespace Avalanche 78 79 #endif // AVALANCHE_NIM_H 80