Guest User

Untitled

a guest
Jul 23rd, 2018
85
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 14.17 KB | None | 0 0
  1. #include <iostream> // эта игра очень сырая.
  2. #include <fstream> // я добавил еще не все, что хотелю
  3. #include <string> // уже можно подкидыватькарты,
  4. #include <vector> // но пока что нельзя переводить, планирую это добавить.
  5. #include <windows.h> // так же надо сделать ходы программы более осознанными
  6. #include <algorithm> // над этим тоже я еще буду работать
  7. #include <ctime>
  8. #include <map>
  9. using namespace std;
  10.  
  11. struct Card {
  12. string name;
  13. string suit;
  14. };
  15.  
  16. class Game {
  17. private:
  18. vector <Card> Deck;
  19. vector <Card> Player_1;
  20. vector <Card> Player_2;
  21. Card TrumpCard;
  22. map <string, int> cardPriority;
  23. public:
  24. Game(const string& CardsFile);
  25. void startGame();
  26. vector<int> GoodCards(const int& strokeNumber, const int& Index, vector<Card> activeCards);
  27. bool Beat(const vector<int>& goodCard);
  28. vector<Card> Flip(const int& strokeNumber, const vector<Card>& crad);
  29. vector<Card> addCards(vector<Card> Player);
  30. void takeAll(const int& strokeNumber, vector<Card> activeCards_1, vector<Card> activeCards_2);
  31. int Move_1(int strokeNumbe);
  32. int Move_2(int strokeNumbe);
  33. bool Check(const Card& card, const vector<Card>& Player);
  34. bool Check(const int& card, const vector<int>& goodCard);
  35. };
  36.  
  37. void PrintVector(const vector<Card>& vector) {
  38. for (int i = 0; i < vector.size(); i++) {
  39. cout << i + 1 << ". " << vector[i].name << " " << vector[i].suit << endl;
  40. }
  41. }
  42.  
  43. Game::Game(const string& CardsFile) {
  44. ifstream input(CardsFile.c_str());
  45. Card card;
  46. int number = 1;
  47. while(!input.eof()) {
  48. input >> card.name;
  49. input >> card.suit;
  50. Deck.push_back(card);
  51.  
  52. if (number > 9) {
  53. number = 1;
  54. }
  55. cardPriority[card.name] = number;
  56. ++number;
  57. }
  58.  
  59. srand(time(NULL));
  60. random_shuffle(Deck.begin(), Deck.end());
  61. }
  62.  
  63. vector<int> Game::GoodCards (const int& strokeNumber, const int& Index, vector<Card> activeCards) { // эта функция проверяет,
  64. vector<Card> repellent, walking; // какими картами можно отбиться
  65. if (strokeNumber % 2 == 1) {
  66. walking = Player_1;
  67. repellent = Player_2;
  68. }
  69. else {
  70. walking = Player_2;
  71. repellent = Player_1;
  72. }
  73. vector<int> goodCard;
  74. for(int i = 0; i < repellent.size(); i++) {
  75. if (activeCards[Index].suit == TrumpCard.suit && repellent[i].suit == TrumpCard.suit
  76. && cardPriority[repellent[i].name] > cardPriority[activeCards[Index].name] ) {
  77. goodCard.push_back(i);
  78. }
  79. else if (activeCards[Index].suit != TrumpCard.suit && repellent[i].suit != TrumpCard.suit
  80. && repellent[i].suit == activeCards[Index].suit
  81. && cardPriority[repellent[i].name] > cardPriority[activeCards[Index].name] ) {
  82. goodCard.push_back(i);
  83. }
  84. else if (activeCards[Index].suit != TrumpCard.suit && repellent[i].suit == TrumpCard.suit ) {
  85. goodCard.push_back(i);
  86. }
  87. }
  88. for (int i = 0; i < goodCard.size(); i++) {
  89. cout << goodCard[i] + 1 << endl;
  90. }
  91. return goodCard;
  92. }
  93.  
  94. bool Game::Beat(const vector<int>& goodCard) { //эта функция проверяет, можно ли отбиться в принцепе
  95. if (goodCard.size() == 0) {
  96. cout << "мне нечем биться, беру карту" << endl;
  97. return false;
  98. }
  99. else {
  100. return true;
  101. }
  102. }
  103.  
  104. vector<Card> Game::Flip(const int& strokeNumber, const vector<Card>& activeCards) { // эта функция проеряет, можно ли подкинуть карты
  105. vector<Card> walking;
  106. if (strokeNumber % 2 == 1) {
  107. walking = Player_1;
  108. }
  109. else {
  110. walking = Player_2;
  111. }
  112. vector<Card> flipCard;
  113. for(int j = 0; j < activeCards.size(); j++) {
  114. for(int i = 0; i < walking.size(); i++) {
  115. if(activeCards[j].name == walking[i].name && activeCards[j].suit != walking[i].suit) {
  116. flipCard.push_back(walking[i]);
  117. }
  118. }
  119. }
  120. return flipCard;
  121. }
  122.  
  123. vector<Card> Game::addCards(vector<Card> Player) { // эта функция добавляет карты игрокам
  124. while(Player.size() < 6 && Deck.size() > 0) {
  125. Player.push_back(Deck[0]);
  126. Deck.erase(Deck.begin());
  127. }
  128. cout << "все карты взяты" << endl;
  129. return Player;
  130. }
  131.  
  132. void Game::takeAll(const int& strokeNumber, vector<Card> activeCards_1, vector<Card> activeCards_2) {
  133. if (strokeNumber % 2 == 1) {
  134. for(int i = 0; i < activeCards_1.size(); i++) {
  135. Player_2.push_back(activeCards_1[i]);
  136. }
  137. for(int i = 0; i < activeCards_2.size(); i++) {
  138. Player_2.push_back(activeCards_2[i]);
  139. }
  140. }
  141. else {
  142. for(int i = 0; i < activeCards_1.size(); i++) {
  143. Player_1.push_back(activeCards_1[i]);
  144. }
  145. for(int i = 0; i < activeCards_2.size(); i++) {
  146. Player_1.push_back(activeCards_2[i]);
  147. }
  148. }
  149. }
  150.  
  151. int Game::Move_1(int strokeNumber) { // в этой функции ходит человек, а отбивается программа
  152. int selectedCard = 0;
  153. vector<Card> flipCard, flipCard_1;
  154. vector<Card> activeCards_1, activeCards_2;
  155. cout << "колода №1: " << endl;
  156. PrintVector(Player_1);
  157. cout << endl;
  158. cout << "колода №2: " << endl;
  159. PrintVector(Player_2);
  160. cout << "какой картой вы хотите сходить?" << endl;
  161. cin >> selectedCard;
  162. --selectedCard;
  163. cout << "вы ходите картой: " << Player_1[selectedCard].name << " " << Player_1[selectedCard].suit << endl;
  164. activeCards_1.push_back(Player_1[selectedCard]);
  165. Player_1.erase(Player_1.begin() + selectedCard);
  166. vector<int> goodCard;
  167. goodCard = GoodCards(strokeNumber, activeCards_1.size() - 1, activeCards_1);
  168.  
  169. if (Beat(goodCard) == false) {
  170. takeAll(strokeNumber, activeCards_1, activeCards_2);
  171. Player_1 = addCards(Player_1);
  172. --strokeNumber;
  173. return strokeNumber;
  174. }
  175. else {
  176. cout << "отбиваю: " << Player_2[goodCard[0]].name << " " << Player_2[goodCard[0]].suit << endl;
  177. activeCards_2.push_back(Player_2[goodCard[0]]);
  178. Player_2.erase(Player_2.begin() + goodCard[0]);
  179.  
  180. }
  181. flipCard = Flip(strokeNumber, activeCards_1);
  182. flipCard_1 = Flip(strokeNumber, activeCards_2);
  183. while (flipCard_1.size() > 0) {
  184. flipCard.push_back(flipCard_1[0]);
  185. flipCard_1.erase(flipCard_1.begin());
  186. }
  187. while (flipCard.size() > 0) {
  188. int yes = 0;
  189. cout << "вы можете подкинуть карту. если вы хотите подкинуть карту, введите 1." << endl;
  190. cout << "если вы не хотите подкидывать кариу, введите 0" << endl;
  191. cin >> yes;
  192. if (yes == 1) {
  193. cout << "ваши карты: " << endl;
  194. PrintVector(Player_1);
  195. cout << "какую карту вы хотите подкинуть?" << endl;
  196. cin >> selectedCard;
  197. --selectedCard;
  198. if (Check(Player_1[selectedCard], flipCard) == true) {
  199. activeCards_1.push_back(Player_1[selectedCard]);
  200. Player_1.erase(Player_1.begin() + selectedCard);
  201. goodCard = GoodCards(strokeNumber, activeCards_1.size() - 1, activeCards_1);
  202. if (Beat(goodCard) == false) {
  203. cout << "беру карты" << endl;
  204. takeAll(strokeNumber, activeCards_1, activeCards_2);
  205. Player_1 = addCards(Player_1);
  206. --strokeNumber;
  207. return strokeNumber;
  208. }
  209. else {
  210. cout << "отбиваю: " << Player_2[goodCard[0]].name << " " << Player_2[goodCard[0]].suit << endl;
  211. activeCards_2.push_back(Player_2[goodCard[0]]);
  212. Player_2.erase(Player_2.begin() + goodCard[0]);
  213.  
  214. }
  215. }
  216. else {
  217. cout << "вы не можете подкинуть эту карту" << endl;
  218. }
  219. }
  220. else {
  221. break;
  222. }
  223. flipCard = Flip(strokeNumber, activeCards_1);
  224. flipCard_1 = Flip(strokeNumber, activeCards_2);
  225. while (flipCard_1.size() > 0) {
  226. flipCard.push_back(flipCard_1[0]);
  227. flipCard_1.erase(flipCard_1.begin());
  228. }
  229. }
  230. Player_1 = addCards(Player_1);
  231. Player_2 = addCards(Player_2);
  232. return strokeNumber;
  233. }
  234.  
  235. int Game::Move_2(int strokeNumber) { // в этой функции ходит программа, а отбивается человек
  236. int selectedCard = 0;
  237. vector<Card> flipCard, flipCard_1;
  238. vector<Card> activeCards_1, activeCards_2;
  239. cout << "колода №1: " << endl;
  240. PrintVector(Player_1);
  241. cout << endl;
  242. cout << "колода №2: " << endl;
  243. PrintVector(Player_2);
  244. for(int i = 1; i < Player_2.size(); i++) {
  245. if (Player_2[i - 1].suit != TrumpCard.suit && cardPriority[Player_2[i - 1].name] < cardPriority[Player_2[i].name] ) {
  246. selectedCard = i - 1;
  247. }
  248. else if (Player_2[i - 1].suit != TrumpCard.suit && cardPriority[Player_2[i - 1].name] > cardPriority[Player_2[i].name] ) {
  249. selectedCard = i;
  250. }
  251. else {
  252. selectedCard = i;
  253. }
  254. }
  255. cout << "хожу: " << Player_2[selectedCard].name << " " << Player_2[selectedCard].suit << endl;
  256. activeCards_2.push_back(Player_2[selectedCard]);
  257. Player_2.erase(Player_2.begin() + selectedCard);
  258. int stop = 0;
  259. cout << "если вы будете отбиваться, введите 1." << endl;
  260. cout << "если вы не хотите отбиваться, введите 0." << endl;
  261. cin >> stop;
  262. if (stop != 1){
  263. takeAll(strokeNumber, activeCards_1, activeCards_2);
  264. Player_2 = addCards(Player_2);
  265. --strokeNumber;
  266. return strokeNumber;
  267. }
  268. vector<int> goodCard;
  269. goodCard = GoodCards(strokeNumber, activeCards_2.size() - 1, activeCards_2);
  270. if (goodCard.size() == 0) {
  271. cout << "вам нечем отбиваться, вы взяли карты" << endl;
  272. takeAll(strokeNumber, activeCards_1, activeCards_2);
  273. Player_2 = addCards(Player_2);
  274. --strokeNumber;
  275. return strokeNumber;
  276. }
  277. else {
  278. int necCard = 0;
  279. while(true) {
  280. cout << "какой картой вы будете отбиваться?" << endl;
  281. cin >> necCard;
  282. --necCard;
  283. if (Check(necCard, goodCard) == false) {
  284. cout << "этой картой нельзя отбиться, выберите другую" << endl;
  285. }
  286. else {
  287. cout << "вы отбваетесь картой: " << Player_1[necCard].name << " " << Player_1[necCard].suit << endl;
  288. activeCards_1.push_back(Player_1[necCard]);
  289. Player_1.erase(Player_1.begin() + necCard);
  290. break;
  291. }
  292. }
  293. }
  294. flipCard = Flip(strokeNumber, activeCards_1);
  295. flipCard_1 = Flip(strokeNumber, activeCards_2);
  296. while (flipCard_1.size() > 0) {
  297. flipCard.push_back(flipCard_1[0]);
  298. flipCard_1.erase(flipCard_1.begin());
  299. }
  300.  
  301. while (flipCard.size() > 0) {
  302. cout << "подкидываю: " << flipCard[0].name << " " << flipCard[0].suit << endl;
  303. activeCards_2.push_back(flipCard[0]);
  304. for(int i = 0; i < Player_2.size(); i++){
  305. if (Player_2[i].name == flipCard[0].name && Player_2[i].suit == flipCard[0].suit) {
  306. Player_2.erase(Player_2.begin() + i);
  307. }
  308. }
  309. goodCard = GoodCards(strokeNumber, activeCards_2.size() - 1, activeCards_2);
  310. if (goodCard.size() == 0) {
  311. cout << "вам нечем отбиться, вы взяли карты" << endl;
  312. takeAll(strokeNumber, activeCards_1, activeCards_2);
  313. Player_2 = addCards(Player_2);
  314. --strokeNumber;
  315. return strokeNumber;
  316. }
  317. else {
  318. int stop = 0;
  319. cout << "если вы будете отбиваться, введите 1." << endl;
  320. cout << "если вы не хотите отбиваться, введите 0." << endl;
  321. cin >> stop;
  322. if (stop != 1){
  323. takeAll(strokeNumber, activeCards_1, activeCards_2);
  324. Player_2 = addCards(Player_2);
  325. --strokeNumber;
  326. return strokeNumber;
  327. }
  328.  
  329. int necCard = 0;
  330. while(true) {
  331. cout << "какой картой вы будете отбиваться?" << endl;
  332. cout << "ваши карты: " << endl;
  333. PrintVector(Player_1);
  334. cin >> necCard;
  335. --necCard;
  336. if (Check(necCard, goodCard) == false) {
  337. cout << "этой картой нельзя отбиться, выберите другую" << endl;
  338. }
  339. else {
  340. cout << "вы отбиваетесь картой: " << Player_1[necCard].name << " " << Player_1[necCard].suit << endl;
  341. activeCards_1.push_back(Player_1[necCard]);
  342. Player_1.erase(Player_1.begin() + necCard);
  343. break;
  344. }
  345. }
  346. }
  347. while (flipCard.size() > 0) {
  348. flipCard.erase(flipCard.begin());
  349. }
  350. flipCard = Flip(strokeNumber, activeCards_1);
  351. flipCard_1 = Flip(strokeNumber, activeCards_2);
  352. while (flipCard_1.size() > 0) {
  353. flipCard.push_back(flipCard_1[0]);
  354. flipCard_1.erase(flipCard.begin());
  355. }
  356. }
  357. Player_1 = addCards(Player_1);
  358. Player_2 = addCards(Player_2);
  359. return strokeNumber;
  360. }
  361.  
  362. bool Game::Check(const Card& card, const vector<Card>& Player) {
  363. for (int i = 0; i < Player.size(); i++) {
  364. if(card.name == Player[i].name && card.suit == Player[i].suit) {
  365. return true;
  366. }
  367. }
  368. return false;
  369. }
  370.  
  371. bool Game::Check(const int& card, const vector<int>& goodCard) {
  372. for (int i = 0; i < goodCard.size(); i++) {
  373. if(card == goodCard[i]) {
  374. return true;
  375. }
  376. }
  377. return false;
  378. }
  379.  
  380. void Game::startGame() {
  381. for (int i = 0; i < 12; i++) {
  382. if (Player_1.size() < 6) {
  383. Player_1.push_back(Deck[0]);
  384. Deck.erase(Deck.begin());
  385. }
  386. else if (Player_2.size() < 6) {
  387. Player_2.push_back(Deck[0]);
  388. Deck.erase(Deck.begin());
  389. }
  390. }
  391. TrumpCard = Deck[Deck.size() - 1];
  392. cout << "Козырная карта: " << TrumpCard.name << " " << TrumpCard.suit << endl;
  393. cout << "ваша колода - №1." << endl;
  394.  
  395. int strokeNumber = 1;
  396. while (Player_1.size() > 0 && Player_2.size() > 0) {
  397. if (strokeNumber % 2 == 1) {
  398. strokeNumber = Move_1(strokeNumber) + 1;
  399. cout << "Бита!" << endl;
  400.  
  401. system("pause");
  402. }
  403.  
  404. else {
  405. strokeNumber = Move_2(strokeNumber) + 1;
  406. cout << "Бита!" << endl;
  407.  
  408. system("pause");
  409. }
  410. }
  411. if (Player_1.size() == 0) {
  412. cout << "игра закончена, победил игрок № 1" << endl;
  413. } else {
  414. cout << "игра закончена, победил игрок № 2" << endl;
  415. }
  416.  
  417. }
  418.  
  419. int main () {
  420. setlocale (LC_ALL, "Russian");
  421. SetConsoleCP(1251);
  422. SetConsoleOutputCP(1251);
  423. string CardsFile = "cards.txt";
  424. Game start(CardsFile);
  425. start.startGame();
  426. system("pause");
  427. return 0;
  428. }
Add Comment
Please, Sign In to add comment