Advertisement
SP2FET

Untitled

Mar 30th, 2017
70
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 7.84 KB | None | 0 0
  1. // TP_2.cpp: Okre�la punkt wej�cia dla aplikacji konsoli.
  2. //
  3.  
  4. #include "stdafx.h"
  5. #include <iostream>
  6. #include <conio.h>
  7. #include <vector>
  8. #include <queue>
  9. #include <algorithm>
  10. #include <ctime>
  11. #include <list>
  12. #include <stack>
  13. using namespace std;
  14.  
  15.  
  16. #pragma region Track
  17.  
  18. class CTrack
  19. {
  20. private:
  21.  
  22.     stack<char> track;
  23.     vector<char> pattern;
  24.     int capacity;
  25.  
  26. public:
  27.  
  28.     CTrack(int length);
  29.     void generate_pattern();
  30.     int  pattern_length() { return pattern.size(); }
  31.     char  get_rev_pattern_car(int number);
  32.     char get_first_car() { return track.top(); }
  33.     vector<char> get_pattern() { return pattern; }
  34.     void clear_track() { while (!track.empty()) track.pop(); }
  35.     bool is_filled() { return (track.size() < capacity) ? false : true; }
  36.     int  length() { return track.size(); }
  37.     void add_car(char value) { if (!is_filled()) track.push(value); }
  38.     int get_capacity() { return capacity; }
  39. };
  40.  
  41. CTrack::CTrack(int max_capacity)
  42. {
  43.     capacity = max_capacity;
  44.     generate_pattern();
  45.     if (pattern.size() > capacity)  capacity = pattern.size();
  46.  
  47. }
  48.  
  49. void CTrack::generate_pattern()
  50. {
  51.     //srand(time(NULL));
  52.     pattern.clear();
  53.     for (int i = 0; i < rand() % 2 + 3; i++)
  54.     {
  55.         pattern.push_back(rand() % 4 + 65);
  56.     }
  57. }
  58.  
  59.  
  60. char CTrack::get_rev_pattern_car(int number)
  61. {
  62.     vector<char>::reverse_iterator rit;
  63.  
  64.     int counter = 0;
  65.  
  66.     for (rit = pattern.rbegin(); rit != pattern.rend() && counter < number; rit++);
  67.  
  68.     return *rit;
  69. }
  70.  
  71. #pragma endregion
  72.  
  73.  
  74. #pragma region Train
  75.  
  76. class CTrain
  77. {
  78. private:
  79.     queue<char> train;
  80. public:
  81.  
  82.     CTrain(int number_of_cars);
  83.     //~CTrain();
  84.     int length() { return train.size(); }
  85.     void resize(int number_of_cars);
  86.     void add_car() { train.push(rand() % 4 + 65); }
  87.     void add_car(char value) { train.push(value); }
  88.     char get_first_car() { if (!train.empty()) return train.front(); }
  89.     void delete_first_car() { if (!train.empty()) train.pop(); }
  90. };
  91.  
  92. CTrain::CTrain(int number_of_cars)
  93. {
  94.     resize(number_of_cars);
  95. }
  96.  
  97. void CTrain::resize(int number_of_cars)
  98. {
  99.     if (number_of_cars > train.size())
  100.     {
  101.         for (int i = train.size(); i < number_of_cars; i++)  train.push(rand() % 4 + 65);
  102.     }
  103.     else if (number_of_cars < train.size())
  104.     {
  105.         while (number_of_cars != train.size())  delete_first_car();
  106.     }
  107.     //    else cout<<"The train size is the same as insterted value!"<<endl;
  108. }
  109.  
  110. #pragma endregion
  111.  
  112.  
  113. #pragma region Grafika
  114.  
  115. class CGraphics
  116. {
  117. private:
  118.     vector<vector<char>> buffer;
  119. public:
  120.     CGraphics(int x_size, int y_size);
  121.     CGraphics(int x_size);
  122.     void insertXY(int x, int y, char to_insert) { buffer[y][x] = to_insert; }
  123.     void insertXY(int x, int y, char* to_insert);
  124.     void insertXY(int x, int y, vector<char> to_insert);
  125.     void insertXY(int x, int y, int to_insert) { buffer[y][x] = to_insert + '0'; }
  126.     void clearXY(int x, int y) { buffer[y][x] = ' '; }
  127.     void writeTrack(int x, int y, int length, int number);
  128.     void writeTrain(int x, int y, CTrain train);
  129.     void print();
  130. };
  131.  
  132. CGraphics::CGraphics(int x_size, int y_size)
  133. {
  134.     buffer.resize(y_size);
  135.     vector<vector<char>>::iterator line_it = buffer.begin();
  136.     vector<char>::iterator col_it;
  137.  
  138.     for (; line_it != buffer.end(); line_it++)
  139.     {
  140.         (*line_it).resize(x_size);
  141.     }
  142. }
  143.  
  144. CGraphics::CGraphics(int x_size)
  145. {
  146.     buffer.resize(x_size);
  147.     vector<vector<char>>::iterator line_it = buffer.begin();
  148.     vector<char>::iterator col_it;
  149.  
  150.     for (; line_it != buffer.end(); line_it++)
  151.     {
  152.         (*line_it).resize(x_size);
  153.     }
  154. }
  155.  
  156. void CGraphics::print()
  157. {
  158.     vector<vector<char>>::iterator line_it = buffer.begin();
  159.     vector<char>::iterator col_it;
  160.     system("cls");
  161.     cout << "Y size: " << buffer.size() << endl;
  162.     cout << "X size: " << buffer[0].size() << endl;
  163.     for (; line_it != buffer.end(); line_it++)
  164.     {
  165.  
  166.         for (col_it = (*line_it).begin(); col_it != (*line_it).end(); col_it++)
  167.         {
  168.             cout << *col_it;
  169.         }
  170.         cout << endl;
  171.     }
  172.  
  173. }
  174.  
  175. void CGraphics::insertXY(int x, int y, char* to_insert)
  176. {
  177.     for (size_t i = 0; *(to_insert + i) != 0; i++)
  178.         buffer[y][x + i] = *(to_insert + i);
  179. }
  180.  
  181. void CGraphics::insertXY(int x, int y, vector<char> to_insert)
  182. {
  183.     for (size_t i = 0; i < to_insert.size(); i++)
  184.         buffer[y][x + i] = to_insert[i];
  185. }
  186.  
  187. void CGraphics::writeTrack(int x, int y, int length, int capacity)
  188. {
  189.     for (int i = 0; i < length; i++)
  190.     {
  191.         buffer[y][x + i] = '=';
  192.         if (i == capacity) buffer[y][x + i] = '|';
  193.     }
  194. }
  195.  
  196. void CGraphics::writeTrain(int x, int y, CTrain train)
  197. {
  198.     for (int i = 0; train.length() > 0; i++)
  199.     {
  200.         buffer[y][x + i] = train.get_first_car();
  201.         train.delete_first_car();
  202.     }
  203. }
  204.  
  205. #pragma endregion
  206.  
  207.  
  208.  
  209. #pragma region Railways
  210.  
  211. class CRailway
  212. {
  213. private:
  214.     vector<CTrack> tracks;
  215.     CTrain train;
  216.     CGraphics *buffer;
  217. public:
  218.     CRailway(int number_of_tracks, int tracks_capacity, int number_of_cars);
  219.     ~CRailway();
  220.     void move_car(int track_number);
  221.     bool check_car_combination(int track_number);
  222.     void display() { buffer->print(); }
  223.     void apply_template();
  224.  
  225. };
  226.  
  227. void CRailway::apply_template()
  228. {
  229.     buffer->writeTrain(1, 1, train);
  230.  
  231.  
  232.     for (int i = 0; i < tracks.size(); i++)
  233.     {
  234.         if (i == 0)
  235.             buffer->writeTrack(train.length() + (2 * i) + 5, (2 * i) + 1, 25 - (2 * i), tracks[i].get_capacity());
  236.         else
  237.             buffer->writeTrack(train.length() + (2 * i) + 10, (2 * i) + 1, 20 - (2 * i), tracks[i].get_capacity());
  238.  
  239.         buffer->insertXY(train.length() + 31, (2 * i) + 1, "TOR");
  240.         buffer->insertXY(train.length() + 35, (2 * i) + 1, i + 1);
  241.         buffer->insertXY(train.length() + 36, (2 * i) + 1, ": [");
  242.         buffer->insertXY(train.length() + 39, (2 * i) + 1, tracks[i].get_pattern());
  243.         buffer->insertXY(train.length() + 39 + tracks[i].pattern_length(), (2 * i) + 1, ']');
  244.     }
  245.  
  246.  
  247.     // szablon narysowany
  248. }
  249. /*
  250. bool CRailway::check_car_combination(int track_number)      ///!! kombinacja w wektorze jest od konca
  251. {
  252. static int car_number = 0;
  253. bool found_combination = false;
  254.  
  255.  
  256. if(!car_number)
  257. {
  258. if (tracks[track_number].get_first_car() == tracks[track_number].get_rev_pattern_car(car_number))  car_number = 1;
  259. }
  260. else
  261. {
  262. if(tracks[track_number].get_first_car() == tracks[track_number].get_rev_pattern_car(car_number)) car_number++;
  263. else
  264. {
  265. car_number = 0;
  266. }
  267. }
  268.  
  269. if (car_number == tracks[track_number].pattern_length())
  270. {
  271. found_combination = true;
  272. car_number = 0;
  273.  
  274. }
  275.  
  276. return found_combination;
  277.  
  278. } */
  279.  
  280. bool CRailway::check_car_combination(int track_number)      ///!! kombinacja w wektorze jest od konca
  281. {
  282.     static int car_number = 0;
  283.  
  284.     if (tracks[track_number].get_first_car() == tracks[track_number].get_rev_pattern_car(car_number)) car_number++;
  285.     else
  286.     {
  287.         car_number = 0;
  288.         return false;
  289.     }
  290.  
  291.     if (car_number == tracks[track_number].pattern_length())
  292.     {
  293.         car_number = 0;
  294.         return true;
  295.     }
  296.     else return false;
  297.  
  298. }
  299.  
  300. CRailway::~CRailway()
  301. {
  302.  
  303.     delete buffer;
  304. }
  305.  
  306.  
  307. void CRailway::move_car(int track_number)
  308. {
  309.     if (train.length())
  310.     {
  311.         tracks[track_number].add_car(train.get_first_car());
  312.         train.delete_first_car();
  313.     }
  314.     //else cout << "There is no cars left" << endl;
  315. }
  316.  
  317.  
  318.  
  319.  
  320. CRailway::CRailway(int number_of_tracks, int tracks_capacity, int number_of_cars) : train(number_of_cars)  ///!!!!!!!!!!!!!!!
  321. {
  322.     buffer = new CGraphics(60, 10);
  323.  
  324.  
  325.     for (int i = 0; i < number_of_tracks; i++)
  326.     {
  327.  
  328.         tracks.push_back(CTrack(tracks_capacity));
  329.         tracks[i].generate_pattern();
  330.        
  331.     }
  332.  
  333.  
  334. }
  335.  
  336.  
  337. #pragma endregion
  338.  
  339.  
  340.  
  341. int main()
  342. {
  343.  
  344.     srand(time(NULL));
  345.     //  CRailway *railway = new CRailway(5, 7);
  346.  
  347.     //CRailway *railway = new CRailway(5, 7);
  348.     cout << "test";
  349.     CRailway *game = new CRailway(5, 3, 10);
  350.  
  351.     //cout << "train size:" << railway->get_train_length() << endl;
  352.     //railway->print_tracks();
  353.     /*train->print();
  354.     cout << " ";
  355.     track->print();
  356.     train->addCar('A');
  357.     cout << "train size:" << railway->get_train_length() << endl;
  358.     train->print();
  359.     train->addCar();
  360.     train->print(); */
  361.     game->apply_template();
  362.     game->display();
  363.     //buffer.print();
  364.     if (_getch() == 27) cout << "50";
  365.     //delete railway;
  366.     return 0;
  367. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement