Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
2012 DKA-201 Ivanov Vladimir.docx
Скачиваний:
17
Добавлен:
19.09.2019
Размер:
264.3 Кб
Скачать

Листинг

#include "StdAfx.h"

#include "a2b2c2.h"

#include "stdafx.h"

#include <iostream>

#include <conio.h>

#include <string>

using namespace std;

void list::Add_element(int str, int stb, int num, bool bomb)

{

element *new_element = new element;

if (head == NULL) //first elem

{

new_element->prev = new_element;

new_element->next = new_element;

head = new_element;

tail = new_element;

}

new_element->bomb = bomb;

new_element->num = num;

new_element->str = str;

new_element->stb = stb;

tail->next = new_element;//ссылка с предпоследнего

head->prev = new_element;//ссылка с первого

new_element->next = head;

new_element->prev = tail;

tail = new_element;

count_element++;

};

void list::Print_list()

{

element *new_element = head;

if (head == NULL)

cout << "Empty list\n";

else

{

cout << endl;

for (int i=0; i<count_element; i++)

{

if (new_element->bomb == true)

cout << "bomb " << ": [" << new_element->str << ";" << new_element->stb << "]\n";

//else

// cout << "box number " << new_element->num << ": [" << new_element->str << ";" << new_element->stb << "]\n";

new_element = new_element->next;

}

/*

cout << endl << "List <-:";

new_element = tail;

for (int i=0; i < count_element; i++)

{

cout << new_element->data + ' ';

new_element = new_element->prev;

}*/

}

};

void list::Del_element(int str, int stb, int level)

{

element *new_element = head;

{

for(int i=0; i<level; i++) //иначе, переходим до этого элемента

{

new_element = new_element->next;

if ((new_element->str==str) && (new_element->stb == stb))

break;

}

if (new_element == head) //если удаляем первый элемент

{

if (count_element == 1) //если этот элемент единственный

{

head = NULL;

tail = NULL;

}

else //если он первый, но не единственный

{

head = new_element->next;//head укаывает на второй

new_element->next = NULL;

new_element->prev = NULL;//удаляем ссылки удаляемого элемента

head->prev = tail;//второй->последний

tail->next = head;//последний->второй

}

cout << "\nbomb number"<<new_element->num<< ": [" << str<< ";"<<stb << "] is found ";

delete new_element;

count_element--;

return;

}

}

if (new_element == tail) //если удаляем последний элемент

{

tail = new_element->prev;

new_element->next = NULL;

new_element->prev = NULL;

tail->next = head;

head->prev = tail;

cout << "\nbomb number"<<new_element->num<< ": [" << str<< ";"<<stb << "] is found ";

delete new_element;

count_element--;

}

//если элемент находится в центре списка

if ((new_element != head) && (new_element != tail))

{

//new_element

new_element->prev->next = new_element->next; //предыдущий элемент указывает на следующий

new_element->next->prev = new_element->prev; //следующий указывает на предыдущий

cout << "\nbomb number"<<new_element->num<< ": [" << str<< ";"<<stb << "] is found ";

delete new_element;

count_element--;

return;

}

};

void list::Del_list()

{

if (head != NULL)

for (int i=0; i < count_element; i++)

{

element *new_element = head;

head = head->next;

new_element->next = NULL;

new_element->prev = NULL;

delete new_element;

}

count_element = 0;

head = NULL;

tail = NULL;

};

void KillBomb(int level)

{

bool fl=true;

for (int i=0; i<level; i++)

for (int j=0; j<level; j++)

if ((a[i][j]==20) && (b[i][j]==1))

{

new_element = bomb_list.head;

int ttl =0;

bool usf_elem = true;

while (usf_elem)

{

new_element = new_element->next;

ttl++;

if (((new_element->str == i) && (new_element->stb == j)) || (ttl>level*level+1))

usf_elem=false;

}

if (new_element == bomb_list.head)

if (bomb_list.count_element == 1)

bomb_list.head = NULL;

else

bomb_list.head = new_element->next;

if (new_element == bomb_list.tail)

if (bomb_list.count_element == 1)

bomb_list.tail = NULL;

else

bomb_list.tail = new_element->prev;

new_element->prev->next = new_element->next;//ссылка с предпоследнего на следующий

new_element->next->prev = new_element->prev;//со следующего на предыдущий

bomb_list.count_element--;

if(game_list.head == NULL)

{

game_list.head = new_element;

game_list.tail = new_element;

new_element->next = new_element;

new_element->prev = new_element;

}

else

{

game_list.tail->next = new_element;

new_element->prev = game_list.tail;

game_list.head->prev = new_element;

new_element->next = game_list.head;

game_list.tail = new_element;

}

game_list.count_element++;

}

cout <<"\nBombs left: ";

bomb_list.Print_list();

cout <<"\nBombs found: ";

game_list.Print_list();

bomb_list.Del_list();

game_list.Del_list();};

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]