Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- // TPKing.cpp: определяет точку входа для консольного приложения.
- //
- #include "stdafx.h"
- #include <iostream>
- #include <time.h>
- #include <cstdlib>
- #include <ctime>
- #include <cstring>
- #define cout std::cout
- #define endl std::endl
- #define cin std::cin
- int N;
- void random_moves(int);
- void manual_moves(int);
- void KingMove(int, int);
- struct coordinates {
- int x;
- int y;
- };
- //coordinates coord[] = {0};
- struct Moves {
- Moves() {
- Head = NULL; //Обозначили в конструкторе что голова пустая, ибо очередь пуста
- }
- int val;
- int size;
- Moves *Head, *Tail, *Next;
- void Add(const int x);
- void Show();
- void Del();
- };
- void Moves::Add(int x) {
- static int count = 0;
- /////////////////////////////////////////////
- Moves *temp = new Moves;
- Next = temp->Head;
- temp->val = x;
- if (Head != NULL) {
- Tail->Next = temp;
- Tail = temp;
- }
- else Head = Tail = temp;
- ////////////////////////////////////////////
- count++;
- size = count;
- }
- void Moves::Show() {
- Moves *temp = Head; //Получаем адрес начала очереди
- int count = 1;
- while (temp != Tail->Next) { //Пока адрес указателя не совпадет со следующим элементом за хвостом очереди
- cout << "\n" << temp->val << " " << "\n"; //Будем выбирать элементы, использя указатель temp
- KingMove(temp->val, count); //Передаём в функцию значение и счетчик для координат
- count++;
- temp = temp->Next; //Как только выбрали элемент, переходим по новому адресу к следующему элементу
- }
- }
- void Moves::Del() {
- Moves *temp = new Moves;
- int count = 0;
- while (temp != Tail) {
- temp = Head;//Нашли текущее начало очереди и запомнили адрес в сторонюю переменую
- Head = Head->Next; //Сместили фактическое начало на адрес следующего поступившего элемента
- cout << "Udalena swiaz s: " << temp->val << "\n"; //Для наглядности
- delete temp; //Очистили связь
- }
- }
- coordinates* coord = new coordinates[N];
- int main()
- {
- //coordinates *coord;
- //int N; // Кол-во ходов
- Moves mv; //Объявили переменную типа нашей очереди FIFO (имя структуры)
- mv.Head = NULL; //Обозначили что голова пустая, ибо очередь пуста (можно в конструкторе)
- setlocale(LC_ALL, "Russian");
- cout << "Введите кол-во ходов: ";
- cin >> N;
- //coordinates* coord = new coordinates[N];
- for (int i = 0;i < N + 1;i++) {
- coord[i].x = 0;
- coord[i].y = 0;
- }
- //coord = new coordinates[N];
- char quest[] = "yes";
- char *answer = new char[4];
- cout << endl << "Изначально Король находится в координах (0;0). И поскольку поле бесконечное, то может двигаться в любом из направлений." << endl << "Будете ли Вы заполнять список случайными ходами? (По умолчанию: " << quest << ") ";
- cin >> answer;
- if (strcmp(quest, answer) == 0) {
- random_moves(N);
- }
- else {
- manual_moves(N);
- }
- system("pause");
- return 0;
- }
- void random_moves(int nmoves) {
- Moves mv;
- srand(time(NULL));
- cout << "Сделаем случайные ходы...";
- int action;
- for (int i = 0;i < nmoves;i++) {
- action = rand() % 7 + 0;
- mv.Add(action);
- }
- mv.Show();
- system("pause");
- }
- void manual_moves(int nmoves) {
- Moves mv;
- cout << endl << "0 - Верх" << endl << "1 - Вниз" << endl << "2 - Влево" << endl << "3 - Вправо" << endl << "4 - Вверх-вправо" << endl << "5 - Вниз-вправо" << endl << "6 - Вниз-влево" << endl << "7 - Вверх-влево" << endl;
- int action;
- for (int i = 0;i < nmoves;i++) {
- cin >> action;
- if (action > 7 || action < 0) { cout << "Не существует такого действия. Введите еще раз:"; }
- while (action > 7 || action < 0) { cin >> action; }
- mv.Add(action);
- }
- mv.Show();
- system("pause");
- }
- void KingMove(int move, int count) {
- //coordinates *coord;
- int i = count;
- coord[count].x += coord[count - 1].x;
- coord[count].y += coord[count - 1].y;
- if (move == 0) { coord[count].y += coord[0].y; }
- if (move == 1) { coord[count].y--; }
- if (move == 2) { coord[count].x--; }
- if (move == 3) { coord[count].x++; }
- if (move == 4) { coord[count].x++; coord[count].y++; }
- if (move == 5) { coord[count].x++; coord[count].y--; }
- if (move == 6) { coord[count].x--; coord[count].y--; }
- if (move == 7) { coord[count].x--; coord[count].y++; }
- //coord[0].x += coord[count].x;
- //coord[0].y += coord[count].y;
- cout << "X: " << coord[count].x << "\t" << "Y: " << coord[count].y << endl;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement